This document is about: QUANTUM 2
SWITCH TO

Using Navmesh Off Mesh Links

Quantum匯出Unity關閉網格連結到其自己的資料架構,並且提供最小的支援以使用導航網格連結。

建立導航網格連結

  • 建立一個Unity Off Mesh Link。Quantum忽略ActivatedAuto Update PositionsNavigation Area屬性。
off mesh link setup
  • 使用MapNavMeshDebugDrawer指令碼來嵌入地圖並檢查產生的連結。連結顯示為藍色箭頭。
off mesh link debug
  • 代理現在在其路徑尋找中已經自動使用導航網格連結。
off mesh link path gizmo

切換導航網格連結

連結可被切換為開或關,並且限制哪些代理可以使用它們,這是透過使用Quantum導航網格區域來完成。附加一個MapNavMeshRegion指令碼到關閉網格連結,設定IdCast RegionNo Region

off mesh link regions

掛鉤遊戲遊玩

沒有更改的情況下,代理將以其正常速度來周遊連結。當透過接聽ISignalOnNavMeshWaypointReached信號,已經到達連結時,您可以接手代理的控制。之後可停用代理,直到您的動畫已完成,或是可覆寫在ISignalOnNavMeshMoveAgent信號中的移動程式碼(這需要一個導航網格設定的更改,以切換MovementTypeCallback)。

當踏上連結啟動導航點時,這個程式碼範例執行一個傳送。

C#

public void OnNavMeshWaypointReached(Frame f, EntityRef entity, FPVector2 waypoint, Navigation.WaypointFlag waypointFlags, ref bool resetAgent) {
    var agent = f.Get<NavMeshPathfinder>(entity);
    var waypointIndex = agent.WaypointIndex;
    // btw HasFlag() is convenient but slow
    if ((waypointFlags & Navigation.WaypointFlag.LinkStart) == Navigation.WaypointFlag.LinkStart) {
        // we can be pretty sure that there always is a next waypoint for a link start
        var linkDestination = agent.GetWaypoint(f, waypointIndex + 1);
        f.Unsafe.GetPointer<Transform2D>(entity)->Position = linkDestination;
    }
}

連結周遊例外

  • 透過使用NavMeshPathfinder.IsOnLink(FrameBase),查詢一個代理是否目前周遊一個連結。
  • 當設定一個新的目標,同時代理正在周遊一個連結時,代理將在執行路徑尋找之前完成目前的連結。透過設定WaypointFlag.RepathWhenReached來完成這件事情。
  • 如果在最後一個導航點之前的導航點是一個LinkStart,將觸發重新路徑。這有助於提前防止當已經到達連結啟動導航點,運行一個重新路徑的問題。
  • 在代理周遊一個連結時,將不會執行自動重新路徑(NavMeshAgentConfig.MaxRepathTimeout)..
Back to top