Unity GUI Label无缘无故地显示两次

时间:2016-09-13 10:18:26

标签: c# user-interface unity3d label

我正在开发一个应用程序,其中几个GUI Label的平面显示名称

这是结果

enter image description here

问题是,如果我将相机旋转180°,那些标签就在这里,就像有一个点对称

enter image description here

所以我的标签出现两次,一次出现在飞机上,这很好,第二次出现在相机后面。

我检查我的脚本是否没有添加两次,但是没有问题,更奇怪的是,如果从上面的视图看,问题就消失了:

enter image description here

我不知道这可能来自哪里,这是我的代码,附在每架飞机上:

void OnGUI()
{
    if (showInfos)
    {

        Rect r = new Rect((Camera.main.WorldToScreenPoint(gameObject.transform.position)).x+25, Camera.main.pixelHeight - (Camera.main.WorldToScreenPoint(gameObject.transform.position)).y+25, 75f, 75f);

        GUI.Label(r, gameObject.transform.root.name);

    }
}

1 个答案:

答案 0 :(得分:1)

您正在绘制标签,无论它们是否在视锥体中。

来自Camera.WorldToScreenPoint(强调我的):

  

屏幕空间以像素为单位定义。屏幕的左下角是(0,0);右上角是(pixelWidth,pixelHeight)。 z位置是相机的世界单位。

您需要检查屏幕点的Z值是负值还是正值(我不知道哪一个在凸轮前面,哪一个在它后面,我不使用Unity) ,并据此决定是否需要渲染。

void OnGUI()
{
    if (showInfos)
    {
        var pt = Camera.main.WorldToScreenPoint(gameObject.transform.position);
        if (pt.z > 0) //or < 0, no idea.
        {
            Rect r = new Rect(pt.x + 25, Camera.main.pixelHeight - pt.y + 25, 75f, 75f);
            GUI.Label(r, gameObject.transform.root.name);
        }
    }
}