c# - 尽管对象仍然可见,但 Unity OnBecameInvisible() 会触发
问题描述
我有一个网格渲染器和一个分配给旋转球体的脚本,其中有一个孔。球体在层次结构中没有特定或特殊的位置,它就在相机旁边。脚本部分如下所示:
void OnBecameInvisible() {
Destroy(gameObject);
}
问题是,当我用我的球通过球体时,即使球体仍然有一半可见,它也会被删除。我在场景中没有其他摄像头,我使用的那个被标记为主摄像头。
解决方案
而不是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);
}
}
推荐阅读
- c# - C# 货币格式
- c# - 将列表的内容数据绑定到数据网格
- windows - Apache 未在 Windows 10 中的 XAMPP 中启动
- java - 在容错环境中将文件发送到 SFTP
- python - 如何安装 binarySearch 模块?
- node.js - 仅在更改时验证 mongoose 字段
- python - Python OpenCV 安装 - 导入 cv2 时出现 DLL 错误
- google-apps-script - 在一个命令中隐藏或显示多列
- neo4j - Neo4j 获得带有评论和喜欢的朋友帖子
- javascript - 在 CommonJS Node 应用程序中导入 ES6 模块?