World Partition - データ レイヤー

データ レイヤーの概要と、データ レイヤーをプロジェクトで使用する方法について説明します。

このページでは、Unreal Engine と Unreal Editor for Fortnite (UEFN) の両方に登場する機能について説明しています。

このページは元々 Unreal Engine 用に作成されたものなので、一部の説明やスクリーンショットは UEFN で表示されるものとは異なっている場合があります。

UEFN のメインドキュメントに戻るには、こちら をクリックしてください。

データ レイヤーWorld Partition 内のシステムで、一連のアクタをエディタ内とランタイム時の両方で整理する際に使用できます。

データ レイヤーを使って仕上げたサンプル レベル。

データ レイヤー アセットとデータ レイヤー インスタンスを使用すると、エディタ内でレイヤーを動的にロードおよびアンロードでき、複雑なワールドを管理しやすくなります。このシステムは、旧版の Unreal Engine で使用されていた以前のレイヤー システムの代わりとして機能します。

データ レイヤーを使って、エディタ内でゲームプレイ要素と環境アセットを分離することが可能です。アーティストの場合、ゲームプレイのトリガーやオブジェクトを操作しなくても特定の要素に対して作業できるようになります。デザイナーの場合、動的にロードされたレイヤーを使用して、魅力的なゲームプレイや手の込んだレベル トランジションをデザインできるようになります。

ランタイム時にはブループリントまたは C++ コードを使ってデータ レイヤーを切り替えて、クエストや進捗、インゲーム イベントといったゲームプレイを駆動できます。これらは、World Partition のワークフローでアセット ストリーミングを管理するための重要なツールです。

データ レイヤーを作成する

データ レイヤーは、データ レイヤー アセットとデータ レイヤー インスタンスの 2 つのアセット タイプに分けられます。データ レイヤー アセットにはワールド間で使用されるデータが含まれます。データ レイヤーは、データ レイヤー アウトライナー (Data Layers Outliner) または コンテンツ ブラウザ で作成できます。データ レイヤー インスタンスにはワールド固有のデータが含まれます。データ レイヤー インスタンスは データ レイヤー アウトライナー (Data Layers Outliner) で作成できます。

データ レイヤー システムを使用するには、マップ内で World Partition を有効にする必要があります。マップを World Partition に変換するには、[Tools (ツール)] > [Convert Level (レベルを変換)] を使用するか、コマンドレットを使用します。既存のレベルを World Partition に変換する方法の詳細については、「World Partition」を参照してください。

データ レイヤー アセット

データ レイヤー アセットは、コンテンツ ブラウザ内で作成して表示することのできる Unreal Engine アセットです。これらのアセットはプロジェクト レベルで存在し、ワールド固有ではありません。これらには次のデータが含まれます。

  • データ レイヤー名

  • データ レイヤー タイプ

  • デバッグ カラー

データ レイヤー タイプ

データ レイヤー アセットは、エディタ または ランタイム のいずれかのタイプに設定されます。エディタ (Editor) データ レイヤー を使用すると、一連のアセットをプロジェクト内で整理された状態にしておくことができます。エディタ データ レイヤーはメモリからロード/アンロードすることができ、ユーザーはデータ レイヤー アウトライナーを使ってその可視性を切り替えることができます。

データ レイヤー アセットのオプションを設定する。

エディタ データ レイヤーとランタイム データ レイヤーをコンテンツ ブラウザで開くと、それぞれのプロパティが似ていることがわかります。

ランタイム (Runtime) データ レイヤー はエディタ データ レイヤーに似ていますが、ブループリントまたは C++ を使ってランタイム時に操作できます。インゲーム イベントを使って、それらに割り当てられているアセットをロード/アンロードし、複雑なゲームプレイやレベル トランジションのためのさまざまなオプションを表示できます。たとえば 古代の谷 (Valley of the Ancient) サンプル プロジェクトでは、ランタイム データ レイヤーを使って光のワールド (Light World) と闇のワールド (Dark World) 間のトランジションを作成しています。

光のワールド

闇のワールド

データ レイヤー インスタンス

データ レイヤー インスタンス は、データ レイヤー アセットのワールド固有のインスタンスです。インスタンスを使用することで、データ レイヤー アセットは複数のワールド内に存在することが可能になり、同じアセットを参照しながらも異なるインスタンス プロパティを指定できます。

