You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:57:26