在GUI框上显示对象的名称

时间:2014-06-17 10:48:37

标签: c# unity3d collision-detection mouseover

我创建了2个立方体(立方体1,立方体2)。当我鼠标悬停在立方体1或立方体2上时,我想在GUI框中显示其名称。该名称显示在控制台中,但不在我的GUI框中,使用以下代码:

Public class Label : MonoBehaviour 
{
    public string collidedmesh;

    // Use this for initialization
    void Start () 
    {
        collidedmesh=transform.name;
        Debug.Log("........"+collidedmesh);
    }

    void OnGUI()
    {
        GUI.Box(new Rect(300, 100, 100, 20),""+collidedmesh);   
    }

    void OnMouseDown()
    {
        OnGUI();
    }
}

输出

enter image description here

2 个答案:

答案 0 :(得分:1)

您在同一位置渲染所有广告素材框。通过引用transform.position并通过Camera.WorldToScreenPoint()将其传递到screen-space来使用相对位置。

void OnGUI()
{
    Vector3 screenCoord = Camera.main.WorldToScreenPoint(transform.position);
    GUI.Box(new Rect(screenCoord.x, screenCoord.y, 100, 20),collidedmesh);
}

另外,执行"" + collidedmesh是浪费的操作,只需使用collidedmesh。

答案 1 :(得分:0)

您希望在悬停时或单击时显示框的名称?

您的问题有两个方面:
-OnGUI是自动调用的,所以你不能这样称呼它;无论如何,它都会发生
- 您正在使用OnMouseDown,只有在您有效点击对象时才会调用它

所以修复它们,删除OnMouseDown()函数。 在代码顶部添加一个布尔值,例如

bools isHovering = false;

然后,在你的OnGUI()函数中,在GUI.Box之前添加一个if语句,如下所示:

if(isHovering)
{
    GUI.Box(new Rect(300, 100, 100, 20),""+collidedmesh);
}

最后,添加一个OnMouseEnter()和一个OnMouseExit(),它将根据鼠标是否悬停在您的对象上来设置bool值,如下所示:

void OnMouseEnter()
{
    isHovering = true;
}

void OnMouseExit()
{
    isHovering = false;
}

这样,当你将鼠标悬停在某个东西上时,bool设置为true,激活显示对象名称的GUI.Box。当您停止悬停在它上面时,bool设置为false,停用GUI.Box。祝你好运。