当相机背对物体时,GUI Label会停留在屏幕上吗?

时间:2014-07-24 19:01:09

标签: c# unity3d

我在游戏中的NPC上有GUI标签,标签上面显示了他们的名字。但是当我走开去别的地方时,他们的名字就像它的镜像一样停留在屏幕上?

这就是我所说的:

这是它通常的样子

This is what it looks like on screen normally

当我走出视野时会发生这种情况。

This is what it looks like when I walk out of view

守则:

using UnityEngine;
using System.Collections;

public class NPC : MonoBehaviour {

private float left;
private float top;
public float leftModifier;
public float topModifier;

private Vector3 NPCScreenPosition;

//FIX THE MIRRORING ISSUE

void Start () {

}

void Update () {
    Vector3 NPCNameWorldPosition = (transform.position + new Vector3(0.0f, transform.lossyScale.y, 0.0f));
    NPCScreenPosition = Camera.main.WorldToScreenPoint(NPCNameWorldPosition);
    left = NPCScreenPosition.x + leftModifier;
    top = Screen.height - (NPCScreenPosition.y + topModifier);
}

void OnGUI() {
    GUI.Label(new Rect(left, top, 150, 25), gameObject.name.ToString());
  }
}

1 个答案:

答案 0 :(得分:1)

解决问题的最简单方法是检查屏幕坐标的深度(z值),看看物体是否在相机前面,即它是否可见。如果是,则该值为正。

如上所述,改变你的绘制调用如下所示:

void OnGUI 
{
    if(NPCScreenPosition.z >= Camera.main.nearClipPlane)
        GUI.Label(new Rect(left, top, 150, 25), gameObject.name.ToString());
}