2015-02-06 1 views
0

학교용 프로젝트를 만들고 있는데 지금까지는 꽤 좋아졌습니다. 거의 한 시간 동안 답변을 검색했지만 여전히 잘못된 태그를 찾을 수 없었습니다.히트 gameObject의 이름 표시

플레이어가 레이캐스팅으로 치고있는 항목의 이름을 표시하고 싶습니다. 나는이 시도했지만 아쉽게도 제대로 동작하지 않습니다 : 사람이 답을 알고 있다면

#pragma strict 

var rayLength : int = 10; 

private var inventory : Inventory; 

private var guiShow : boolean = false; 

var bush : GameObject; 
var player : GameObject; 

function Start() 
{ 
    inventory = GameObject.Find("First Person Controller").GetComponent(Inventory); 
} 

function Update() 
{ 
    var hit : RaycastHit; 

    var forward = transform.TransformDirection(Vector3.forward); 

    if(Physics.Raycast(transform.position, forward, hit, rayLength)) 
    { 
     if(hit.collider.gameObject.tag == "Wood") 
     { 
      guiShow = true; 

      if(Input.GetKeyDown("e")) 
      { 
       inventory.wood++; 
       Destroy(hit.collider.gameObject); 
       guiShow = false; 
      } 
     }  
     else if(hit.collider.gameObject.tag == "Sticks") 
     { 
      guiShow = true; 

      if(Input.GetKeyDown("e")) 
      { 
       inventory.stick++; 
       Destroy(hit.collider.gameObject); 
       guiShow = false; 
      } 
     } 
     else if(hit.collider.gameObject.tag == "BushFull") 
     { 
      guiShow = true; 
      bush = (hit.collider.gameObject); 

      if(Input.GetKeyDown("e")) 
      { 
       inventory.berry += 5; 
       bush.GetComponent(BushController).berriesTaken = true; 
       guiShow = false; 
      } 
     } 
     else 
     { 
      guiShow = false; 
     } 
    } 
    else 
    { 
     guiShow = false; 
    } 
} 

function OnGUI() 
{ 
    if(guiShow == true) 
    { 
     GUI.Box(Rect(Screen.width/2, Screen.height/2, 100, 25), "Pick up" + hit.collider.gameObject); 
    } 
} 

이 - 저를 도와주세요. 미리 감사드립니다!

+0

추가하지 마십시오의 hit.collider.gameObject.name를 호출, 내 코드의 debug.log를 호출에 같은 이름의 변수를 호출해야 꼬리표 안에 꼬리표 및 Unity의 "JavaScript"는 실제로 JavaScript 그러나 UnityScript가 아니다 – LearnCocos2D

+0

아, 좋아. 죄송합니다. 다시는 발생하지 않습니다. – Fiffe

답변

1

hit.collider.name을 사용하여 gameObject의 이름을 검색하면됩니다. 그것이 작동하지 않는다면 (나는 99 % 확신 할 것입니다.) hit.collider.gameObject.name

+0

고마워 이제 작동 중입니다 :) – Fiffe

0

OnGUI() 방법을 사용하지 않는 것이 더 좋은 생각 일 수 있기 때문에 코드는 약간 까다 롭습니다. 레이 캐스트가 플레이어를 강타했을 때 업데이트에서 맞춤 메서드를 호출하는 것이 더 쉽습니다. 물론

function Update() 
{ 
    var hit : RaycastHit; 

    var forward = transform.TransformDirection(Vector3.forward); 

    if(Physics.Raycast(transform.position, forward, hit, rayLength)) 
    { 
     Debug.Log (hit.collider.gameObject.name); //Shows the hittenGo in the console 

     drawColliderName(hit.collider.gameObject.name); 

     if (hit.collider.gameObject.tag == "Woods") 
     { 
      //do Woods tuff 
     } 
     else if (hit.collider.gameObject.tag == "Sticks") 
     { 
      //do Sticks stuff 
     } 
     else if (hit.collider.gameObject.tag == "BushFull") 
     { 
      //do BushFull stuff 
     } 
    } 
} 

당신은 당신이 GUI에서 충돌 장치 이름을 그려야하는 방법 drawColliderName을 구현해야한다 : 쉽게 구현

한 예는 다음과 같다. 당신은 당신의 코드가 작동하려면

OnGUI() 당신이 단지 대신 hit.collider.gameObject

관련 문제