2016-10-15 2 views
0

좋아, 나는 운이없는 Unity3d 공개 토론에 주변에 물었다. 나는 여기에 아주 간단한 것을 시도하고 있는데 어떤 이유 때문에 하나의 C# 스크립트가 다른 함수를 호출 할 수 없다.Cant에서 다른 스크립트의 메서드를 호출합니까? Unity 사용?

여기에 Unity에 있는데 GameObject에서 간단한 탭을 감지하고 그 탭을 기반으로하는 작업을 수행하는 데 사용하려는 2 개의 스크립트가 있습니다. OnMouseDown은 어떤 이유로 든 실패했습니다.

터치 된 객체의 스크립트에서 함수를 호출하기 위해 빈에 첨부 된 TouchManager 스크립트 사용에 대한 기사를 읽었으니 여기에 나와 있습니다. 그것은 Raycasts를 사용하고 감동을 게임 오브젝트를 취득하기로하고 Touched() 기능이라고 : 나는 배열 오류에 OutofBounds을 얻고 있었다, 경우

protected virtual void Update() { 
    if (Input.touchCount > 1) { 

     if (Input.touches [0].phase == TouchPhase.Stationary) { 
      Ray ray = Camera.main.ScreenPointToRay (Input.touches [0].position); 
      if (Physics.Raycast (ray, out hit, 100.0f)) { 
       touchedObject = hit.transform.gameObject; 
       touchedObject.GetComponent<touchableGameObject>().Touched(); 
       print (touchedObject.name); 
      } else print ("GetMouseButtonDown on nothing"); 
     } 
    } 
} 

첫 번째 않고 있습니다. 그러나 지금은 처음으로 나는 아무 결과도 얻지 못한다면.

다음 조립식 나의 적 (객체가 명확하다) 난 그냥이에 : 호출 할 수 있어야하므로

public void Touched() { 
    print ("touched!! WORKING"); 
} 

함수가 public입니다. Start() 메서드에 인쇄가있어서 스크립트가 작동 중임을 알 수 있지만 게임 객체를 명확하게 터치하거나 클릭 할 때도 Touched() 메서드가 호출되지 않습니다. 인쇄 경우 터치 관리자 스크립트 문, 나는 일관되게 마지막으로 다른 사람을 얻을 것이다 경우 첫 번째없이

:

print ("GetMouseButtonDown on nothing"); 

나는 유니티와 C# 밖으로 질수 그림이 비교적 새로운 오전. 이 일이 필요하고 필사적이야.

다른 C# 스크립트의 터치를 기반으로 함수를 호출하는 방법은 무엇입니까?

+0

아마도 게임 객체에 충돌이 발생했는지 확인 했습니까? – DRKblade

답변

0

이것은 매우 간단한 실수입니다.

원터치가있는 경우 Input.touchCount1입니다. 당신은 터치 이상 1 경우 에만 검사입니다 if (Input.touchCount > 1) {

: 2가있는 경우, Input.touchCount 값은 코드의 문제점이 줄에 2

입니다. if (Input.touchCount > 0) : 터치 이상 0입니다 if (Input.touchCount >= 1)

또는

경우 터치 더 또는 1에 동일한 경우

당신은 확인해야합니다.

이 중 하나가 문제를 해결해야합니다.

마지막으로 터치 된 GameObject에 touchableGameObject 스크립트가 연결되어 있다고 보장 할 수 없습니다. 이 때문에이 Touched() 함수를 호출하기 전에 GetComponent<touchableGameObject>()null인지 확인해야합니다. 스크립트의 이름을 대문자로 기입하십시오.이렇게하면 스크립트와 변수 이름을 쉽게 식별 할 수 있습니다.

protected virtual void Update() 
{ 
    if (Input.touchCount >= 1) 
    { 
     if (Input.touches[0].phase == TouchPhase.Stationary) 
     { 
      Ray ray = Camera.main.ScreenPointToRay(Input.touches[0].position); 
      if (Physics.Raycast(ray, out hit, 100.0f)) 
      { 
       touchedObject = hit.transform.gameObject; 


       touchableGameObject touchScript = touchedObject.GetComponent<touchableGameObject>(); 
       if (touchScript != null) 
       { 
        touchScript.Touched(); 
       } 

       print(touchedObject.name); 
      } 
      else 
      { 
       print("GetMouseButtonDown on nothing"); 
      } 
     } 
    } 
} 
+0

고마워요.하지만 여전히 큰 문제가 있습니다. 아무 것도 등록되어 있지 않습니다. "GetMouseButtonDown을 아무것도 얻지 못했습니다."- 게임 객체에서 터치를 감지 할 필요가 있습니다. – skyguy

+0

코드를 그대로 복사했습니다 – skyguy

+0

탭이 감지되면 'TouchPhase.Stationary'를 변경하십시오. – Programmer