Using Navmesh Off Mesh Links
Quantum匯出Unity關閉網格連結到其自己的資料架構,並且提供最小的支援以使用導航網格連結。
建立導航網格連結
- 建立一個Unity
Off Mesh Link
。Quantum忽略Activated
、Auto Update Positions
及Navigation Area
屬性。
- 使用
MapNavMeshDebugDrawer
指令碼來嵌入地圖並檢查產生的連結。連結顯示為藍色箭頭。
- 代理現在在其路徑尋找中已經自動使用導航網格連結。
切換導航網格連結
連結可被切換為開或關,並且限制哪些代理可以使用它們,這是透過使用Quantum導航網格區域來完成。附加一個MapNavMeshRegion
指令碼到關閉網格連結,設定Id
及Cast Region
為No Region
。
掛鉤遊戲遊玩
沒有更改的情況下,代理將以其正常速度來周遊連結。當透過接聽ISignalOnNavMeshWaypointReached
信號,已經到達連結時,您可以接手代理的控制。之後可停用代理,直到您的動畫已完成,或是可覆寫在ISignalOnNavMeshMoveAgent
信號中的移動程式碼(這需要一個導航網格設定的更改,以切換MovementType
為Callback
)。
當踏上連結啟動導航點時,這個程式碼範例執行一個傳送。
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
)..