たとえば、ワールド内に近隣の注視点 (POI) を作成し、それらのアセットをエディタ データ レイヤーに割り当てて整理することができます。次にホリデー用のアセットを使ってこの POI を装飾し、それらをランタイム データ レイヤーに割り当てて、ランタイム時にロード/アンロードできるようにします。通常版のワールドで、ランタイム データ レイヤーのデータ レイヤー インスタンスをデフォルトでロードするのではなく、ゲーム内でホリデーを祝うために特定の日付に切り替わるように設定します。次に、同じプロジェクト内でランタイム データ レイヤーの異なるインスタンス (常に有効になっているもの) を使って、通常のワールドとは異なるホリデー版の POI を作成できます。

データ レイヤー アウトライナー

データ レイヤー アウトライナー (Data Layers Outliner) では、すべての既存のデータ レイヤー インスタンスを表示したり、新規のデータ レイヤー アセットおよびデータ レイヤー インスタンスを作成したりできます。データ レイヤー アウトライナーを開くには、[Window (ウィンドウ)] > [World Partition] > [Data Layer Outliner] を選択します。

データ レイヤー アウトライナー。

番号

説明

1

可視性

2

エディタにロードされているデータ レイヤー

3

データ レイヤー タイプ

4

データ レイヤー名

5

データ レイヤーの検証

6

データ レイヤー アウトライナーのオプション

7

Data Layer Asset (データ レイヤー アセット)

8

Is Initially Visible (デフォルトで可視)

9

Is Initially Loaded (デフォルトでロード)

10

Initial Runtime State (初期ランタイム ステート)

データ レイヤー アウトライナー内を右クリックすると、次のコンテキスト メニューが開きます。

データ レイヤー アウトライナーのコンテキスト メニュー。

オプション

説明

Create New Data Layer (データ レイヤーを新規作成)

新しい空白のデータ レイヤー インスタンスを作成します。

Create New Data Layer under "DL_Sample" (データ レイヤーを「DL_Sample」に新規作成)

新しい空白のデータ レイヤー インスタンスを、選択したデータ レイヤーの子として作成します。

Add Selected Actors to Selected Data Layer (選択したデータ レイヤーに選択したアクタを追加)

選択したアクタを選択したデータ レイヤー インスタンスに追加します。

Move Data Layers To (データ レイヤーを移動)

既存のデータ レイヤー インスタンスを別のデータ レイヤーの子にします。

Remove Selected Actors from Selected Data Layers (選択したデータレイヤーから選択したアクタを削除)

選択したアクタを、選択したデータ レイヤー インスタンスから除去します。

Delete Selected Data Layers (選択したデータ レイヤーを削除)

選択したデータ レイヤーを削除します。

Rename Selected Data Layers (選択したデータ レイヤーの名前を変更)

選択したデータ レイヤーの名前を変更します。従来のデータ レイヤーでのみ機能します。

Select Actors in Data Layer (データ レイヤー内の全アクタを選択)

選択したデータ レイヤー インスタンスに割り当てられているすべてのアクタを選択します。

Append Actors in Data Layer to Selection (データ レイヤー内のアクタを選択項目に追加)

選択したデータ レイヤー インスタンスのコンテンツを選択項目に追加します。

Deselect Actors in Data Layer (データ レイヤー内のアクタを選択解除)

選択したデータ レイヤーのコンテンツを選択項目から除去します。

Collapse All Data Layers (すべてのデータ レイヤーを折りたたむ)

データ レイヤー階層を折りたたみます。

Expand All Data Layers (すべてのデータ レイヤーを展開)

データ レイヤー階層を展開します。

Make Current Data Layer (現在のデータ レイヤーを設定)

選択したデータ レイヤーを現在のアクタ エディタ コンテキストとして設定します。アクタ エディタ コンテキストの詳細については、「アクタ エディタ コンテキスト」ドキュメントを参照してください。

Remove Current Data Layer(s) (現在のデータ レイヤーを除去)

選択したデータ レイヤーを現在のアクタ エディタ コンテキストから除去します。

Clear Current Data Layers (現在のデータ レイヤーをクリア)

すべてのデータ レイヤーを現在のアクタ エディタ コンテキストからクリアします。

Make All Data Layers Visible (すべてのデータ レイヤーを表示)

すべてのデータ レイヤー インスタンスの可視性を可視 (表示) に設定します。

