統合フェーズ 2: 最初の NavData を生成する

ゲーム内での Gameware Navigation の主な用途のほとんどが NavData を使用しています。NavData とは、ゲームの地形の移動可能なエリアおよびトポロジの接続を表す最適化されたデータ構造です。NavData はゲームで使用する各地形またはレベルに対して作成する必要がある重要なリソースです。

通常は、アーティストがゲーム レベルの作成に使用するのと同じゲーム エディタ ツールに NavData の制作を直接統合するために NavData 生成システムの API を使用します。これによりデータの制作が自動化され、NavData が地形自体の最新の変更に常に一致するようになります。ただし、この統合の設定には時間と手間が必要です。したがって、最初のいくつかの NavData を生成するために Navigation Lab を使用して、後の「統合フェーズ 6: NavData 生成 API を使用する」でデータ生成 API の統合に戻ります。

Navigation Lab を使用して NavData を生成するには:

  1. 地形を .obj ファイルにエクスポートします。このファイル フォーマットの詳細については、ここを参照してください。

    このファイル内のメッシュには、パス ファインディングおよびパス フォローイングにおいてキャラクタが考慮する必要があるシーン内の静的で破壊できないオブジェクトすべてが含まれている必要があります。これには、地面または高さマップ、建物、樹木、街灯柱、壁、ベンチ、フェンスなどが含まれます。その他の破壊可能な、もしくは動的な障害物(自動車や箱など)は、.obj ファイルに含めないようにする必要があります。この種の動的なオブジェクトは、実行時に World に追加されます。

    .obj ファイルの使用は、Navigation Lab というツール単体での要件であり、データ生成システム自体の要件ではないことに注意してください。NavData 生成システムをユーザ独自のコードに統合する場合は、.obj ファイルを使用する必要はありません(ただし、そうしたい場合は使用してもかまいません)。

    ここでは、実行時に全体をロードする小さな地形を選択します。Navigation Lab は、デフォルトでは、地形全体の NavData を含めたファイルを 1 つだけ作成します。初めての統合のためのこのチュートリアルを完了した後は、さまざまな方法を使用して地形を複数のセクタに分割し、ゲームで他の種類のデータに使用されているストリーミング ロジックを反映したり、実行時にロードする必要のあるデータの量を減らしたりできます。

  2. Navigation Lab を起動します。
  3. Navigation Lab の 3D ビューに .obj ファイルをドラッグ & ドロップします。

    ゲームで使用される座標系を設定するためのダイアログ ボックスが表示されます。開発しているゲームの座標系において、Up、Right、Front の座標にどの軸が使われているか指定します。また、ゲームで合計 1 メートルになる計測ユニットの数を設定するには、OneMeter コントロールを使用します。これは、地形の測定単位となる縮尺をコントロールします。

    Navigation Lab は、座標系の設定でエラーを検出すると、エディタ ウィンドウにそのエラーを表示します。

  4. 使用した地形が正しい向きで表示されるはずです。方向が正しくない場合は、必要に応じて座標系を調整します。地形が正しく表示されたら、Coordinate system editor を閉じます。

  5. メイン Navigation Lab ウィンドウの右側の Generation パネルを開きます。

    • Output セクションで、出力ファイルを作成する場所を設定します。

      NavGenProj File 設定では、生成を記録するために Navigation Lab が作成するプロジェクト ファイルの場所を決定します。この .NavGenProj ファイルを再び開くことで、いつでも前に終了したところから作業を再開できます。

      Base output directory にすべての NavData 出力ファイルを作成する場所の絶対パスを設定します。ゲーム用のデータを生成するときは毎回同じ値にしておきます。

      Relative Directory にこのレベルの NavData を作成するベース出力ディレクトリ下の場所のパスを設定します。この相対ディレクトリは出力 NavData に保存され、視覚的なデバッグの際に、ゲーム内に現在ロードされているレベルのデータを自動的に取得するために使用することができます。

    • また、Parameters セクションで、Entity height および Entity radius の値をゲーム内でこの NavData を使用するキャラクタの寸法に一致するように設定します。

    今のところこのウィンドウのその他の設定はあまり重要ではありませんが、後で自由に戻ってこの設定を確認することができます。

  6. Generate をクリックします。Navigation Lab が地形の NavMesh を生成し、生成が完了すると 3D ビュー内に表示されます。

    生成処理に関する情報は Log パネルに表示されます。

    選択した地形によっては、屋根の上、木の上、壁の上など、ゲーム内でキャラクタに行って欲しくない場所で NavMesh が生成される可能性があります。これは今のところ問題になりませんが、最終的には、不要なエリアを除外するためのいくつかの可能な手法のうちの 1 つを使用します。詳細は、「移動可能な領域を識別する」を参照してください。

    注: 生成プロセスが失敗する場合、または非常に長い時間がかかる場合、地形の座標系マッピング設定時に OneMeter コントロールで行った地形のスケールの設定が間違っている可能性があります。OneMeter の値を大きくして、もう一度試してください。

  7. これで NavMesh が生成されたため、Navigation Lab 内で地形に対して直接クエリを実行することができます。また、LabGame を起動して地形をゲームに送り、ユーザ独自のゲーム レベルで Bot、障害物、およびスマート オブジェクトをスポーンして試すことができます。LabGame の使用、サンプルの起動、クエリの実行の概要については、「Navigation Lab で作業を開始する」を参照してください。

出力ファイル

出力ファイルの生成

出力ディレクトリには、次の拡張子を持つ新しいファイルが幾つか置かれています。

  • .ClientInput: 生成システムに渡されたジオメトリの記録が含まれています。
  • .GenIO: 生成プロセスで使用されるセクタ定義および設定パラメータ値の記録が含まれます。データ生成 API を直接使用する場合は、このファイルを使用して、前回実行したデータ生成から設定を再作成することができます。
  • .DataIndex: このセクタ用に生成された、データの参照可能な記録が含まれています。このファイルのコンテンツから新しい Kaim::DatabaseDescriptorIndex オブジェクトを作成し、その API を使用して、そのセクタ用に生成されたデータ オブジェクトを参照およびロードできます。
  • .NavData: 実行時にゲームにロードして使用する、レベルの最終的な NavMesh です。

最も重要なファイルは、.NavData ファイルです。統合の次のフェーズを完了するには、このファイルが必要になります。

Navigation Lab 出力ファイル

Navigation Lab で生成プロジェクトを保存することができます。生成を実行するために使用されるすべての情報は .NavGenProj 拡張子のファイルに書き込まれており、このファイルには生成設定の XML リプレゼンテーションと入力 .obj ファイルが含まれています。

Navigation Lab でデータを生成すると、Navigation Lab はコマンドライン NavGenLauncher ツールにこのファイルを透過的に渡します。また、NavGenLauncher ツールを手動で呼び出し、Navigation Lab の外部で生成を再実行するためにこのファイルを渡すこともできます。「NavGenLauncher」も参照してください。