如何在Unity中进入图块时使NavMeshAgent排队(基于到图块的路径距离?

问题描述 投票:-1回答:1

我正在制作一个游戏,其中多个NavMeshAgent正在尝试导航到特定的地砖。所有座席都应导航到该图块的边缘,但是只有第一个到达该图块边缘的人才能进入。磁贴上的代理在离开之前将在该位置停留一段时间,之后不会再返回该磁贴。然后,此循环将重复,下一个最接近的特工进入图块,其他符合条件的特工移至图块附近而不在其顶部。

注意:玩家通过移动墙壁来控制游戏中的障碍物,因此,如果更改障碍物的布局,路径的长度可以随时更改。

我不确定如何实现的可能可行方法:

  • 启用和禁用看不见的障碍
  • 反复呼叫CalculatePath()SetDestination()
  • 存储和使用NavMeshAgent列表
c# unity3d agent navmesh pathing
1个回答
0
投票

如果要停止其他navmesh代理,则可以使用isStopped属性。

来自统一的“ isStopped” API-“如果设置为True,则NavMesh代理的移动将沿着其当前路径停止。如果在NavMesh代理停止后将其设置为False,它将继续沿其当前路径移动。”

您可以找到所有可以使用查找功能的navmesh代理:

FindObjectsOfType(typeof(NavMeshAgent));
FindObjectsOfType<NavMeshAgent>();

您还可以使用触发屏障来触发您想要的任何动作(只需将一个不带网格物体的GameObject放置并将其对撞机设置为触发器)。

关于排序代理,您可以使用标准的Distance函数来计算与图块的距离。您可以创建字典或2个并行列表来对距离进行排序,同时保留有关座席的信息(哪个座席的距离最小\距离最大)。

© www.soinside.com 2019 - 2024. All rights reserved.