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