歯車のアイコンをクリックすると、次のデータ レイヤー アウトライナーのオプションが表示されます。

データ レイヤー アウトライナーのオプション

オプション

説明

Expand All (すべて展開)

データ レイヤー階層を展開します。

Collapse All (すべて折りたたむ)

データ レイヤー階層を折りたたみます。

Stack Hierarchy Headers (スタック階層ヘッダ)

階層の項目 (複数可) をアウトライナーの上部にピン止めします。

Only Selection (選択項目のみ)

選択したアクタのみをアウトライナー内に表示します。

Hide Editor Data Layers (エディタ データ レイヤーを非表示)

アウトライナー内でエディタ データ レイヤーを非表示にします。

Hide Runtime Data Layers (ランタイム データ レイヤーを非表示)

アウトライナー内でランタイム データ レイヤーを非表示にします。

Hide Actors (アクタを非表示)

データ レイヤーに割り当てられている一連のアクタをアウトライナー内で非表示にします。

Hide Unloaded Actors (アンロードしたアクタを非表示)

アンロードした World Partition セルからのすべてのアクタをアウトライナー内で非表示にします。

Hide Level Instance Content (レベル インスタンス コンテンツを非表示)

レベル インスタンスに含まれるすべてのアセットを非表示にします。

Highlight Selected (選択項目を強調表示)

選択したアクタを含むデータ レイヤー インスタンスを強調表示します。

Allow Runtime Data Layer Editing (ランタイム データ レイヤーの編集を許可)

ランタイム データ レイヤー インスタンスの編集を許可します。

Reset User Settings (ユーザー設定のリセット)

データ レイヤー アウトライナーの設定をデフォルト値にリセットします。

Choose World (ワールドを選択)

表示するデータ レイヤー インスタンスのワールドを定義します。

データ レイヤー コマンドレットを使って従来のプロジェクトを更新する

データ レイヤー アセットとデータ レイヤー インスタンスを使用できるように既存のプロジェクトを更新するには、Data Layer To Asset コマンドレットを使用します。

Data Layer to Asset コマンドレットの形式。

以下のステップでコマンドレットを使用します。

  1. コマンド プロンプト ウィンドウを開きます。

    コマンド プロンプトを開く。

  2. プロンプトで「UnrealEditor.exe」ファイルのある場所に移動します。たとえば、「C:\Program Files\UE_5.1\Engine\Binaries\Win64」です。

    エンジン実行可能ファイルの場所に移動する。

  3. コマンドの入力を開始します。コマンドレットを実行する .exe ファイルの名前である「UnrealEditor.exe」から始めます。

    UnrealEditor.exe」を入力してコマンドレットを開始する。

  4. プロジェクト名を追加します。

    UnrealEditor.exe CitySample などのプロジェクト名を追加する。

  5. 続けて、実行するコマンドレット名を追加します。

    コマンドレット名を追加する。この例では、UnrealEditor.exe CitySample -run=DataLayerToAssetCommandlet となります。

  6. 最後に、変換するレベルの名前とその変換先のフォルダを追加します。

    レベル名と変換先のフォルダを追加して完了する。UnrealEditor.exe CitySample -run=DataLayerToAssetCommandlet Small_CITY_LVL -DestinationFolder=/Game/DataLayerConversion となります。

  7. Enter キーを押してコマンドレッドを実行します。

すべての以前のデータ レイヤーがデータ レイヤー インスタンスとデータ レイヤー アセットに変換されます。以前にデータ レイヤーを参照していたすべてのアクタはデータ レイヤー アセットを参照するようになります。

このコマンドレットには次の任意の引数が含まれています。

任意の引数

説明

-Verbose

変換時に追加のコンテキストを記録します。この引数では、データ レイヤーのすべてのアクタの変換情報が出力されます。

-NoSave

変更を保存せずにコマンドレットを実行します。

-IgnoreActorLoadingErrors

変換中にアクタのロードが失敗した場合のエラーを無視します。

データ レイヤーを使用する

データ レイヤーを新規作成する

プロジェクトでデータ レイヤー システムを使用するには、まずデータ レイヤー アセットを作成します。

