首页 > 解决方案 > 尽管对象仍然可见,但 Unity OnBecameInvisible() 会触发

问题描述

我有一个网格渲染器和一个分配给旋转球体的脚本,其中有一个孔。球体在层次结构中没有特定或特殊的位置,它就在相机旁边。脚本部分如下所示:

void OnBecameInvisible() {
  Destroy(gameObject); 
}

问题是,当我用我的球通过球体时,即使球体仍然有一半可见,它也会被删除。我在场景中没有其他摄像头,我使用的那个被标记为主摄像头。


视频

标签: c#unity3dcameravisibledestroy

解决方案


而不是OnBecameInvisible用于剔除你已经通过的对象,只需检查它是否足够在相机后面Update

Camera mainCam;
[SerializeField] float maxBehindDistance = 0.5f;

void Awake() { mainCam = Camera.main; }

void Update()
{
    Vector3 relPos = mainCam.transform.InverseTransformPoint(transform.position);
    if (relPos.z < -maxBehindDistance)
    {
        Destroy(gameObject);
    }
}

推荐阅读