问题描述
我有一个敌人 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
不为空,然后将玩家分配给目标。