如何在 Unity 中为敌人 AI 脚本创建默认播放器?

问题描述

我有一个敌人 AI 脚本,它基本上跟随我的玩家。现在我有一个“公共游戏对象播放器”,我必须通过将我的播放器预制件拖到插槽上来手动分配。但是我希望场景中有很多敌人,所以我不想为每个敌人都手动执行此操作。我怎样才能给 EnemyController 脚本一个认的玩家跟随?

我有一个 PlayerManager,用于将我的玩家的位置传递给敌人:

public class EnemyController : MonoBehavIoUr
{
    Transform target;

    // Start is called before the first frame update
    void Start()
    {
        target = PlayerManager.instance.player.transform;
    }

那部分工作正常。所以我的想法是,像这样为玩家创建一个公共变量:

public GameObject player = PlayerManager.instance.player;

但这没有用。我收到此错误:“NullReferenceException:未将对象引用设置为对象的实例”

非常感谢您提供的任何帮助!

解决方法

使用 public GameObject player = PlayerManager.instance.player; 时,您的字段在调用 EnemyController 的构造函数之前被初始化,并且您无法控制 PlayerManager.instance.player 的值/定义状态(PlayerManager 或实例或播放器)可以为空,在您的情况下为空)。所以现在使用它“为时过早”。

相反,您可以使用 PlayerInputManager 中的事件 playerJoinedEvent 将敌人分配给刚刚加入的事件处理程序,该事件处理程序检查 PlayerManager 和 {{1} } 和 instance 不为空,然后将玩家分配给目标。