Unityナビメッシュのインポート
ナビメッシュのインポート
Quantum にナビメッシュを持ち込む最も一般的な方法は、Unity ナビメッシュをインポートし、Quantum のバイナリナビメッシュにベイクすることです。
Unity ナビメッシュのインポート
- Unity シーンを設定し、グローバルナビメッシュベイカー または ナビメッシュビルディングコンポーネント(ナビメッシュサーフェス) を使用して Unity ナビメッシュを生成します。
- マップの下に新しい GameObject を作成し(Quantum
MapData
スクリプト)、MapNavMeshUnity
スクリプトを追加します。GameObject の名前は後に Quantum ナビメッシュの名前になります。Unity ナビメッシュをインポートするために MapNavMeshUnity スクリプトを追加 - マップを選択し、
Bake All Mode
をEverything
に切り替えて Bake All を押し、エラーログを確認します。予想されるログメッセージは次のようになります:Imported Unity NavMesh 'Navmesh', cleaned up 1211 vertices, found 7 region(s), found 4 link(s)
マップをベイクするとナビメッシュがインポートされ、ベイクされます - Quantum ナビメッシュは以下のように表示されます。
- ..Quantum マップアセットの下の
NavMeshLinks
- ..マップアセットファイルの隣のプロジェクトビュー内(1 つの Quantum アセットファイルと 1 つのバイナリ
.bytes
ファイル)
Quantum ナビメッシュファイルがプロジェクトビューに表示されます - ..Quantum マップアセットの下の
- ベイクされた Quantum ナビメッシュを視覚化するには、ナビメッシュ GameObject に
MapNavMeshDebugDrawer
を追加し、BinaryAsset
の下に.bytes
ファイルをリンクします。ナビメッシュのギズモは、MapNavMeshDebugDrawer スクリプトを使用して非実行シーンにレンダリングされます - プレイモード中にナビメッシュを視覚化するには、
QuantumEditorSettings
でDraw Nav Mesh
を選択します。
すべての MapNavMeshUnity
スクリプトは、マップのベイキング中に評価されます。しかし、グローバル Unity ナビメッシュベイキングはナビメッシュを1つだけ生成するため、マップに複数のナビメッシュを追加することは以下のような場合にのみ意味があります:
- 複数のナビメッシュ表面を制御するためにサーフェスアドオンを使用している場合
- ナビメッシュを手動で描画している場合:
MapNavMeshDefinition
を使用し、MapNavMeshUnity
の代わりにします(Quantum V1 ドキュメンテーションを参照)。 - または、複数の Unity ナビメッシュベイキングの反復中にマップの一部を有効および無効化するカスタムベイキングロジックを作成している場合。
オプションとして、ナビメッシュのベイキングを、シーンの保存、プレイモードの変更、ビルドイベントごとに自動的に実行するように強制できます。詳細は QuantumEditorSettings
のエディタ機能を参照してください。

