これは現在、実験的機能です。従って、それらを試したり、フィードバックを提供したり、計画を確認したりできます。現時点で、シーン グラフを使用するプロジェクトを公開することはできません。実験段階でアセットを作成した場合、下位互換性は保証されません。これらの機能の API は変更される場合があります。実験的機能のすべて、または特定の機能を独自の裁量で削除する場合があります。この機能を使い始める前に、既知の問題のリスト を確認してください。
シーン グラフは、ワールド内のすべてのオブジェクトを接続する統一された構造で、メタバースの体験を構築するためにセット ドレッシング、ゲームプレイ システム、音声、VFX などで必要なすべてのツールを含むツールボックスと考えることができます。
シーン グラフでは、ワールド構築とグレーボックスの実行から完全にプレイ可能なレベルへ、ほんの数ステップで素早く移行できます。
シーン グラフを使用してビルドを行うことで、プロジェクトの関連オブジェクトで各種処理を実行することができます。さらにシーン グラフを使用して、構造体を作成するときに複製やイテレートを行うこともできます。作成したオブジェクトを再利用可能な プレハブ にも転換し、複数のプロジェクトで使用できます。
シーン グラフは、Verse の各種特性を活用する Verse ネイティブ システムです。インタラクティブにカスタムビルドしたオブジェクトを備え、ゲームプレイ体験を実現するプロジェクトをさらにカスタマイズする方法が用意されています。
シーン グラフにより、プロジェクトの安定性が向上します。Verse によりバックグラウンドで負荷の高いすべての処理が実行され、各エンティティが必ず想定どおりに動作するためです。さらに、Verse ではシーン エンティティやコンポーネントのあらゆる部分を詳細に設定できるため、シーンに多様な変化を加えることができます。
メタバースのオブジェクト
メタバースとはリアルタイムのオンライン ソーシャル エンターテインメント体験であり、人々が交流し、ゲームをプレイする 3D ワールドです。Epic Games は UEFN 向けのシーン グラフ システムを、ユーザーがメタバース体験を構築できるように設計しています。
シーン グラフ システムでは、Unreal Engine の アクタ クラスを使用することなく、オブジェクトのインスタンスを作成し、再利用できます。シーン グラフのコアには構成要素セットがあり、それらの要素でゲームを構築するためのデータとロジックを使用し、同時にどのゲーミング環境でもオブジェクトをレンダリングおよびシミュレートします。
アクタとエンティティは交換可能ではありません。両者はシーンで連動する異なるシステムです。
シーン グラフでは、ビューポート に、デザイン決定と結果すべてが即座に表示される、3D リアルタイム シミュレーション フレームワークを作成できます。詳細パネル または プレハブ エディタ で編集できます。
Fab など、ベンダーから購入したアセットまたは独自に作成したアセットを インポート し、オブジェクトとプレハブをカスタム ビルドするためにシーン グラフで使用できます。
シーン グラフでビルドしたオブジェクトは、すべて何度も再利用可能であり、メモリを大量に消費することはありません。シーン グラフ ビルド システムは、コンテンツ間の境界を厳格に維持する一方、複雑なコンテンツ共有と共有シミュレーションを実現するように設計されています。
エンティティとコンポーネント
エンティティとコンポーネント はシーン グラフのバックボーンです。これらはオブジェクトの定義と動作を制御することで機能します。
エンティティは、それ自体がコンテナであり、表示される定義や関数がありません。コンポーネントはエンティティに対するデータと動作を提供するものです。コンポーネントは、シーンでエンティティが実行すると想定される内容を定義します。
コンポーネントには編集可能なプロパティがあります。これらは、スタティックメッシュやパーティクル システムなどの物理オブジェクトであることも、プラットフォームの動きを定義するカスタム Verse コードやゲームプレイ タグなどの論理オブジェクトであることもあります。デフォルトでは、すべてのエンティティに、ワールド内のどこにエンティティが存在するかを指定するためのトランスフォーム コンポーネントがあります。
Verse でエンティティを作成することは、自動的に トランスフォーム コンポーネントを作成 することではありません。
シーン グラフでは、メッシュ、サウンドキューなどからの物理データを活用することで、大道具とゲーム メカニクスを素早くまとめることができます。
メッシュ コンポーネント をエンティティに追加し、メッシュがコンポーネントのメッシュ スロットで選択されたときに、エンティティはスタティックメッシュの実体になります。つまり、建築物や個別の大道具を素早くモックアップし、シーンですぐに使用することができます。
たとえば、以下の動画では、エンティティは竹林に変換され、サウンド コンポーネントはサウンドキューをサウンド コンポーネント スロットにドラッグすることにより追加されます。
この竹のクラスタは、そのままプレハブに変換できます。また、追加のエンティティと結合して林のプレハブを作成することもできます。
1 つのエンティティ (シミュレーション エンティティ) は、シミュレーションを表すためにプロジェクトのルートにあります。このシーンは、各エンティティがシミュレーション エンティティでネストされるときに作成されます。各エンティティをマップに追加することにより、シミュレーション エンティティの子エンティティが自動的に作成されます。
プレハブのトップ エンティティは、他のプレハブと下にネストされているエンティティを含む、プレハブのルート エンティティです。親プレハブは、子の外観と動作で構成され、シーンの他のオブジェクトとやり取りします。
-
プレハブ ルート エンティティ → WoodenHouse_Tiny_Prefab
-
子プレハブ → WoodenHouse_RoofSmall_Prefab_C_1
-
子エンティティ → Building_WIndowCircle_Bright2
-
子エンティティ → Building_WIndowCircle_Bright4
-
子エンティティ → Building_WIndowCircle_Dark2
-
子エンティティ → Building_WIndowCircle_Dark4
-
子エンティティ → WoodenHouse_Floor
-
子エンティティ → WoodenHouse_RoofCap2
-
子エンティティ → WoodenHouse_RoofCap3
-
子エンティティ → WoodenHouse_RoofWindow2
-
-
子プレハブ → WoodenHouse_SmallFloor_Prefab_C_1
-
子エンティティ → WoodenHouse_Floor
-
子エンティティ → WoodenHouse_Wall10
-
子エンティティ → WoodenHouse_WallDoor_C4
-
-
子プレハブ → WoodenHouse_Windows_Prefab_C_3
-
子エンティティ → Building_WindowPlane_Bright3
-
子エンティティ → Building_WindowPlane_Bright4
-
子エンティティ → Building_WindowPlane_Dark3
-
子エンティティ → Building_WindowPlane_Dark4
-
子エンティティ → WoodenHouse_Windoows_10
-
-
子プレハブそれぞれには特徴として、シーンでプレハブがどのような外観であり、他のプレハブとどのように連携するのかを決定するコンポーネントがあります。Verse を使用して、別のプレハブと子プレハブを交換したり、さらに特定のプレハブとエンティティをターゲットにしたりすることができます。また、Building_WindowPlane_Bright および Building_WindowPlane_Dark エンティティに使用する色を変更することもできます。
コンポーネントには、エンティティの一部または全体が動作する方法を決定できるように数多くのタイプがあります。シーン グラフで利用できる多様なコンポーネント タイプの詳細については、「コンポーネント」を参照してください。
エンティティとコンポーネントの詳細については、「エンティティとコンポーネントを操作する」を参照してください。
プレハブ
シーン グラフでは、1 つの親エンティティの下に各エンティティをまとめてパッケージ化することで、プレハブを作成します。すべての選択エンティティ、エンティティ階層、それらのコンポーネントは即座にプレハブのエンティティ ツリーに追加されます。プレハブがあると、プレハブ エディタ でそのプレハブの全インスタンスをカスタマイズできます。
プレハブのインスタンスを作成するには、コンテンツブラウザからビューポートにプレハブをドラッグします。プレハブ階層の中にプレハブをネストすることもできます。この階層を使用して、階層のすべてのインスタンスとプレハブに変更を加えることができます。
これは、プレハブを更新し、改良するときに時間の節約になります。対象オブジェクトの全インスタンスを見つけて個別に更新する必要がないためです。
さらに、階層でサブピースを選択し、異なるコンポーネント値でオーバーライドすることにより、外観が似たオブジェクトを多数作成できます。プレハブ エディタで編集するときに、オブジェクトを回転し、新しいコンポーネント値を異なるプレハブ インスタンスに追加することもできます。
このエディタによりすべての変更にマークが付き、[Details (詳細)] パネルで個別のコンポーネント属性にオーバーライド トグル アイコンが表示されます。また、コンポーネント カードのドロップダウン メニュー ボタンに異なるコンポーネント アイコンも付きます。
元のプレハブ デザインに戻すには、個別のコンポーネント オーバーライド トグルをクリックします。オブジェクトは自動的に親プレハブの状態に戻ります。さらにコンポーネント カードのドロップダウン メニュー ボタンをクリックして、[Clear Override (オーバーライドをクリア)] を選択します。
プレハブの変更の詳細については、「プレハブとプレハブ インスタンス」を参照してください。
以下の動画では、シーン グラフが 2 つの小さな家のプレハブを作成するために使用されます。
この家は複製されています。この家のさまざまな要素は、元のパートを置き換える異なるメッシュを選択することにより変更されており、新しいプレハブを作成します。パーツをコピーして、置き換えを続けることで、小さい村を素早くモックアップできます。これはコンポーネントでも機能するため、村のそれぞれの家に異なる挙動を追加できます。
プレハブを編集しても、元のオブジェクトやそのコピーの安定性やメモリ使用量に影響はありません。つまり、レベル レイアウト、抽象デザイン、アートを仕上げて、自身の島のカスタム オブジェクトを作成できます。シーン グラフ ビルディング システムでは、作成したプレハブを再利用し、フォートナイトに独自のゲーム ユニバースを構築できます。
シーン グラフでの Verse
Verse はプログラミング言語で、シーン グラフで、ワールドからエンティティをスポーンおよび削除する場合や、カスタム コンポーネントと動作を作成する場合に使用します。
Verse を利用して、前のサンプルの家に揺れる屋外のランタンを作成できます。Verse には、ランタンがどのように動くのかを決定する、揺れ、回転、持続時間の各プロパティを定義する方法が用意されています。
プロジェクトで作成したプレハブは、プロジェクトの「Assets.digest.verse」ファイルの Verse クラスとして公開されます。プレハブで定義されたエンティティとコンポーネントには、Verse からプレハブの GetEntities()
と GetComponents()
の呼び出しを通じてアクセスできます。
シーン グラフで Verse の使用を開始するには、「Verse で独自のコンポーネントを作成する」を参照してください。
プロジェクトでシーン グラフを有効にする
シーン グラフをプロジェクトで使用するには、以下のとおり実行します。
-
ツールバーの [Project (プロジェクト)] > [Project Settings (プロジェクト設定)] を選択して [Project Settings] ウィンドウを開きます。
-
[Project Settings] ウィンドウの [Experimental Access (実験的機能アクセス)] で、[Scene Graph System (シーン グラフ システム)] を有効にします。
- ツールバーでシーン グラフの各機能を表示できることを確認するには、[Place Actors (アクタを配置)] を選択し、[Entities (エンティティ)] を [Place Actors] ドロップダウンで選択します。
使用を開始する
シーン グラフの詳細については、プレハブ テンプレート を開きます。このテンプレートにより、シーン グラフの各機能で作業するときの基本コンセプトを把握でき、プレハブと Verse を使用してプロジェクトを作成するときの利点を説明する基盤ワークフローを開始できます。
既知の問題
以下は、プロジェクトでシーン グラフを使って作業する際の既知の問題です。下のリストにない フィードバックまたは問題の報告を行う 際は、フォーラムから行ってください。
-
実験的機能であるため、予期しないクラッシュが発生することや不安定になることがあります。
-
プレハブ エディタでは、グリッド、回転、スケールの各スナップ機能を使用できません。
-
プレハブ エディタでは、複数項目の選択はできません。
-
プレハブ エディタでは、コピー/ペーストまたは Alt キーを押したままドラッグすることによる複製ができません。
-
コンポーネントをコピーしてペーストできません。
-
プレハブ インスタンスから一度にすべてのオーバーライドをクリアできません。オーバーライドごとに実行する必要があります。
-
エンティティでは、アクタあたり 1 ファイルというシステムを使用していません。代わりに、エンティティは UMAP アセット に保存されます。プロジェクトで URC を使用する場合、整合性のためにメイン レベルをロックして、プロジェクトでコラボレーションする機能を無効にします。
-
オーバーライドされたプレハブ インスタンスをプレハブ アセットに保存する方法はありません。
-
複製されたエンティティはプレハブ エディタで正しく名前が表示されません。
-
[Expand All (すべて展開)] および [Collapse All (すべて折りたたむ)] はコンポーネントで動作しません。
-
現時点で、プレハブからオーバーライドを削除する方法はありません。
-
オーバーライドで右クリックしても、左クリックと同じ動作になります。
-
子エンティティをその親にドラッグすることによって、子エンティティをデタッチできません。
-
スタティックメッシュ コンポーネント回転 を Y 軸 に対してスクラブ再生すると、予期しない動きが発生します。
-
シーン グラフ オブジェクトとのコリジョンが発生したとき、プレイヤーが予期しない挙動をすることがあります。
-
エンティティの名前を手動で変更すると、そのエンティティ名は変更できなくなります。
-
スケーリングで縮小すると、回転したときに、子エンティティで異常なインタラクションが発生することがあります。
-
プレハブ エディタで トランスフォームの各値 をドラッグすると、ウィジェットでそれらの値を変更したときよりも遅くなり、パフォーマンスが低下します。
-
[Create Verse Component (Verse コンポーネントを作成)] ウィンドウでは、テンプレートが [Editor Options (エディタ オプション)] に表示されません。
-
プレハブ エディタでエンティティが常に選択可能とは限りません。
-
プレハブを削除すると、ライブ編集セッションで「ゴースト」プレハブが生まれます。
-
プレハブ アセットにはサムネイルがありません。
-
コンポーネント ロジックは編集およびプレイの両モードで動作します。
-
コンポーネントはクリエイティブの仕掛けよりもはるかに前に初期化されます。つまり、
component.OnBeginSimulation
またはcomponent.OnSimulate
からクリエイティブの仕掛けをフェッチしようとしても動作しません。この状況に対処するには、そのコンポーネントが見つかるまでループと sleep を使用するか、クリエイティブの仕掛けの OnBegin 呼び出しからプレハブをスポーンします。 -
レベルに配置されているエンティティに対して
Dispose()
を直接呼び出すと、見えているメッシュ エフェクトなどがクライアント ビューから取り除かれます。Verse コードを使用してスポーンされるエンティティに対してDispose()
を呼び出すと、正しく機能します。 -
選択されているエンティティを非表示にする機能は、レベル エディタ (ホットキー H) およびプレハブ エディタでは動作しません。
-
プレハブ エディタで行われた変更は、その変更が保存されていない場合、そのプレハブの配置済みインスタンスには反映されません。
-
Verse コードがコンパイルされていない状態でプロジェクトを保存すると、プレハブ データが破損する可能性があります。