2016-09-17 3 views
0

스크립트 외부에서 스크립트 기능을 액세스하고 호출하기 위해 열심히 노력했습니다.다른 스크립트에서 함수/스크립트를 실행하십시오.

-----이

public class example : MonoBehaviour { 
    void RunZebra() { 
      Zebra other = GetComponent<Zebra>(); 
      other.RunIt(); 
     } 
    } 

------ 얼룩말 스크립트가 스프라이트 ANIM에 부착 된 생기 스프라이트에 부착 교류 # 스크립트 안에

public class Zebra : MonoBehaviour { 
     public void RunIt() { 
      // action starting animation 

     } 
    } 

그러나 않습니다 어떤 이유로 실행되지 않습니까?

ScriptName의 변수에 액세스하여 애니메이션 상태가 변경되도록 설정해야합니다.

도움이되면 나는 행복한 사람이 될 것입니다.

+0

여기에 실제 코드를 게시하십시오. 당신이 준 작은 정보에 의해서만 추측 할 수 있습니다. 예를 들어, 호출하려는 함수가 비공개로 선언되었거나 오타가 있거나 다른 많은 것들이있을 수 있습니다. – Jireugi

+0

죄송합니다. 더 많은 코드를 추가했습니다. –

+0

'Zebra'와 'example'구성 요소를 동일한 gameobject에 올바르게 연결하고 RunZebra를 호출하면 문제없이 작동합니다. 그 방법이 불리지 않는다고 확신합니까? 'debug.log()'를 추가하여 호출하지 않았습니까? – Augure

답변

1

질문에 RunZebra 스크립트가 전체 스크립트 인 경우 중요한 것을 놓치고 있습니다.

RunZebra 함수는에서 호출해야합니다. Start(), Update() 함수 또는 다른 스크립트에서. 이 문제가 해결되지 않고 Debug.Log가 계속 표시되지 않는 경우

public class example : MonoBehaviour { 

void Start() 
{ 
    RunZebra(); 
} 

void RunZebra() { 
     Zebra other = GetComponent<Zebra>(); 
     other.RunIt(); 
    } 
} 

는 당신은 단순히 게임 오브젝트에 example 스크립트를 첨부 잊어 버렸습니다. 따라서 example 스크립트를 enabled 인 GameObject에 첨부하십시오.

편집 : 새로운 널 오류

,

Zebra other = GameObject.Find("NameOfGameObjectZebraIsAttachedTo").GetComp‌​onent<Zebra>(); 
+0

나는 RunZebra()를 가지고있다. 내 예제 스크립트에서 선언. Zebra와 예제가 다른 gameObject에 연결되어있을 때 아마도 가능하지 않을까요? 그렇다면 어떻게하면 장면의 각 "캐릭터"를 추적 할 수 있을까요? 예. 남자와 얼룩말? –

+0

귀하의 현재 질문을 이해할 수 없습니다. 가장 중요한 문제는'RunZebra'가 어떤 이유로 실행되지 않는다는 것입니다. 귀하의 의견에 따르면, 심지어'Debug.Log'는 작동하지 않습니다. 이것은 RunZebra 함수가 아무 곳에서도 호출되지 않는다는 표시입니다. 'Debug.Log'가 지금 작동합니까? – Programmer

+0

동일한 장면에 2 개의 다른 스프라이트를 드래그했습니다. 그런 다음 각각에 스크립트를 추가했습니다. 나는 Debug.Log를 시도했다. 그것은 다음과 같이 말합니다 : 객체 참조가 객체의 인스턴스로 설정되지 않았습니다. 죄송합니다. Unity에 대한 새로운 소식입니다. –

0

GetComponent<Zebra>();

교체는 내가 지금이 문제를 얻을 생각합니다. 그래서 어떤 게임 오브젝트 man에 첨부 된 example이라는 스크립트와 스크립트 Zebra이 첨부 된 하나 이상의 게임 오브젝트가 있습니다. 각각 Zebra 개체에 대해 메서드 (man 개체)를 사용하여 Zebra.RunIt 메서드를 실행하려고합니다.

달성하려면 example 스크립트를 수정해야합니다.

man GameObject에 첨부 된 example 스크립트에서 public 배열 Zebra 변수를 사용하는 것이 좋습니다. 그런 다음 Zebra GameObject를 Unity3d 편집기 UI를 통해 man 객체의 example 스크립트의 배열 속성 필드로 드래그 앤드 드롭 할 수 있습니다. (아래에 ZebraGameObject이라는 이름이 지정되어 있습니다. Zebra 개체 수로 UI의 ZebraGameObject 속성의 Size 속성을 먼저 설정해야 할 수 있습니다.

그러면 Unity3d 엔진은 RunIt 메서드가 호출 될 수 있도록 이전에 설정된 객체에서 example 스크립트에 대한 각 Zebra 스크립트에 대한 참조를 자동으로 가져옵니다.

의 코드가 맞다고 가정하면 Zebra 스크립트의 내용을 변경하지 마십시오.

여기에 필요한 수정이 적용된 example 스크립트가 있습니다. Zebra 객체가 동적으로 양산되지 않지만 설계시에 작성하는 경우 방법은 위대한 작품을

using UnityEngine; 

public class example : MonoBehaviour { 

    public Zebra[] ZebraGameObject = null; 

    void RunZebra() { 
     if (ZebraGameObject != null){ 
      for (int i=0; i<ZebraGameObject.Length; i++){ 
       ZebraGameObject[i].RunIt(); 
      } 
     } 
    } 
} 

. 동적으로 생성 된 Zebra 개체를 처리해야하는 경우 GameObject.FindObjectsOfType method 또는 GameObject.FindObjectsOfTypeAll method을 조사하고 싶을 수 있습니다.

+0

감사합니다. 나는 단지 1 개의 얼룩말을 가지고있다 :) 나는 그것을 시험해 볼 것이다. 매우 감사!!! –

0

감사합니다.

가 나는 얼룩말의 바르를 설정하려면 다음을했다 (그래서 애니메이션한다) :

GameObject objectIs = GameObject.Find("Zebra"); 

      //print (objectIs.name); 

      Animator zanimation; 
      zanimation = objectIs.GetComponent<Animator>(); 
      zanimation.SetBool("zebraLaugh", true); 

이 트릭을했다. 감사합니다 "프로그래머"- 정말 도와 줬어!

건배

+0

니스. 이것이 다른 GameObject에서 컴포넌트를 얻는 방법입니다. GameObject ** 현재 ** 스크립트가 첨부 된 구성 요소 만 가져 오려는 경우'obj.GetComponent'없이'GetComponent ();를 사용하십시오. 다른 GameObject에 연결된 구성 요소를 가져 오려면 먼저 해당 GameObject를 찾아서 그 구성 요소를 가져와야합니다. 해피 코딩! – Programmer

관련 문제