Unity OnBecameInvisible() 虽然对象仍然可见

问题描述

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

void OnBecameInvisible() {
  Destroy(gameObject); 
}

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


Video

解决方法

不要使用 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);
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...