This page has not been upgraded to Quantum 3.0 yet. The information may be out of date.
ナビメッシュオフリンクの使用
ナビメッシュオフメッシュリンクの使用
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() は便利ですが遅いです
if ((waypointFlags & Navigation.WaypointFlag.LinkStart) == Navigation.WaypointFlag.LinkStart) {
// リンクの開始には常に次のウェイポイントがあると確信できます
var linkDestination = agent.GetWaypoint(f, waypointIndex + 1);
f.Unsafe.GetPointer<Transform2D>(entity)->Position = linkDestination;
}
}
リンク通過例外
- エージェントが現在リンクを通過中かどうかを
NavMeshPathfinder.IsOnLink(FrameBase)
を使用して確認します。 - エージェントがリンクを通過中に新しいターゲットを設定すると、エージェントは現在のリンクを完了してからパスファインディングを実行します。これは、
WaypointFlag.RepathWhenReached
を設定することによって行われます。 - 最後のウェイポイントの前のウェイポイントが
LinkStart
の場合、再経路がトリガーされます。これにより、リンク開始ウェイポイントにすでに到達しているときに再経路を実行する問題を早期に軽減できます。 - エージェントがリンクを通過している限り、自動再経路(
NavMeshAgentConfig.MaxRepathTimeout
)は実行されません。