このドキュメントでは、World Partition が設定された Navigation Mesh と Unreal Engine の World Partition システムの使用法についての概要を説明します。
World Partition は、自動データ管理および距離ベースのためのレベル ストリーミング システムであり、大規模なワールドの管理のための完全なソリューションを提供します。World Partition は、グリッド セルに分割された単一のパーシスタント レベルにワールドを保存することで、大きなレベルをサブレベルに分割するという必要性を排除し、ストリーミング ソースからの距離に応じてそれらのセルをロードおよびアンロードする自動ストリーミング システムを提供します。
このシステムの詳細については、「World Partition」のドキュメントをお読みください。
このドキュメントでは、World Partition が設定された静的なナビゲーション メッシュのみを対象としています。
1 - 必要な設定
[Games (ゲーム)] カテゴリのテンプレートから新規プロジェクトを作成します。この例では Third Person テンプレートを選択しました。
エディタで、 [File (ファイル)] > [New Level (新規レベル)] をクリックします。[Open World (オープン ワールド)] マップ タイプを選択し、[Create (作成)] をクリックします。レベルを保存します。
Open World デフォルト マップ タイプは、大規模なオープン ワールド マップを作成するための開始点として設計されており、デフォルトで次の機能が有効になっています。
World Partition
One File Per Actor
Data Layers (データ レイヤー)
Hierarchical Levels of Detail (階層詳細度)
[World Settings (ワールドセッティング)] パネルに移動し、[World Partition] セクションまで下にスクロールします。
[Runtime Settings (ランタイム設定)] > [Grids (グリッド)] > [Index [0]] を展開します。
[Loading Range (ロードする範囲)] の値を 12800 に変更します。値を小さくするほど、World Partition によってナビゲーション メッシュがロードされる際に視覚化が簡単になります。
このセクションの結果
このセクションでは、World Partition を使用するように設定したレベルを備えた新しいプロジェクトを作成しました。次のセクションでは、ナビゲーション メッシュが World Partition と連携するように構成します。
2 - ナビゲーション メッシュが World Partition を使用するように構成する
[Settings (設定)] > [Project Settings (プロジェクト設定)] をクリックして [Project Settings] ウィンドウを開きます。
[Navigation Mesh (ナビゲーション メッシュ)] カテゴリをクリックし、[Runtime (ランタイム)] セクションまで下にスクロールします。[Runtime Generation (ランタイム生成)] ドロップダウンをクリックして [Static (スタティック)] を選択します。
より大きなマップの場合は、 [Fixed Tile Pool Size (固定タイル プール サイズ)] チェックボックスを 有効 にして、[Tile Pool Size (タイル プール サイズ)] を設定して、タイル プールで使用されるメモリの量を制限できます。プール サイズを設定するときは、ロードされるすべての World Partition セルに対応する NavMesh タイルもロードされるように、十分なタイルが含まれていることを確認してください。
[Add + (追加 +)] > [Volumes (ボリューム)] > [NavMeshBoundsVolume] をクリックし、Navigation Mesh ボリューム アクタをレベルに追加します。
[Outliner (アウトライナ)] ウィンドウで [NavMeshBoundsVolume] アクタを選択し、[Details (詳細)] パネルに移動します。
レベル内のプレイ可能空間をカバーするようにアクタを スケーリング します。
ビルド中のナビゲーションをビューポートで確認するには、P を押します。
[World Outliner] ウィンドウで [RecastNavMesh-Default] を選択し、[Details] パネルに移動します。[Generation (生成)] セクションまで下にスクロールし、[Is World Partitioned (ワールド パーティションか)] チェックボックス をオンにします。
このセクションの結果
このセクションでは、ナビ メッシュ バウンズ ボリュームをレベルに追加しました。また、World Partition と連携するようにナビゲーション メッシュを構成しました。
次のセクションでは、ワークフローが改善されるようにエディタを構成します。
3 - エディタを構成する
非常に大きなレベルで作業を行う場合が多いため、ワークフローを改善するために自動ナビゲーション メッシュ生成を無効にすることをお勧めします。
これについては、以下の手順に従ってください。
[Edit (編集)] > [Editor Preferences (エディタの環境設定)] の順に選択すると、[Preferences (環境設定)] ウィンドウが開きます。
[Level Editor (レベル エディタ)] セクションまで下にスクロールして、[Miscellaneous (その他)] カテゴリをクリックします。[Editing (編集)] カテゴリまで下にスクロールし、[Update Navigation Automatically (ナビゲーションの自動更新)] チェックボックスをオフにします。
このセクションの結果
このセクションでは、ナビゲーション メッシュが自動的に更新されないように構成しました。これによって、通常、World Partition を使用する大規模なワールドで作業する際にワークフローが改善されます。
次のセクションでは、レベルでナビゲーション メッシュをビルドします。
2 - ナビゲーション メッシュを作成する
World Partition を設定したマップで作業する際は、通常、一部のアセットがロードされる一方で、他のアセットはアンロードされます。そのため、ナビゲーション メッシュ全体のビルドには異なるプロセスが必要です。
レベルでナビゲーション メッシュをビルドするには、次の手順に従います。
コマンド ラインに次のコンソール コマンドを入力し、Enter を押します。n.bNavmeshAllowPartitionedBuildingFromEditor 1
[Build (ビルド)] > [Build Paths (ビルド パス)] をクリックし、レベルでナビゲーション メッシュをビルドします。
[Build Navigation Settings (ビルド ナビゲーション設定)] ウィンドウで、 [Ok] をクリックし、ナビゲーション メッシュをビルドします。次のオプションも利用できます。
Verbose (詳細)- ビルド プロセスのより詳細なログを確認する場合は、このチェックボックスをオンにします。プロジェクトの 「Saved」 > 「Logs」 ディレクトリに、WPNavigationBuilderLog.txt という名前の出力ログが作成されます。
Clean Packages (パッケージを消去) - すべての World Partition が設定された NavMesh アクタ パッケージをプロジェクトから削除する場合はこれをオンにします。これは、ナビゲーションをビルドしません。
ここで [Outliner] ウィンドウに移動すると、4 つの NavDataChunk アクタがあることがわかります。これらのアクタは、World Partition によってロードおよびアンロードされるナビゲーション データを保持します。作成される NavDataChunk アクタの数は、Data Chunk Grid のサイズによって異なります (詳細については、セクション 6 を参照してください)。
このセクションの結果
このセクションでは、レベルでナビゲーションをビルドする方法を学習しました。また、異なる [Navigation Settings] オプションと NavDataChunk アクタがレベル内に作成される仕組みについても学習しました。
次のセクションでは、エディタの外部でナビゲーションをビルドする方法を学習します。
5 - World Partition Navigation Data Builder を使用してナビゲーション メッシュをビルドする
WorldPartitionBuilderCommandlet と WorldPartitionNavigationDataBuilder を使用し、World Partition が設定された静的なナビゲーション メッシュをエディタの外部でビルドすることもできます。
これを実行する方法の詳細については、「World Partition」ドキュメントの World Partition Navigation Data Builder のセクションの手順に従ってください。
6 - ナビゲーション メッシュの追加設定
[World Settings] ウィンドウに移動して [Navigation] セクションまで下にスクロールし、レベルの [Navigation Mesh (ナビゲーション メッシュ)] 設定を見つけます。
次のオプションがあります。
設定
説明
Navigation Data Chunk Grid Size (ナビゲーション データ チャンク グリッド サイズ)
これは、World Partition の各セルを使用してロードされる、データ チャンク アクタのサイズを定義します。この数値が小さいほど、データは詳細になります。
Navigation Data Builder Loading Cell Size (ナビゲーション データ ビルダー ローディング セル サイズ)
これは、ナビゲーション データをメモリにロードするために使用される、ロードするセルのサイズを定義します。
Navigation Data Chunk Grid Size (ナビゲーション データ チャンク グリッド サイズ) は 25600 に設定します。この数値が小さいほど、World Partition によってロードおよびアンロードされるナビゲーション データの表示が向上します。この値は、ゲームプレイのニーズ、ロードする範囲、および必要な詳細度に基づいて調整する必要があります。
[Build (ビルド)] > [Build Paths (ビルド パス)] をクリックし、レベルでナビゲーション メッシュをビルドします。
ここで [Outliner] ウィンドウに移動すると、レベルにさらに多くの NavDataChunk アクタがあることがわかります。これは、チャンク グリッド サイズが前よりも小さかったことが原因と想定されます。
このセクションの結果
このセクションでは、[Navigation Data Chunk Grid Size] の変更方法、およびレベル内で作成される NavDataChunk アクタの数への変更の影響について学習しました。
次のセクションでは、プレイヤーがレベルを移動する際にレベルでナビゲーション メッシュのロードおよびアンロードがどのように行われるかを学習します。
7 - 結果を表示する
World Partition のセルを使用して、どのようにナビゲーション メッシュがロードおよびアンロードされるかを表示するには、以下の手順を実行します。
コマンド ラインに次の Navigation Mesh Gameplay Debugger コンソール コマンドを入力し、Enter を押します。
ai.debug.nav.RefreshInterval 0.3
ai.debug.nav.DisplaySize 100
これらのコマンドにより、ナビゲーション メッシュのビジュアライゼーションの表示サイズおよび更新頻度が調整されます。
ゲームを開始するには、 [Play (プレイ)] を押します。チルダ (~) を押してコマンド ラインを開き、次の World Partition デバッグ コマンドを入力します。
wp.Runtime.ToggleDrawRuntimeHash2D
wp.Runtime.ShowRuntimeSpatialHashGridLevel 2
これらのコマンドにより、プレイヤーに対してロードされる World Partition セルが表示されます。
単一引用符 (‘) を押して [Gameplay Debugger (ゲームプレイ デバッガー)] を有効にし、ゼロ (0) を押して ナビゲーション ビューに切り替えます。これで、プレイヤーに対してロードされるナビゲーション メッシュを表示できます。
レベルを動き回り、各 World Partition セルがプレイヤーに対してロードされる際にナビゲーション メッシュがどのようにロードされるかを表示します。
このセクションの結果
このセクションでは、World Partition によってナビゲーション メッシュがロードおよびアンロードされる際にどのように視覚化されるかを学習しました。