レベルのインスタンス化

レベルのインスタンス化の概要と、プロジェクトで活用する方法について説明します

Windows
MacOS
Linux

レベルのインスタンス化はレベルベースのワークフローです。これを使用すると World Partition 以外のワールドを World Partition システムに簡単に移植できます。次の機能を使用して、複雑なストリーミング戦略を作成するために使用できます。

  • 個別にデザインしたアクタを使用して、トランスフォームとともにレベルをインスタンス化。

  • ランタイム時に同一レベルの複数インスタンスをストリーミング。Unreal Engine の以前のバージョンでは実行できなかった機能です。

  • サブレベル内で追加のサブレベルを階層的にネスト化。

たとえば、ワールド パーティションを使用して、大量のアクタをマップに配置できます。アクタを個別に準備して再利用する必要がある場合、レベル インスタンスでは、コンテキストに応じたワークフローにより、古いレベル ビューを置き換えることができます。

World Partition を使用しないで、レベル ストリーミングを使用できますが、レベル インスタンスは、World Partition のメイン ワールドの外部にストリーミング管理またはストリーミング戦略を自動的に設定しません。

レベル インスタンスを作成する

新規レベル インスタンスは、選択したアクタから生成され、[Viewport (ビューポート)] または [World Outliner (アウトライナ)] で作成できます。

image alt text

アクタを選択した後に、その 1 つで右クリックすると、コンテキストに応じたメニューが表示されるので、[Create from selection (選択項目からの作成)] を選択します。

次の設定があるダイアログ ボックスが表示されます。

image alt text

設定

説明

Type

レベル インスタンスのタイプ:

  • Level Instance

  • Packed Level Instance

  • Packed Level Instance Blueprint

External Actors

One File Per Actor システムを使用するように外部アクタを有効にします。詳細は「One File Per Actor」を参照してください。

Pivot Type

レベル インスタンスのピボットには次のタイプがあります。

  • Center Min Z:Z の最小値で、レベル インスタンスの中心にピボットを配置します。

  • Center:Pivot:レベル インスタンスの中心にピボットを配置します。

  • Actor:指定アクタの中心にピボットを配置します。

Pivot Actor

アクタをピボットとして選択した場合、このドロップダウンで、レベル インスタンスに対するピボット ポイントになるアクタを選択します。

設定を選択した後に、新規レベル インスタンスを保存するかどうかを確認する画面が表示されます。

この手順により、レベルに新しい ALevelInstance アクタが作成され、前に選択したアクタと置き換わります。このアクタはちょうど作成したレベルを表し、このアクタに対するすべてのトランスフォームは、レベル インスタンスに適用されます。

image alt text

[World Outliner] で、レベル アクタはグレーアウトされます。この時点で選択や編集できないからです。

image alt text

ALevelInstance アクタをレベルにドラッグして、それに .umap ファイルを [Details (詳細)] パネルで割り当てることができます。

通常のレベル作成テンプレートと同様のエントリを使用して、Unreal Engine の .ini ファイルを通じて、レベル インスタンス テンプレートを用意することもできます。これを実行するには、次の内容をプロジェクトの「DefaultEditor.ini」ファイルに追加します。

[/Script/LevelInstanceEditor.LevelInstanceEditorSettings]
+TemplateMapInfos=(ThumbnailTexture=Null,Map="/Game/Maps/Tools/TM-Template")

パックされたレベル インスタンス

パックされたレベル インスタンスはレベル インスタンスの 1 タイプで、レベルのスタティック メッシュの数ができるだけ少なくなるようにスタティック メッシュ インスタンスにグループ化します。

パックされたレベル インスタンスには 2 つのタイプがあります。

  • Packed Level Instances:パッキング プロセスでは、ALevelInstance アクタの位置を中心とする、パックされたレベル インスタンスを作成します。

  • Packed Level Instance Blueprint:パッキング プロセスでは、ブループリントから参照できるレベル インスタンスを作成します。

スタティック メッシュではないアクタとコンポーネントは、パッキング プロセスに含まれず、ソースのレベルにまとめられずに残ります。

レベル インスタンスをパッキングしても、レベルを作業するとき、編集ワークフローが変わりません。

パックされたレベル インスタンスは、実験段階機能で、Unreal Engine の今後のバージョンで変更または削除されることがあります。

レベル インスタンスを編集する

レベル インスタンスはビューポートのコンテキスト メニューまたは [Details (詳細)] パネルで編集できます。

image alt text

前に示した、編集モードを開くには、次の手順を実行します。

  1. レベル インスタンスをビューポートで選択します。

  2. 右クリックしてコンテキスト メニューを開きます。

  3. メニューの [Level Instance] セクションで、[Edit (編集)] にカーソルを合わせて、編集対象のレベルを選択します。

編集モードは [Detail (詳細)] パネルからも開くことができます。

image alt text

編集対象のレベル インスタンスを選択してから、[Details (詳細)] パネルの [Edit (編集)] ボタンをクリックします。

ランタイム時のレベル ストリーミング

埋め込みモード

埋め込みモードを使用すると、One File Per Actor (OFPA) システム を使用するレベル インスタンスは、破棄され、そこにある各アクタは、ワールド パーティション グリッドにランタイム時に追加されます。これはデフォルトのランタイム モードであり、レベル コンテンツのストリーミングに推奨される方式です。また、これによりレベル インスタンスはエディタ内にのみ存在するようになります。

OFPA を使用しない一部のアクタは、埋め込みモードを使用するとき、ランタイム時にも失われます。たとえば、埋め込みレベル インスタンスの AWorldSettings オブジェクトはランタイム時に存在しません。これは非 OFPA アクタだからです。

このような状況を回避すること、必要なときにレベル ストリーミング モードを使用することは、開発者の責任です。

レベル ストリーミング モード

OFPA を使用しないレベル インスタンスは、World Partition グリッドに埋め込むことはできません。ランタイム時に標準のレベル ストリーミングが代わりに使用されます。つまり、ALevelInstance アクタが、所有するワールド パーティション ランタイム セルを通じてロードされるとき、関連レベルをロードします。

レベル ストリーミングのこの方式では、ストリーミングするレベルが増えるので、ランタイム コストが高くなります。パフォーマンスへのインパクトがあるため、このストリーミング モードを、高密度のレベルで使用することは推奨しません。

埋め込みモードと World Partition:データ レイヤー をともに使用するのは、動的にロードされるレベルで、以前に実行できたような内容を再現するのに優れた方法です。

データ レイヤー

レベル インスタンスは World Partition:データ レイヤー を埋め込みモードまたはレベル ストリーミング モードを使用するときにサポートします。レベル インスタンスに含まれる各アクタは、ALevelInstance アクタからデータ レイヤーを継承します。