This document is about: QUANTUM 3
SWITCH TO

エンティティプロトタイプ

はじめに

データ駆動設計を促進するために、Quantumはエンティティプロトタイプを特徴としています。

Quantumエンティティプロトタイプは、以下を含むエンティティのシリアライズされたバージョンです。

  • 構成(つまり、どのコンポーネントから構成されているか);
  • データ(つまり、コンポーネントのプロパティとその初期値)。

これにより、データと振る舞いの明確な分離が可能になり、デザイナーはプログラマーが常に振る舞いを編集することなく、データの調整を行うことができます。

プロトタイプの設定

エンティティプロトタイプはUnity Editorで設定できます。

基本

プロトタイプを作成するには、任意のGameObjectにQuantumEntityPrototypeコンポーネントを追加します。

Entity Prototype Script on an empty GameObjet
Basic Entity Prototype (Empty GameObject + Entity Prototype Script).

QuantumEntityPrototypeスクリプトは、2Dおよび3Dの両方で最も一般的に使用されるコンポーネントのパラメータを設定し、定義することを可能にします。

  • Transform(2D用のTransform2DVerticalを含む);
  • PhysicsCollider;
  • PhysicsBody;
  • NavMeshPathFinder;
  • NavMeshSteeringAgent;
  • NavMeshAvoidanceAgent。

物理およびNavMesh関連のエージェントの依存関係は尊重されます。
詳細については、それぞれのドキュメントを参照してください。

カスタムコンポーネント

エンティティプロトタイプに追加のコンポーネントを追加するには、次のいずれかの方法を使用します。

  • Entity Componentsリスト内の**+**ボタン;
  • 正規のUnityのAdd Componentボタンを使用して、適切なQPrototypeコンポーネントを検索する。

コレクションに関する注意

コンポーネント内の動的コレクションは、プロトタイプに少なくとも1つのアイテムがある場合にのみ自動的に割り当てられます。そうでない場合は、コレクションを手動で割り当てる必要があります。この件に関する詳細は、DSLページの動的コレクションのエントリを参照してください。

階層

ECSでは、エンティティやGameObjectの階層という概念は存在しません。そのため、エンティティプロトタイプは階層やネスティングをサポートしていません。

子プロトタイプは直接サポートされていませんが、以下の方法で対応できます。

  1. シーン内に別々のプロトタイプを作成し、ベイクする;
  2. コンポーネント内に参照を保持してリンクする;
  3. "子"の位置を手動で更新する。

注意: シーン内でベイクされていないプロトタイプは、エンティティがコードで作成されてリンクされる異なるワークフローに従う必要があります。

ゲームオブジェクト(ビュー)内に階層を持つことは可能ですが、エンティティ(シミュレーション)内の階層は自分で処理する必要があります。

プロトタイプの作成/インスタンス化

エンティティプロトタイプがUnityで定義されると、シミュレーションに含める方法はいくつかあります。

シーン/マップにベイクする

エンティティプロトタイプがUnityシーンの一部として作成されると、対応するマップアセットにベイクされます。ベイクされたエンティティプロトタイプは、マップが初期化される際に、そのベイクされた値と共にロードされます。

注意: シーンのエンティティプロトタイプが編集されたり、その値が変更された場合、マップデータを再ベイクする必要があります(プロジェクトの設定によっては、プロジェクトを保存するなどのいくつかのエディタの操作中に自動的に行われる場合があります)。

コード内で

QuantumEntityPrototypeから新しいエンティティを作成するには、以下の手順に従ってください。

  1. QuantumEntityPrototypeコンポーネントを持つGameObjectのUnityプレハブを作成します;
  2. プレハブを、デフォルトでAssetsフォルダーを含むAsset Search Paths内のQuantumEditorSettingsアセットに含まれる任意のフォルダーに配置します;
Entity Prototype Asset
エンティティプロトタイププレハブ + 生成されたエンティティプロトタイプアセット。

これにより、プレハブ自体に関連付けられたEntityPrototypeアセットが自動的に生成されます(上記のスクリーンショットに示されている通り)。

  1. エディター内では、AssetRef<EntityPrototype>型のフィールドを通じてそのようなEntityPrototypeアセットを参照することができます。これは、シミュレーションコードを介して作成されるエンティティのプロトタイプを参照する方法であり、Unityで通常の方法(ドラッグアンドドロップやアセットリストからの選択)で行うのと同様に参照できます。
    例を挙げると、下のスクリーンショットには、RuntimePlayerクラスですでに宣言されたフィールドを介して参照する例があります。
Entity Prototype Asset GUID & Path
エディターでエンティティプロトタイプアセットを参照する。
  1. frame.Create()を使用してプロトタイプからエンティティを作成します。これは、上記のアセットへの参照を渡すことで最も一般的に行われますが、他にもオーバーロードがあります。

C#

void CreateExampleEntity(Frame f) {
    // Using a reference to the entity prototype asset
    var exampleEntity = f.Create(myPrototypeReference);
}

注意

シーン内に存在するエンティティプロトタイプはマップアセットにベイクされますが、プレハブ化されたエンティティプロトタイプは、Quantumアセットデータベースの一部である個別のアセットです。

Quantumエンティティビュー

QuantumEntityViewは、エンティティの視覚的表現に対応します。
データ駆動設計の精神に基づき、QuantumエンティティプロトタイプはそのViewコンポーネントを組み込むことも、別のEntityViewアセットを指し示すこともできます。

Self

To set an entity prototype's view to itself, simply add the QuantumEntityView component to it.

Entity Prototype with Entity View
「Self」ビューでのエンティティプロトタイプ。
コンポーネントが追加されると、エンティティプロトタイプスクリプトは*View*パラメータの値として**Self**を表示します。これにより、同じプレハブ内にネストされた*Entity View* **アセット**が作成されます。
Entity Prototype Asset and
エンティティプロトタイプアセットと「Self」ビューアセット。

プロトタイプから分離

エンティティプロトタイプアセットから分離されたビューを設定してリンクするには、次の手順を実行します。

  1. ビューを表すべきGameObjectにQuantumEntityViewを追加します;
  2. そのGameObjectのプレハブを作成します;
  3. これにより、プレハブ内にネストされたEntity View アセットが作成されます。
Entity Prototype with Entity View
エンティティプロトタイプアセットと、別個のエンティティビューアセット。
  1. QuantumEntityViewが関連付けられていないエンティティプロトタイプからViewフィールドをリンクします。新しく作成したEntity View Assetを参照します。これは、ドラッグアンドドロップやUnityのコンテキスト検索メニューを使用して行うことができます。
Linking an Entity Prototype with a separate Entity View Asset
エンティティプロトタイプと別個のエンティティビューアセットとのリンク付け。

重要

エンティティビューがUnityで表示されるためには、シーンにQuantumEntityViewUpdaterスクリプトが必要です。

Back to top