データ レイヤー アセットを作成する。

  1. コンテンツ ブラウザ で、データ レイヤー アセットを格納するフォルダに移動して右クリックし、[Miscellaneous (その他)] > [Data Layer (データ レイヤー)] を選択してデータ レイヤー アセットを作成します。

  2. データ レイヤー アウトライナー 内を右クリックして [Create New Data Layer (データ レイヤーを新規作成)] を選択します。これにより、アウトライナーに「Unknown」という名前の空白のデータ レイヤー インスタンスが作成されます。

  3. [Data Layers Asset] の隣にあるドロップダウン メニューを開いて対象のデータ レイヤー アセットを選択し、これを新しいインスタンスに割り当てます。

もしくは、データ レイヤー アセットをデータ レイヤー アウトライナーにドラッグアンドドロップすることで、選択したデータ レイヤー アセットが割り当てられた状態のデータ レイヤー インスタンスを新しく作成することもできます。この操作を既存のデータ レイヤー インスタンスで行うと、選択したデータ レイヤー アセットが割り当てられた状態の新しい子データ レイヤー インスタンスが作成されます。

データ レイヤー アセットをデータ レイヤー インスタンスに割り当てる。

アクタをデータ レイヤーに割り当てる

次のいずれかの方法でアクタをデータ レイヤーに割り当てることができます。

  • データ レイヤー アウトライナーのコンテキスト メニューを使ってアセットを追加する。

  • [Details (詳細)] パネルの [Data Layers (データ レイヤー)] セクションを使ってアセットを追加する。

データ レイヤー アウトライナーを使用する

データ レイヤー アウトライナーを使ってアクタをデータ レイヤー インスタンスに割り当てる。

データ レイヤー アウトライナーを使ってアセットをデータ レイヤー インスタンスに追加するには、次のステップを実行します。

  1. データ レイヤー インスタンスに追加するアセットを ビューポート 内で選択します。

  2. 追加先のデータ レイヤー インスタンスを データ レイヤー アウトライナー 内で右クリックして、[Add Selected Actors to Selected Data Layers (選択したデータ レイヤーに選択したアクタを追加)] を選択します。

[Details] パネルを使用する

[Details] パネルを使ってアクタをデータ レイヤー インスタンスに割り当てる。

[Details] パネルを使ってアセットをデータ レイヤー インスタンスに追加するには、次のステップを実行します。

  1. データ レイヤー インスタンスに追加するアセットを ビューポート 内で選択します。

  2. [Details] パネルの [Data Layers] セクションに移動して、[Data Layers Assets] を開きます。

  3. 変更する [Index (インデックス)] のドロップダウン メニューをクリックして、割り当てるデータ レイヤー アセットを選択します。これにより、このアセットが当該のデータ レイヤー アセットのインスタンスに割り当てられます。

この方法は、選択したデータ レイヤー アセットがワールド内に存在する場合にのみ有効です。

レベル エディタでアクタ エディタ コンテキストを使用すると、任意の数のデータ レイヤー インスタンスを「Current」として設定できます。このコンテキストが有効な状態で追加されたすべてのアクタは、データ レイヤー インスタンスに「Current」として自動的に割り当てられます。アクタ エディタ コンテキストの詳細については、「アクタ エディタ コンテキスト」を参照してください。

パフォーマンスに関する懸念事項

データ レイヤーを使って同時に多数のアセットをロードしようとすると、パフォーマンスに問題が生じることがあります。

ラインタイム データ レイヤー インスタンスの使用量については注意深く監視してください。広く使用されるアセットを過度に多数のランタイム データ レイヤー インスタンスに割り当てると、World Partition のストリーミング パフォーマンスが低下することがあります。

ブループリントでデータ レイヤーを使用する

ブループリントを使って、データ レイヤー アセットとデータ レイヤー インスタンスのランタイム ステートを変更することができます。

次の例では、F キーを押してそのままにすると GreyBox データ レイヤーが無効になり、Ruins データ レイヤーが有効になります。

データ レイヤーを使用するブループリント。

上記のブループリントは次のように機能します。

  1. F キーを押したままにすることで データ レイヤー サブシステム にアクセスします。

  2. Set Data Layer Instance Runtime State ノードを使って、DL_GreyBox データ レイヤーのステートを Loaded に変更します。これによって「ロード済み」の状態になりますが、レベル内には表示されません。

  3. 2 番目の Set Data Layer Instance Runtime State ノードによって、DL_Ruins データ レイヤー インスタンスのステートが Activated に変更されます。これにより、ロード済みで表示される状態になります。

  4. F キーを解放すると逆のプロセスが実行されて、両方のデータ レイヤー インスタンスが元のステートに再び設定されます。

