簡體   English   中英

如何在 Unity 中輸入瓦片時將 NavMeshAgents 排隊(基於到瓦片的路徑距離)?

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

我正在制作一個游戲,其中多個 NavMeshAgent 試圖導航到特定的地磚。 所有代理都應該導航到該圖塊的邊緣,但只有第一個到達該圖塊邊緣的代理才能進入它。 瓷磚上的特工會在離開前停留一段時間,之后不會再回到瓷磚上。 然后,這個循環將重復,下一個最近的代理進入該圖塊,其他符合條件的代理移動到盡可能靠近該圖塊的位置,而不在其頂部。

注意:玩家通過移動牆壁來控制游戲中的障礙物,因此如果修改了障礙物布局,路徑的長度可以隨時改變。

我不確定如何實施的可能可行的方法:

  • 啟用和禁用無形障礙
  • 重復調用CalculatePath()SetDestination()
  • 存儲和使用 NavMeshAgent 列表

如果您希望其他 navmesh 代理停止,您可以使用isStopped屬性。

來自統一“isStopped”API -“如果設置為 True,NavMesh 代理的移動將沿其當前路徑停止。如果在 NavMesh 代理停止后設置為 False,它將繼續沿其當前路徑移動。”

您可以使用 Find function 找到所有 navmesh 代理:

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

您還可以使用觸發障礙來觸發您想要的任何動作(只需放置一個沒有網格的游戲對象並將其對撞機設置為觸發)。

關於對代理進行排序,您可以使用標准距離function 計算與圖塊的距離。 您可以創建一個字典或 2 個並行列表來對距離進行排序,同時保留有關代理的信息(哪些代理具有最小\最大距離)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM