首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示hit gameObject的名称

显示hit gameObject的名称
EN

Stack Overflow用户
提问于 2015-02-06 10:49:59
回答 2查看 3.5K关注 0票数 0

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

事情是,我想显示的项目的名字,球员是击中的射线广播。我试过了,但遗憾的是,它不起作用:

代码语言:javascript
复制
#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);
    }
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-06 11:14:49

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

票数 1
EN

Stack Overflow用户

发布于 2015-02-06 11:16:29

您的代码有点棘手,因为不使用OnGUI()方法可能是个更好的主意。当光线投射击中播放机时,从更新中调用自定义方法会更容易。

更容易实现的一个例子是:

代码语言:javascript
复制
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上绘制Collider名称。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28364063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档