如何在进入 Unity 中的图块时对 NavMeshAgents 进行排队(基于到图块的路径距离)?

How to queue NavMeshAgents on entering a tile in Unity (based on path distance to tile)?

我正在制作一个游戏,其中多个 NavMeshAgent 试图导航到特定的地块。所有代理都应导航到此图块的边缘,但只有第一个到达图块边缘的人才能进入。 tile 上的 agent 在离开之前会在那里停留一段时间,之后不会 return 再次到 tile。然后,此循环将重复,下一个最近的代理进入图块,并且其他符合条件的代理移动到尽可能靠近图块而不是在它上面。

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

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

如果你想让其他navmesh代理停止,你可以使用isStopped 属性.

来自统一 "isStopped" API - "If set to True, the NavMesh agent's movement will be stopped along its current path. If set to False after the NavMesh agent has stopped, it will resume moving along its current path."

您可以找到所有可以使用“查找”功能的导航网格代理:

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

你也可以使用触发障碍来触发你想要的任何动作(只需放置一个没有网格的游戏对象并将其对撞机设置为触发)。

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