gpt4 book ai didi

c# - 跟踪游戏对象变换 - 为什么使用 FindGameObjectWithTag 不起作用?

转载 作者:行者123 更新时间:2023-11-30 12:43:30 24 4
gpt4 key购买 nike

我正在学习教程(准确地说是 survival shooter ),我正处于实现 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 中的属性上(我先将属性公开,然后将其更改为 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。

最佳答案

您可能在场景中有不止 1 个带有标签“Player”的对象。我更改了您的代码以检测这种情况。

Transform _player;
NavMeshAgent nav;

void Start()
{
GameObject[] playerObjects = GameObject.FindGameObjectsWithTag("Player");
if(playerObjects.Length>1)
{
Debug.LogError("You have multiple player objects in the scene!");
}
_player = playerObjects[0].transform;
nav = GetComponent<NavMeshAgent>();
}

void Update()
{
nav.SetDestination(_player.position);
}

关于c# - 跟踪游戏对象变换 - 为什么使用 FindGameObjectWithTag 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com