【问题标题】:Show the name of hit gameObject显示命中游戏对象的名称
【发布时间】:2015-04-06 11:52:09
【问题描述】:

我正在为我的学校创建一个项目,到目前为止进展顺利。我已经搜索了将近一个小时的答案,但仍然找不到任何东西(错误的标签?)。

问题是我想显示玩家使用 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);
    }
}

如果有人知道答案 - 请帮助我。提前致谢!

【问题讨论】:

  • 请不要在标题中添加标签,Unity的“JavaScript”实际上不是JavaScript而是UnityScript
  • 哦,好的。抱歉 - 不会再发生了。

标签: unity3d unityscript raycasting


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的代码有点棘手,因为也许不使用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
            }
       }
    }
    

    当然你必须实现方法drawColliderName,你必须在GUI上绘制碰撞器名称。

    如果你只是想让你的代码工作,你必须在 OnGUI() 中调用 name 变量,就像在我的代码的 Debug.Log 调用中一样,这只是调用 hit.collider.gameObject.name 而不是 hit.collider.gameObject

    【讨论】:

      猜你喜欢
      • 2017-12-13
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多