Choose your operating system:
Windows
macOS
Linux
レベル ストリーミング機能は、マップファイルをメモリへロードまたはアンロードすることに加え、その可視性をプレイ中にトグルします。この機能により、ワールドの関連性のある部分のみがリソースを利用したり、 どの時点でもレンダリング出来るように、ワールドを小さく分割することができます。適切な処理がされると、とても大きくシームレスなレベルが作成されて、 ワールド内でプレイするプレイヤーのサイズがとても小さく感じてしまうほどです。
パーシスタント レベル
レベルをシームレスにブレンドするために、まず パーシスタント レベルを作成します。主にストリームが出入りするレベルの管理のために 使用するマスター レベルとみなされます。
ストリーミング レベル
ストリーミング レベルは Levels ウィンドウ で管理します。パーシスタント レベルをオーバーラップまたはオフセットすることで、さらに大きいワールドを作成することができます。各ストリーミング レベルは
[Always Loaded (常にロード)] または [Blueprint (ブループリント)] に設定することができます。この設定は、サブレベルを右クリックして表示される [Levels (レベル)] ウィンドウで切り替えることができます。
ストリーミング レベルを [Always Loaded (常にロード)] に設定した場合、パーシスタント レベルも一緒にロードされます。同時にパーシスタント レベルとして表示もされます。 ブループリントまたは C++ から送られたロード / アンロード要求、および割り当てられたストリーミング ボリュームを無視します。このタイプのサブレベルは、アーティスト同士が邪魔することなく同時に共同作業ができるように、 通常はパーシスタント レベルで複数の「レイヤー」にするためにコンテンツの分割に使われることが多いです。このワークフローの詳細は、 「サブレベルで連携して作業する」を参照してください。ゲームでは、ゲームがパーシスタント レベルを変更しない限り、Always Loaded サブレベルは決してストリーミングされません。
ダイナミック ストリーミング メソッド
Blueprint ストリーミング タイプのあるストリーミング レベルは実際、レベル ストリーミング ボリューム、ブループリント、C++ コードで制御することができます。これらのレベルは、 動的にロード / アンロードすることができます。
レベル ストリーミング ボリューム
レベル ストリーミング ボリューム を使うとレベル ストリーミングがとても簡単になります。発想はシンプルです。視点がレベルと関連づいているレベル ストリーミング ボリューム内にあるかどうかによって、 ストリーミング レベルに対するロード / アンロードのリクエストが発行されます。
具体的には、レベル ストリーミング ボリュームは 2 通りの使い方があります。
ゲーム でレベル ストリーミング ボリュームを使う場合、プレイヤーの視点がボリューム内にあればレベルがロードし、プレイヤーの視点がボリューム外にあればアンロードします。
エディタ でレベル ストリーミング ボリュームを使う場合、パースペクティブ ビューポート カメラの位置に合わせてレベルを自動的に表示 / 非表示にしてレベル ストリーミングをプレビューすることができます。
ボリューム ベースのレベル ストリーミングは使い方が簡単な上にスクリプト処理が必要ないので、レベル ストリーミングの制御には理想的です。さらに、ボリューム ベースはスクリプト処理に比べてはるかに管理が容易です。 システムのロード要求が変化しても、ストリーミング ボリュームの大きさを変更すればレベルのロード / アンロードの挙動を修正できます。
スクリプト レベル ストリーミング
レベルのロード / アンロードをより複雑な設定にしたい場合は、ドアを解除する上記の例と同様に、 レベルのロード / アンロードに対してブループリントあるいは C++ ロジックを設定することができます。主要な機能は Load Stream Level と Unload Stream Level です。ロードするレベルを名前で指定します。
Load Stream Level と Unload Stream Level の他に、Get Streaming Level 関数を使うと、ストリーミングの挙動をさらに動的にすることができます。実際のレベル ストリーミング オブジェクトへのアクセスが可能になるので、 そのステートの修正とクエリが可能になります。Create Instance と一緒に使えば、特定のサブレベルの作成とストリーミングが可能になります。 これらのコピーにトランスフォームを適用し、パラメータを送れば、プロシージャルなワールドを作成することができます。