2015-02-06 43 views
0

我正在为我的学校创建一个项目,直到现在它还是相当不错的。我搜索了近一个小时的答案,仍然找不到任何东西(错误的标签?)。显示命中游戏对象的名称

问题是我想显示玩家正在用raycast击中的物品的名称。我试过这个,但可悲的是它不工作:

#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

请不要加标题中的标签,Unity的“JavaScript”其实不是JavaScript,而是UnityScript – LearnCocos2D 2015-02-06 10:54:42

+0

哦,好的。对不起 - 不会再发生。 – Fiffe 2015-02-06 10:56:37

回答

1

只需使用hit.collider.name来检索gameObject的名称。如果这不起作用(我99%肯定会这样),请使用hit.collider.gameObject.name

+0

感谢它的工作:) – Fiffe 2015-02-06 12:39:52

0

您的代码有点棘手,因为如果不使用OnGUI()方法可能会更好。当raycast击中播放器时,从更新调用自定义方法更容易。更简单的实现

一个例子如下:

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 
     } 
    } 
} 

当然,你必须实现的方法drawColliderName,你必须利用GUI上的撞机名。

如果你只是想你的代码工作,在OnGUI()你在我的代码的调用的debug.log叫名变量一样,这只是调用hit.collider.gameObject.name代替hit.collider.gameObject