GreyBox を使ったサンプル レベル

コンテンツを使ったサンプル レベル

C++ でデータ レイヤーを使用する

先述のブループリントの例と同様に、C++ を使ってプロジェクトのデータ レイヤーにアクセスすることができます。以下のサンプル コードでは、ADataLayerActivator という名前のアクタが作成されます。

 UCLASS()
class ENGINE_API ADataLayerActivator : public AActor
{
    GENERATED_BODY()
public:
virtual void BeginPlay() override
{
    // In client/server only the server can activate a DataLayer
    if (HasAuthority())
    {
        if (UDataLayerSubsystem* DataLayerSubsystem = UWorld::GetSubsystem<UDataLayerSubsystem>(GetWorld()))
        {
            DataLayerSubsystem->SetDataLayerInstanceRuntimeState(DataLayerToActivate, EDataLayerRuntimeState::Activated);
        }
    }
}
private:
    UPROPERTY(EditAnywhere, Category = "DataLayer")
    TObjectPtr<const UDataLayerAsset> DataLayerToActivate;
};

ADataLayerActivator は、BeginPlay を呼び出す際に特定のデータ レイヤーを参照し、そのランタイム ステートを Active に設定します。

レベルのインスタンス化でデータ レイヤーを使用する

レベル インスタンスPacked Level ブループリント ではデータ レイヤーをサポートしています。

デフォルトで、レベル インスタンスに含まれるアクタは、Level Instance アクタに割り当てられているデータ レイヤーを継承します。レベル インスタンスに含まれているアクタは、その他のデータ レイヤーもサポートしています。

ワールド内に存在しないデータ レイヤー インスタンスへの参照を含むレベル インスタンスについては、そのデータ レイヤー参照は継承されません。

たとえば、家屋の注視点を作成するアセットを含むレベル インスタンスを Neighborhood データ レイヤーに割り当てることができます。また、レベル インスタンスに含まれる、ホリデーをテーマにしたアイテムをさまざまな Holiday データ レイヤーに割り当てて、それぞれの Holiday データ レイヤーが有効になった場合にのみそれらを表示することもできます。

ファイルを管理する

データ レイヤーでは、ユーザー間のファイルの重複を最小限に抑えるという World Partition システムの目的に沿って、変更が加えられた際に、ワールド マップ ファイルやアクタ ファイルといった重要なファイルの、ユーザーによるチェックアウトの必要性が削減されます。

各データ レイヤーには表示ラベルと内部の一意の識別子が含まれます。Unreal Engine では、この情報が「WorldDataLayer」ファイル内のデータ レイヤーのリストに格納されます。これにより、次のような利点があります。

  • データ レイヤーをアクタに割り当てた場合に、One File Per Actor (アクタあたり 1 つのファイル) システムを使用する World Partition ワールド内にある当該アクタのファイルのみが影響を受ける。

  • データ レイヤーの名前を変更した場合に、その関連ラベルのみが影響を受ける。レイヤーに関連付けられているアクタを更新する必要はありません。

  • データ レイヤーを削除した場合に、「WorldDataLayer」ファイルのみが影響を受ける。削除されたデータ レイヤーに以前関連付けられていたアクタは、アクタを変更または保存する必要なしに自動的にクリーンアップされます。

デバッグとランタイム オーバーライド

ランタイム時にデータ レイヤーをデバッグするための便利なコンソール コマンドがいくつかあります。

コンソール コマンド

説明

wp.DumpDatalayers

データ レイヤーとそれらのランタイム ステートのリストをログに出力します。

wp.Runtime.DebugFilerByDatalayer

ランタイム ハッシュ 2d デバッグ表示にどのデータ レイヤーが表示されるかをフィルタリングします。

wp.Runtime.SetDataLayerRuntimeState [state] [layer]

データ レイヤーを特定のランタイム ステートに強制的に移行します。

wp.Runtime.ToggleDataLayerActivation [layer]

特定のランタイム データ レイヤーを切り替えます。

wp.Runtime.ToggleDrawDataLayers

データ レイヤーとそれらのステートのリストをメイン ビューに表示します。

このページは Unreal Engine の前のバージョン用です。現在リリースされている Unreal Engine 5.1 に対して更新は行われていません。
Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル