基本概念
MassEntity は、Unreal Engine 5 で使用可能なデータ指向の計算のためのゲーム プレイに特化したフレームワークです。
MassEntity の主なデータ構造は、計算で使用するデータ のアトミック部分を表す フラグメント です。フラグメントの一般的な例には、トランスフォーム、速度、 LOD インデックスがあります。フラグメントはコレクションにグループ化でき、このようなコレクションのインスタンスは ID と関連付けることができます。このコレクション インスタンスは エンティティ と呼ばれます。
エンティティの作成は、オブジェクト指向プログラミングのクラスのインスタンス化に類似しています。しかし、クラスとその機能を厳密に示す代わりに、エンティティはフラグメント構成によって構築されます。これらの構成は実行時に変更することができます。たとえば、エンティティの構成にはトランスフォームと速度などの 2 つのフラグメントを含めることができます。
フラグメントとエンティティはロジックを含まない、データのみの要素であるという点に注意してください。
アーキタイプ は同一の構成をもつエンティティのコレクションです。各アーキタイプはさまざまなタイプのフラグメントが特定の構成で構成されたものです。たとえば、アーキタイプは [トランスフォーム, 速度] のフラグメント構成をもつことができます。つまり、このアーキタイプと関連付けられたすべてのエンティティは、同じフラグメント構成をもつということです。
アーキタイプ内のエンティティはメモリ チャンク に編成されています。これによって、メモリから同じアーキタイプのエンティティに関連付けられたフラグメントを取り出す時、最適なパフォーマンスを確保します。
プロセッサー は、フラグメントの処理ロジックを提供するステートレス クラスです。プロセッサーは、操作に必要なフラグメントのタイプを特定するために EntityQuery を使用します。EntityQueries は個々のエンティティの識別子に関係なく、フラグメントのバッチを提供します。
タグ は、データを含まない簡単がフラグメントです。タグの有無はデータそのものとして使用されます。タグはエンティティの構成の一部です。
ChunkFragment はエンティティではなくチャンクに関連付けられたフラグメントです。ChunkFragment は、詳細度 (LOD) の計算などの管理的プロセスに使用するチャンク単位のデータを格納するために使用します。ChunkFragments はエンティティの構成の一部です。
エンティティを処理する
MassCommandBuffer
プロセッサーはフラグメントやタグを追加したり削除したりすることで、エンティティの構成を変更することができます。しかし、処理中にエンティティの構成を変更すると、そのエンティティはあるアーキタイプから別のアーキタイプに移動されます。
プロセッサーは [MassCommandBuffer] コマンドを使用して構成の変更を要求できます。このコマンドは、現在の処理バッチの終了時に一括死処理することで、上記の問題を回避します。
EntityView
フラグメントの連続処理は、エンティティに対する操作を最も効率的に実行できる方法です。ただし、現在処理中でない他のエンティティにアクセスする必要がある場合があります。プロセッサーは [EntityView] コマンドを使用してこれを行うことができます。
EntityView は、現在処理キューにない他のエンティティのデータにアクセスする安全で最適な方法を提供します。
サブシステム
MassEntity フレームワークはカプセル化とコード整理のためにいくつかのサブシステムに分かれています。すべてのサブシステムはワールド サブシステムです。つまりサブシステムの寿命は作成されたワールドの寿命にバインドされています。
MassEntity サブシステム
MassEntity サブシステムは、MassEntity フレームワークの最も重要なサブシステムです。このサブシステムはエンティティ アーキタイプを作成し、ホストします。このサブシステムはエンティティ アーキタイプを作成し、ホストします。
このサブシステムは、フラグメントの追加や削除など、エンティティ操作のインターフェスとして機能します。また、アーキタイプ間でエンティティを移動する役割もあります。他のサブシステムは [MassCommandBuffer] コマンドを使用して非同期でこの機能を呼び出すことができます。
MassSimulation サブシステム
MassSimulation サブシステムは、MassEntity の周期的なフレーム単位の実行する役割があります。このサブシステムは MassProcessingPhaseManager を使用して、プロセッサーをさまざまなエンジン ティック フェーズで実行されるグループに分けます。
MassEntity は MassSimulation サブシステムと相互作用することなくデータを処理するために使用できることに留意してください。
MassSpawner サブシステム
MassSpawner サブシステムは、MassSpawner と手続型呼び出しに基づいてエンティティをスポーンし、管理します。このサブシステムは利用可能な「Entity」テンプレートの情報をホストする MassEntityTemplateRegistry インスタンスを保有します。
「Entity」テンプレート
「Entity」テンプレート は Unreal Engine エディタで作成した MassEntityConfig アセットのデータから生成されます。このアセットはエンティティ作成中に追加できる一連のトレイトを示すことができます。さらに、MassEntityConfig アセットは親アセットをもち、そこからトレイトを継承することができます。
トレイト
トレイト は、所定の機能を提供するフラグメントとプロセッサーの総称です。エンティティには任意の数のトレイト インスタンスを追加できます。各トレイト インスタンスは、エンティティがトレイトから指定された動作を示すようにフラグメントを追加し、設定する役割があります。トレイトの一般的な例は、回避の動作、Look-At Target、ステート ツリーの使用です。
MassRepresentation サブシステム
MassRepresentation サブシステムは、エンティティのさまざまなビジュアル面のスポーンと管理を担っています。エンティティのスポーンは UMassActorSpawner サブシステムを通して行われます。
MassActorSpawner サブシステム
MassActorSpawner サブシステムには、MassEntity フレームワークでアクタをスポーンするために必要なすべての機能が含まれます。
MassActor サブシステム
MassActor サブシステムは、MassEntity にスポーンされたアクタを追跡します。
MassAgent サブシステム
MassAgent サブシステムは、MassAgent コンポーネントを含むアクタを管理します。このアクタは、アクタと関連するエンティティへの追加のトレイトなど、コンポーネントから機能を受け取ります。
MassAgent コンポーネントをもつアクタは、シミュレーションの範囲でなくても MassEntity と通信できます。次に例を示します。エージェント クラウドの回避を計算するためにプレイヤーの位置を使用できます。
MassEntity は、アクタがシミュレーションの外部にいる場合でも、MassAgent コンポーネントをもつアクタと通信することもできます。
MassCrowd サブシステム
MassCrowd サブシステムは、レベルで使用可能なゾーン グラフデータを使用してエージェント クラウドの動きを調整します。サブシステムは、レーンやレーンの状態に関する利用可能なデータを使用してクラウドの動きを駆動します。
MassMovement サブシステム
MassMovement サブシステムは、エージェントが近くの他のエージェントの位置を把握するのに使用する空間ハッシュ グリッドをホストします。
MassStateTree サブシステム
MassStateTree は、StateTree システムと MassEntity を統合するために使用します。主な機能は、MassEntity フレームワークに使用される StateTree アセットの追跡と管理です。
MassDebugger サブシステム
MassDebugger サブシステムは、MassEntity のデバッグ機能へのインターフェースです。このシステムは、実行時にビューポートに MassEntity のデバッグ情報を表示するために、すべての関連データを Gameplay Debugger システムに提供します。