我创建了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();
}
}
输出
答案 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。祝你好运。