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

Unity中如何为敌人AI脚本设置默认跟随的玩家对象?

报错原因

你直接在字段声明时赋值的写法会触发空引用,是因为C#脚本的字段默认初始化动作发生在脚本实例被创建的序列化阶段,此时游戏逻辑还未执行,PlayerManager的单例instance以及内部存储的player对象都还没有完成初始化,自然取不到有效值。

正确实现方案

保留Start生命周期方法里的赋值逻辑即可,同时可以保留public字段兼容手动赋值的需求:

public class EnemyController : MonoBehaviour
{
    // 保留public字段,支持手动赋值覆盖默认逻辑
    public GameObject player;
    Transform target;

    // Start is called before the first frame update
    void Start()
    {
        // 未手动赋值时自动调用PlayerManager的玩家对象
        if (player == null)
        {
            player = PlayerManager.instance.player;
        }
        target = player.transform;
    }
}

补充优化建议

为了避免PlayerManager初始化晚于EnemyController导致的偶发空引用,可以在Unity的「Edit -> Project Settings -> Script Execution Order」面板中,将PlayerManager的执行顺序调整到EnemyController之前,保证单例优先完成初始化。
如果需要在编辑阶段就批量给所有敌人预制体/场景内敌人填充默认值,可以写个简单的编辑器工具批量赋值,无需逐个拖拽。

内容的提问来源于stack exchange,提问作者Jef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 23:27:02