Unity相机脚本中如何检测玩家对象是否已被销毁
解决相机跟随已销毁玩家报错的问题
最直接的处理方式,是在相机的LateUpdate方法开头添加空值检测,一旦发现要跟随的玩家对象(lookAt)已被销毁,就直接跳过后续的跟随逻辑,避免访问已销毁对象的属性引发报错。
修改后的完整代码如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraMotor : MonoBehaviour { public Transform lookAt; public float boundX = 0.001f; public float boundY = 0.001f; private void LateUpdate() { // 检测玩家对象是否已销毁,为空则终止后续逻辑 if (lookAt == null) return; Vector3 delta = Vector3.zero; // 检查X轴是否超出跟随边界 float deltaX = lookAt.position.x - transform.position.x; if (deltaX > boundX || deltaX < -boundX) { delta.x = transform.position.x < lookAt.position.x ? deltaX - boundX : deltaX + boundX; } // 检查Y轴是否超出跟随边界 float deltaY = lookAt.position.y - transform.position.y; if (deltaY > boundY || deltaY < -boundY) { delta.y = transform.position.y < lookAt.position.y ? deltaY - boundY : deltaY + boundY; } transform.position += new Vector3(delta.x, delta.y, 0); } }
你也可以选择以下两种替代方案:
- 在销毁玩家对象前,主动将相机的
lookAt赋值为null,提前终止相机的跟随行为。 - 触发玩家死亡逻辑时,先禁用相机的
CameraMotor脚本,再销毁玩家对象,从根源上避免报错。
内容的提问来源于stack exchange,提问作者hazzyp113
相关产品推荐
相关产品推荐

