Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

Entity TemplatesはCaveの再利用可能なエンティティシステムです。

一度エンティティのセットアップを構築し、それをアセットとして保存し、シーンにインスタンスを配置することができます。

image.png

他のエンジンから来た場合、Entity TemplatesはCaveのプレハブのようなワークフローと考えることができます。ゲームエンジンに新しい場合、再利用可能なオブジェクトのレシピと考えてください

同じドア、敵、拾えるアイテム、またはUIウィジェットを毎回再構築するのではなく、一度セットアップを作成し、必要な場所で再利用します。

Entity Templatesとは?

Entity Templateはエンティティ構造を保存するアセットです。

それには以下が含まれます:

  • ルートエンティティ(すべてのテンプレートには1つだけのルートエンティティが必要です)。
  • 子エンティティ。
  • コンポーネント。
  • コンポーネント設定。
  • アセット参照。
  • プロパティ。
  • タグ。

テンプレートをシーンに配置すると、Caveはそのテンプレートのインスタンスを作成します。

インスタンスはテンプレートアセットを基にしているため、特定のシーンに配置されたオブジェクトとして存在しながら、同じ内部構造を保持できます。

なぜEntity Templatesが重要なのか

多くのゲームオブジェクトは単なる1つのメッシュではありません。

拾えるアイテムには以下が含まれる場合があります:

  • 可視モデル。
  • トリガー。
  • ライト。
  • パーティクル効果。
  • サウンド。
  • 報酬を与えるロジック。

テンプレートはその全体のセットアップを一緒に保つことができます。

たとえば、以下のようなものにEntity Templatesを使用します:

  • プレイヤーキャラクター。
  • 敵。
  • 拾えるアイテム。
  • ドア。
  • 弾。
  • 車両。
  • ポータル。
  • ダメージボリューム。
  • 小道具。
  • UIパーツ。
  • 再利用可能なゲームプレイオブジェクト。

テンプレートは時間を節約しますが、繰り返しオブジェクトの一貫性も保持します。すべてのヘルス拾得アイテムが同じテンプレートから作成されている場合、テンプレートを1回改善するだけでプロジェクトを整理できます。

Entity Templateを作成する

アセットブラウザからEntity Templateを作成することもできますし、シーングラフでそれを右クリックするか、Ctrl + Tを押して既存のシーンエンティティをテンプレートに昇格させることもできます。

一般的なワークフローは、最初にシーン内でオブジェクトを直接構築し、テストしてから、そのセットアップが有用になったらテンプレートに変えることです。手順は次のようになります:

  1. シーンにエンティティを構築します。
  2. 必要なコンポーネントと子エンティティを追加します。
  3. 設定を調整します。
  4. エンティティテンプレートに昇格させます。
  5. 同じシーンや他のシーンでそのテンプレートを再利用します。

しかし、一度でも再利用することが確実になった時点で、プレイヤー、敵、パワーアップなどのように、すぐにそれを作成するのが良い実践です。アセットブラウザで作成するか、前述のように昇格させてください。

シーングラフでは、クイック編集メニューを使用してエンティティをテンプレートに昇格させることができます。エディタで示されるショートカットはCtrl + Tです。

テンプレートアセットとテンプレートインスタンス

テンプレートアセットと配置されたインスタンスを分けるのが役立ちます。

概念 意味
テンプレートアセット アセットブラウザに保存された再利用可能なオブジェクトセットアップ
テンプレートインスタンス シーン内に配置されたそのテンプレートのコピー

アセットが再利用可能な構造を定義します。

インスタンスは、その再利用可能な構造が特定のシーンに現れる場所です。

Entity Templateの編集

テンプレートは独自のアセットとして編集されます。

テンプレートを編集のために開くと、Caveはテンプレート編集シーンに切り替え、その内部エンティティ構造を直接編集できます。

重要なアイデアは:

> テンプレートは内部階層を所有します。

シーンのインスタンスはその階層を使用しますが、内部のすべての子を直接所有することはありません。これにより、すべてのインスタンスが同じ再利用可能なセットアップに接続されます。

ゲームが開始されるとこのルールは無効になります。ゲームを開始すると、テンプレートのすべての階層がすぐにカスタマイズ可能になります。したがって、ゲームロジックをプログラミングしているときは、エンティティテンプレートインスタンス、子などに対してインタラクションできることを期待できます。

たとえば、Enemyテンプレートを開いてその内部に新しいHealth Bar子を追加すると、その敵テンプレートのすべてのインスタンスは更新された構造から利益を得ることができます。

なぜテンプレートの子がシーンで直接編集されないのか

テンプレートインスタンスがシーンに配置されると、内部の子はまだテンプレートに属しています。そのため、Caveはテンプレートの子を直接シーンで編集することから保護します。

