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.

Unityナビメッシュのインポート

ナビメッシュのインポート

Quantum にナビメッシュを持ち込む最も一般的な方法は、Unity ナビメッシュをインポートし、Quantum のバイナリナビメッシュにベイクすることです。

Unity ナビメッシュのインポート

  • Unity シーンを設定し、グローバルナビメッシュベイカー または ナビメッシュビルディングコンポーネント(ナビメッシュサーフェス) を使用して Unity ナビメッシュを生成します。
  • マップの下に新しい GameObject を作成し(Quantum MapData スクリプト)、MapNavMeshUnity スクリプトを追加します。GameObject の名前は後に Quantum ナビメッシュの名前になります。
    Create Navmesh Script
    Unity ナビメッシュをインポートするために MapNavMeshUnity スクリプトを追加
  • マップを選択し、Bake All ModeEverything に切り替えて Bake All を押し、エラーログを確認します。予想されるログメッセージは次のようになります:
    Imported Unity NavMesh 'Navmesh', cleaned up 1211 vertices, found 7 region(s), found 4 link(s)
    
    Map Baking
    マップをベイクするとナビメッシュがインポートされ、ベイクされます
  • Quantum ナビメッシュは以下のように表示されます。
    • ..Quantum マップアセットの下の NavMeshLinks
    • ..マップアセットファイルの隣のプロジェクトビュー内(1 つの Quantum アセットファイルと 1 つのバイナリ .bytes ファイル)
    Navmesh Project View
    Quantum ナビメッシュファイルがプロジェクトビューに表示されます
  • ベイクされた Quantum ナビメッシュを視覚化するには、ナビメッシュ GameObject に MapNavMeshDebugDrawer を追加し、BinaryAsset の下に .bytes ファイルをリンクします。
    Navmesh Gizmos
    ナビメッシュのギズモは、MapNavMeshDebugDrawer スクリプトを使用して非実行シーンにレンダリングされます
  • プレイモード中にナビメッシュを視覚化するには、QuantumEditorSettingsDraw Nav Mesh を選択します。

すべての MapNavMeshUnity スクリプトは、マップのベイキング中に評価されます。しかし、グローバル Unity ナビメッシュベイキングはナビメッシュを1つだけ生成するため、マップに複数のナビメッシュを追加することは以下のような場合にのみ意味があります:

  • 複数のナビメッシュ表面を制御するためにサーフェスアドオンを使用している場合
  • ナビメッシュを手動で描画している場合:MapNavMeshDefinition を使用し、MapNavMeshUnity の代わりにします(Quantum V1 ドキュメンテーションを参照)。
  • または、複数の Unity ナビメッシュベイキングの反復中にマップの一部を有効および無効化するカスタムベイキングロジックを作成している場合。

オプションとして、ナビメッシュのベイキングを、シーンの保存、プレイモードの変更、ビルドイベントごとに自動的に実行するように強制できます。詳細は QuantumEditorSettings のエディタ機能を参照してください。

Navmesh Auto Baking

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 リストに追加します。一つのナビメッシュのマップベイキング中、シーン内の他のサーフェスは一時的に無効化されます。

Navmesh Surfaces
Quantum は Unity ナビメッシュサーフェスアドオンをサポートしています

カスタムベイキングオプション

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 では、メインスレッドにのみアクセスできます。

Back to top