This document is about: QUANTUM 3
SWITCH TO

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 は ActivatedAuto Update Positions および Navigation 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() は便利ですが遅いです
    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)は実行されません。
Back to top