たとえば、敵テンプレートが以下を含む場合:

Enemy
  Body Mesh
  Detection Area
  Health Bar

これらの内部の子をシーン所有のオブジェクトとしてではなく、テンプレート内で編集するべきです。

これにより、すべてのインスタンスが一貫性を保ちます。すべての配置された敵が内部の子を自由に編集できた場合、テンプレートは再利用可能な信頼できるオブジェクトとは言えなくなります。

シーン内でのテンプレートのインスタンシエーション

テンプレートが存在した後は、シーンに配置できます。

たとえば、アセットブラウザから3D Viewにテンプレートをドラッグすることができます。

テンプレートが配置されると:

  • シーングラフにテンプレートインスタンスとして表示されます。
  • Caveはインスタンスに異なるテンプレートの色(緑)を使用します。
  • インスタンスはテンプレートアセットへの接続を保持します。

image.png

ワークフローの観点から見て、これはレベルを構築する最も速い方法の1つです。再利用可能なドア、拾得物、敵、小道具を一度作成し、それを必要な場所に配置します。

ローカルテンプレートのカスタマイズ

テンプレートインスタンスはローカルでカスタマイズ可能です:

image.png

主な方法は、ルートテンプレートエンティティによって公開されたプロパティを通じて行います。

このバランスが非常に便利です:

  • 構造は再利用可能に保たれます。
  • 各配置されたインスタンスは独自の値を持つことができます。

たとえば、複数の敵が同じ敵テンプレートを使用できますが、各インスタンスには異なるヘルス、速度、巡回設定、または挙動オプションがあります。

ローカルテンプレートプロパティの例

役立つローカルプロパティには、以下が含まれます:

プロパティ 具体例
敵のヘルス 1つの敵を弱くまたは強くします。
敵の速度 遅いバリアントと速いバリアントを作成します。
ダメージ量 異なる危険レベルで1つのハザードセットアップを再利用します。
ポータルターゲットレベル 各ポータルを異なるシーンに送ります。
拾得物の価値 コイン、ジェム、または報酬の異なる価値を持つようにします。
ドアのロック状態 ロックされたドアとロック解除されたドアのために1つのドアセットアップを再利用します。
UIテキスト 異なるラベルを持つ1つのUIウィジェットを再利用します。

たとえば、1つのPortalテンプレートは、各配置されたポータルがターゲットシーンを選択するローカルプロパティを持っている場合、様々な場所で使用できます。

スタータープロジェクトのテンプレート例

スタータープロジェクトには、選択したプロジェクトオプションに応じて、いくつかの便利なテンプレートが含まれる場合があります。

見つけられる例には:

  • プレイヤーテンプレート。
  • 敵テンプレート。
  • ダメージテンプレート。
  • ポータルテンプレート。
  • 車両テンプレート。
  • 再利用可能なゲームプレイピース。

これらは調査する価値があります。開いて階層を確認し、コンポーネントを調べ、どのプロパティが公開されているかを見てください。

生成されたコンテンツは使用するだけではありません。それは、実際のCaveオブジェクトがどのように構築できるかを教えるためにも存在します。

Entity Templatesの良い使用例

オブジェクトが以下のような場合は、テンプレートを作成してください:

  • 多くの回数繰り返される。
  • 複数のシーンで使用される。
  • 複数のコンポーネントから構築される。
  • 複数の子エンティティから構築される。
  • 一貫して動作することを意図している。
  • 再利用可能なゲームプレイピースとして有用です。

良い候補には:

  • 敵。
  • NPC。
  • 武器。
  • 弾。
  • 収集物。
  • ドア。
  • チェックポイント。
  • トラップ。
  • レベルポータル。
  • 車両。
  • 破壊可能な小道具。
  • UIウィジェット。
  • 再利用可能なレベルデザインピース。

オブジェクトを再利用する頻度が高いほど、テンプレートの価値が高まります。

テンプレートを使用しない場合

すべてのものがテンプレートである必要はありません。

一度だけ現れ、1つのシーンでのみ意味があるユニークなオブジェクトは、通常のシーンエンティティとして残すことができます。

たとえば:

  • 一度限りのシネマティックプロップ。
  • 特別なレベル固有のトリガー。
  • 再利用されることのないユニークな装飾。
  • 一時的なテストオブジェクト。

テンプレートは強力ですが、再利用が重要なときに最も便利です。すべての小さなオブジェクトをテンプレートに早期に変換すると、プロジェクトの管理が難しくなることがあります。

シンプルなテンプレートルール

同じエンティティのセットアップを複製することが多い場合は、それをEntity Templateにすることを検討してください。

その習慣は、時間を節約し、プロジェクトが成長するにつれてずっとクリーンに保つことができます。