Quantum はナビメッシュが原点にのみ位置することをサポートします。精度の高い固定小数点算術のために、ゲームプレイが原点近くで行われることをお勧めします。
インポート設定
Weld Identical Vertices | Unity ナビメッシュは非接続の三角形のコレクションです。このオプションは非常に重要で、共有されている頂点を結合します。 |
Weld Vertex Epsilon | イプシロンを小さくしすぎないでください。結合が必要な頂点が見逃される可能性があります。また、値を大きくしすぎないでください。そうすると、ナビメッシュが変形します。 |
Delaunay Triangulation | このオプションは、インポートされた Unity ナビメッシュを Delaunay 三角形化処理して、より均等に分布した三角形を生成します(長い三角形を再配置します)。 |
Delaunay Triangulation Restrict To Planes | 3D ナビメッシュでは、Delaunay 三角形化が三角形を再配置中にスロープでナビメッシュを変形させる可能性があります。この動作は Unity のナビメッシュでも顕著で、ナビメッシュの高さがゲームプレイに使用されるときに影響を与える可能性があります(例:ナビメッシュ上を歩く)。このオプションをチェックすると、同じ平面にある三角形に三角形化を制限します。 |
Fix Triangles On Edges | インポートされた頂点が他の三角形の辺にあることがあります。これにより、望ましくない境界検出が発生します。このオプションでは、そのような三角形が分割されます。 |
Closest Triangle Calculation | ナビメッシュのないマップグリッド内のエリアは、最も近い隣接を検出する必要があります。この計算は非常に遅いです。SpiralOut オプションははるかに早いですが、フォールバック三角形が null になる可能性があります。 |
Closest Triangle Calculation Depth | SpiralOut を使用する際に、各方向に三角形を検索するためのセルの数。 |
Enable Quantum_XY | QUANTUM_XY 定義が設定されている場合にのみ表示されます。これをオンにすると、ナビメッシュのベイキング中に Y と Z のコンポーネントが反転され、XY 平面で生成されたナビメッシュをサポートします。 |
Min Agent Radius | ナビメッシュがサポートする最小エージェント半径。この値は、ナビメッシュと視覚的境界との間のマージンです。この値は、エディタでナビメッシュベイク設定(またはサーフェス設定)から取得することにより上書きされます。 |
ナビメッシュサーフェスの使用
Unity ナビメッシュサーフェスアドオンを使用することにはメリットがあります:
- ランタイムナビメッシュ計算が可能です(ただし、これがクライアント間で決定論的に実行できるわけではありません。生成されたナビメッシュのバイナリデータは送信される必要があります)。
- 複数のナビメッシュを簡単に作成できます。
NavMeshModifier
スクリプトを使用することで、Unity ナビメッシュのアイランド問題を軽減できます(Quantum FAQ を参照)。- 内部設定をより制御できます。
複数のサーフェスを Quantum ナビメッシュにリンクするには、NavMeshSurfaces
リストに追加します。一つのナビメッシュのマップベイキング中、シーン内の他のサーフェスは一時的に無効化されます。

カスタムベイキングオプション
MapNavMeshBaker.BakeNavMesh()
は、重要な Quantum ナビメッシュベイキングメソッドであり、MapNavMesh.BakeData
を入力データとして使用します。デフォルト設定では、ベイクデータはインポートされた Unity ナビメッシュの三角形化から生成されます。カスタム設定では、そのデータ構造に自分自身でデータを埋め込むことができます。基本的には、ただの三角形のスープです。
ナビメッシュベイキングをさまざまな方法でカスタマイズできます。
MapDataBakerCallback
から派生することによってベイキングパイプラインにスタティックコードを追加:OnCollectNavMeshBakeData
を実装して、既存のMapNavMesh.BakeData
を変更または新しいデータをパイプラインに注入できます。OnCollectNavMeshes
を実装して、既存のナビメッシュを変更するか、新しいNavMesh
オブジェクトを追加してシリアル化します。OnBeforeBakeNavMesh
またはOnBakeNavMesh
を実装して、ベイキングを完全にカスタマイズしたり、前処理や後処理を行ったりできます。
C#
public abstract class MapDataBakerCallback {
/// <summary>
/// すべてのナビメッシュが生成される前、またはベイクデータが収集されるときに呼び出されます。
/// </summary>
public virtual void OnBeforeBakeNavMesh(MapData data) { }
/// <summary>
/// ナビメッシュのベイキング中、このメソッドは現在の Unity ナビメッシュから取得したベイクデータのリストと共に呼び出されます。
/// 新しい BakeData オブジェクトを navMeshBakeData リストに追加します。
/// </summary>
/// <param name="navMeshBakeData">ベイクされるべきデータの現在のリスト</param>
public virtual void OnCollectNavMeshBakeData(MapData data, List<MapNavMesh.BakeData> navMeshBakeData) { }
/// <summary>
/// ナビメッシュのベイキングが完了した後、ナビメッシュアセットのリファレンスがデータ.Asset.Settings.NavMeshLinks に保存されます。
/// </summary>
public virtual void OnBakeNavMesh(MapData data) { }
}
MapDataBakerCallback
のメソッドは、マップベイキングプロセス中にリフレクションによって呼び出されます。公開クラス内のメソッドを記入し、アセンブリ定義の外に置いてください。GameObject をインスタンス化する必要はありません。マップアセットのベイキングパイプラインについての詳細は、マニュアルの Asset ページを参照してください。
経路探索の視覚化
QuantumEditorSettings
でパスファインダーギズモ Draw Pathfinder Funnel
をオンにして、シーンビュー内で経路のギズモを見ることができます。
シミュレーション設定で Thread Count
を 1 に設定すると、ギズモが毎回機能するようになります。Unity では、メインスレッドにのみアクセスできます。