我正在学习一个教程(确切地说是生存射击游戏),并且我正处于实现 NavMesh 的阶段。他们的原始脚本是这样的:
Transform _player;
NavMeshAgent nav;
void Start()
{
_player = GameObject.FindGameObjectWithTag("Player").transform;
nav = GetComponent<NavMeshAgent>();
}
void Update()
{
nav.SetDestination(_player.position);
}
到目前为止没有什么特别的。我按下播放键,奇怪的是敌人(我现在场景中只有一个)只到达玩家的初始位置(0,0,0),而不是在玩家移动时跟随它。我意识到玩家的位置在_player
场上没有更新,它保持在0,0,0
.
我尝试了一种不同的方法:我将 Player 的游戏对象拖放到 UI 中的属性上(我先将属性设为 public,然后将其更改为GameObject
)。在这种情况下,它可以完美运行:
GameObject _player;
NavMeshAgent nav;
void Start()
{
//Player is not retrieved here as before, but it's passed assigning the GameObject to the property directly through the UI
nav = GetComponent<NavMeshAgent>();
}
void Update()
{
nav.SetDestination(_player.transform.position);
}
在这个阶段,我想知道:
方法是否FindGameObjectWithTag
复制对象而不是返回对GameObject
? 为什么它在第一个实例中不起作用。顺便说一句,我使用 Unity 5。