最近、ついに DOTS の正式バージョンがリリースされました。誰もが Unity DOTS 開発を開始し、学び、習得できるように、以下で DOTS の重要な概念をいくつか共有しましょう。
Unity DOTS におけるエンティティとしての Entity は、データを直接保存するのではなく、キャリアとして個々のコンポーネントにデータを保存します。各 Entity は、異なる Entity タイプを表す ComponentData の異なる組み合わせを取得します。これらの組み合わせを記述するオブジェクトは ArchType と呼ばれます。コンポーネントにはエンティティ内のデータが含まれており、システムへの読み取りおよび書き込みアクセスを提供します。
コンポーネントを定義するときは、IcomponentData インターフェイス クラスを継承する必要があります。IcomponentData にはメソッドが定義されておらず、この構造タイプを ECS の ComponentData のコンポーネント クラスとしてマークするだけです。struct を使用して ComponentData を定義する場合、それはアンマネージド (ガベージ コレクション) オブジェクトを使用していることを意味し、内部のデータ メンバーもアンマネージドである必要があります。マネージド データ メンバーとオブジェクトを使用したい場合は、構造体をクラスに変更します。定義します。
コンポーネントのメモリは、チャンク (16kib) に基づいて特定の ArchType サイズ (異なるコンポーネントを組み合わせた後のメモリ サイズ) のメモリを割り当て、コンポーネントはこのメモリ ブロックの特定の部分に属します。たとえば、タイプ A のエンティティは A、B、および C コンポーネントで構成されており、ArchType は [A, B, C] となり、ArchType は各コンポーネントの合計になります。Chunk を通じて、Entity の特定の ComponentData がこのメモリ ブロックの一部となるように ArchType メモリを割り当てます。
チャンク(16Kib): 【[A, B, C, …],[A, B, C, …],[A, B, C, …],[A, B, C, …],[A, B 、C、…]]
DOTS 開発で一般的に使用されるコンポーネント タイプがいくつかあり、それらを以下にまとめます。
アンマネージ コンポーネント: 最も一般的に使用されるアンマネージ コンポーネント タイプですが、内部のデータ メンバーはアンマネージである必要があるため、タイプは制限されます。
管理対象コンポーネント: 管理可能なコンポーネントのタイプ。内部のデータ メンバーも任意のタイプにすることができます。
共有コンポーネント: 複数の Entity インスタンスが ComponentData のメモリを共有します。
Cleanup コンポーネント: Entity の 1 つに CleanupComponent がある場合、Entity を破棄すると、他のすべてのコンポーネントがクリーンアップされます。
タグ コンポーネント: タグとして機能するアンマネージド コンポーネント オブジェクト。タグ コンポーネントを使用してエンティティをフィルタリングできます。
バッファコンポーネント: 配列のサイズを変更できる配列データを定義します。
コンポーネントを有効にする: ArchType を変更するとパフォーマンスが大幅に消費されるため、Remove コンポーネントのようにエンティティの ArchType を変更する代わりに、コンポーネントを有効または無効にすることができます。
Unity DOTS ドキュメントの詳細については、私たちをフォローして、関連する学習資料とコードを入手してください。