This document is about: QUANTUM 2
SWITCH TO

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

イントロダクション

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

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

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

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

プロトタイプを設定する

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

基本

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

Basic Entity Prototype (Empty GameObject + Entity Prototype Script).
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 Prefab + Nested Entity Prototype Asset.
Entity Prototype Prefab + Nested Entity Prototype Asset.

=> これでネストされた エンティティプロトタイプ アセット が生成されます。

  1. Quantumデータベースをリフレッシュします。Quantum -> Generate Asset Resources。

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

Entity Prototype Asset Window.
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 "Self" View.
Entity Prototype with "Self" View.

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

Entity Prototype Asset and "Self" View Asset.
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 Assetと個別のEntity View Asset
Entity Prototype Assetと個別のEntity View Asset
  1. Quantum -> Generate Asset Resourcesデータベースをリフレッシュする。
  2. エンティティプロトタイプ から View フィールドを新しく作成した Entity View Asset を使用してリンクする。ドラッグアンドドロップまたはUnityのコンテキスト検索メニューで行う。
Entity Prototypeを別のEntity View Assetとリンク
Entity Prototypeを別のEntity View Assetとリンク

重要

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

Back to top