This document is about: QUANTUM 2
SWITCH TO

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

イントロダクション

データ駆動設計を円滑にするため、Quantum 2.0で エンティティプロトタイプ を導入しました。

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

  • 構成(どのコンポーネントでできているか)
  • データ(コンポーネントのプロパティとその初期値)

データと挙動がきれいに区別され、デザイナーは、プログラマーに常に挙動を編集してもらわなくても、データの微調整を行えるようになります。

プロトタイプを設定する

エンティティプロトタイプは、Unityエディターでセットアップできます。

基本

エンティティプロトタイプ を作成するには、エンティティプロトタイプ スクリプトをいずれかのGameObjectに追加します。

entity prototype script on an empty gameobjet
Basic Entity Prototype (Empty GameObject + Entity Prototype Script).

エンティティプロトタイプ スクリプトを実行すると、2Dと3Dの両方でよく使用するコンポーネント用のパラメータの設定と定義ができるようになります。

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

PhysicsやNavMesh関連のエージェントに対する依存が尊重されます。 詳細は、それぞれ対応するドキュメントを参照してください。

カスタムコンポーネント

以下を使って エンティティプロトタイプ にさらにコンポーネントを追加できます。

  • Add Entity Component ドロップダウン、または
  • 適切な エンティティコンポーネント を検索し、通常のUnity Add Component ボタン

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

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

ヒエラルキー

ECSにはエンティティ/GameObjectヒエラルキーの概念は存在しません。このようなエンティティプロトタイプはヒエラルキーまたはネスティングをサポートしないためです。

子プロパティは直接サポートされていませんが、以下をおこなうことができます:

  1. シーンに個別のプロトタイプを作成し、ベイクします。
  2. コンポーネントの参照を保持しながら、それらをリンクします。
  3. 「子」の位置を手動でアップデートします。

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

オブジェクトにヒエラルキー(ビュー)を設定できますが、エンティティのヒエラルキー―(シミュレーション)は自分で処理する必要があります。

プロトタイプを作成する・インスタンス化する

Unityで エンティティプロトタイプ を定義すると、シミュレーションに何通りもの方法で組み込むことができるようになります。

Scene/Mapでベイクする

エンティティプロトタイプ がUnity Sceneの一部として作成される場合、対応するMapアセット内にベイクされます。ベイクされた エンティティプロトタイプ は、Mapがベイクされた値で初期化された際に読み込まれます。

注意: シーンの エンティティプロトタイプ が編集されたり、値が変更された場合は、Map Dataを再度ベイクする必要があります。

コード内

エンティティプロトタイプ から、新しいエンティティを作成するには、以下のステップに従います。:

  1. EntityPrototype スクリプトをもつGameObjectのUnity Prefabを作成する
  2. プレハブをResources\DB内に置く。
entity prototype asset
Entity Prototype Prefab + Nested Entity Prototype Asset.
=> これでネストされた *エンティティプロトタイプ* **アセット** が生成されます。
  1. Quantumデータベースをリフレッシュします。Quantum -> Generate Asset Resources

  2. エンティティプロトタイプ アセット パスまたはGUIDをシミュレーションで使用できるようにする。

    entity prototype asset guid & path

    Entity Prototype Asset Window.
=> パスまたはGUIDをコピーするには、それぞれ対応する`Edit`ボタンをクリックします。
  1. フレームを介して Create() を呼び出し、例えば EntityPrototype の参照、またはそのインスタンスを渡します。

C#

void CreateExampleEntity(Frame f){
    // using a reference
    var exampleEntity = f.Create(myPrototypeReference);

    // OR, getting an instance before, using the asset's path as a parameter, and then creating the entity
    var entityPrototype = f.FindAsset<EntityPrototype>("Resources/DB/Prefabs/Example|EntityPrototype");
    var exampleEntity = f.Create(entityPrototype);
}

備考

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

Entity View

Entity View はUnityにおけるエンティティの視覚表現に対応しています。 データ駆動設計では、エンティティプロトタイプView コンポーネントを組み込んだり、個別の EntityView アセットを指し示したりします。

重要

UnityでEntity View を表示するには、シーンにEntityViewUpdaterスクリプトが存在する必要があります。

Self

Entity Prototype のビューをそれ自身に設定するには、 Entity View コンポーネントを追加します。

entity prototype with entity view
Entity Prototype with "Self" View.
コンポーネントを追加したら、 *Entity Prototype* スクリプトが **Self** を *View* パラメータの値としてリストします。これにより、ネスト化された *Entity View* **アセット** が同じプレハブ内に作成されます。
entity prototype asset and
Entity Prototype Asset and "Self" View Asset.

Prototypeから区別する

Entity Prototype アセットから区別したビューを設定・リンクするには、以下の通りに行います。:

  1. ビューを表現したいGameObjectに Entity View を追加する。
  2. Entity View を持つGameObjectをプレハブ化する。
  3. Place the prefab in Resources\DB内に上記のプレハブを置くと、プレハブ内でネスト化された Entity View アセット が作成されます。
entity prototype with entity view
Entity Prototype Assetと個別のEntity View Asset
  1. Quantum -> Generate Asset Resourcesデータベースをリフレッシュする。
  2. エンティティプロトタイプ から View フィールドを新しく作成した Entity View Asset を使用してリンクする。ドラッグアンドドロップまたはUnityのコンテキスト検索メニューで行う。
linking an entity prototype with a separate entity view asset
Entity Prototypeを別のEntity View Assetとリンク

重要

UnityでEntity Viewを表示させるには、シーンにEntityViewUpdaterスクリプトが必要です。

Back to top