【问题标题】:Unity OnBecameInvisible() fires though object is still visible尽管对象仍然可见,但 Unity OnBecameInvisible() 会触发
【发布时间】:2021-06-08 18:48:24
【问题描述】:

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

void OnBecameInvisible() {
  Destroy(gameObject); 
}

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


Video

【问题讨论】:

  • 欢迎来到堆栈溢出。关于调试的问题需要包含足够的步骤来重现观察到的行为。对于统一性问题,这意味着有关场景、层次结构和必要组件的足够信息。请参阅minimal reproducible exampleHow to Ask 了解更多信息
  • @Ruzhim 我不知道我应该包括哪些额外信息,因为我说了我能说的所有内容并且我认为很重要。
  • 网格渲染器和脚本在同一个对象上吗?
  • @BenPeterson 当然,是的
  • @Ruzhim 不,我使用的是免费版。

标签: c# unity3d camera visible destroy


【解决方案1】:

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

【讨论】:

  • 我已经认为这是一种替代解决方案,但我真的很想了解 OnBecameInvisible() 的功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 2017-09-25
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 2021-05-01
相关资源
最近更新 更多