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のPrefabのようなワークフローと考えてください。ゲームエンジンが初めての方は、再利用可能なオブジェクトのレシピのようなものと考えてください

毎回同じドア、敵、ピックアップ、UIウィジェットを作り直すのではなく、一度セットアップを作成して必要な場所で再利用します。

Entity Templatesとは?

Entity Templateはエンティティ構造を保存する資産です。

以下を含むことができます:

  • ルートエンティティ(すべてのTemplateは1つだけのルートエンティティを持つ必要があります)。
  • 子エンティティ。
  • コンポーネント。
  • コンポーネント設定。
  • 資産参照。
  • プロパティ。
  • タグ。

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

インスタンスはテンプレート資産を基盤として使用し、同じ内部構造を保持しつつ特定のシーン内の配置されたオブジェクトとして存在します。

Entity Templatesが重要な理由

多くのゲームオブジェクトは単一のメッシュだけではありません。

ピックアップは以下のものを含むかもしれません:

  • 見えるモデル。
  • トリガー。
  • ライト。
  • パーティクルエフェクト。
  • サウンド。
  • 報酬を与えるロジック。

テンプレートはその全体のセットアップをまとめて保持できます。

Entity Templatesは以下のようなものに使用します:

  • プレイヤーキャラクター。
  • 敵。
  • ピックアップ。
  • ドア。
  • 弾丸。
  • 車両。
  • ポータル。
  • ダメージ判定領域。
  • プロップ。
  • UI部品。
  • 再利用可能なゲームプレイオブジェクト。

テンプレートは時間を節約するだけでなく、繰り返されるオブジェクトの一貫性を保ちます。すべての体力ピックアップが同じテンプレートから来ていれば、テンプレートを一度改善するだけでプロジェクト全体が整理されます。

Entity Templateの作成

Asset BrowserからEntity Templateを作成できますし、既存のシーンエンティティをScene Graphで右クリックするか選択してCtrl + Tを押すことでテンプレートに昇格させることもできます。

一般的なワークフローは、まずシーン内でオブジェクトを作りテストし、セットアップが有用になったタイミングでテンプレートにすることです。以下のように進みます:

  1. シーン内でエンティティを作成する。
  2. 必要なコンポーネントや子を追加する。
  3. 設定を調整する。
  4. Entity Templateに昇格させる。
  5. 同じシーンまたは他のシーンでそのテンプレートを再利用する。

ただし、プレイヤー、敵、パワーアップなど、確実に再利用する場合はすぐにAsset Browserで作成するか、昇格させるのが良い習慣です。

Scene Graphのクイック編集メニューからもエンティティをテンプレートに昇格できます。エディタで表示されるショートカットはCtrl + Tです。

テンプレート資産とテンプレートインスタンスの違い

テンプレート資産と配置されたインスタンスは分けて考えると理解しやすいです。

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

資産は再利用される構造を定義し、 インスタンスはその構造を特定のシーンに表示します。

Entity Templateの編集

テンプレートは独立した資産として編集します。

テンプレートを編集するとき、Caveはテンプレートの編集シーンに切り替わり、テンプレート内のエンティティ構造を直接編集できます。

大切な考え方は:

> テンプレートは内部の階層構造を所有しています。

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

ゲーム開始後はこの制約はなくなります。ゲームが始まると、テンプレートの全階層はカスタマイズ可能になります。したがってゲームロジックのプログラム中は、テンプレートインスタンスやその子と自由にやり取り可能です。

例えば、Enemyテンプレートを開いて新しいHealth Barの子を追加すれば、そのエネミーテンプレートのすべてのインスタンスが更新された構造の恩恵を受けます。

なぜテンプレートの子はシーンで直接編集しないのか

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

例えば、敵テンプレートが以下のような構造の場合:

Enemy
  Body Mesh
  Detection Area
  Health Bar

これらの内部子はシーンの個別のエンティティとしてではなく、テンプレート内で編集するべきです。

こうすることで、すべてのインスタンスの一貫性が保たれます。もし配置されたすべての敵が内包する子を自由に編集できたら、テンプレートは信頼できる再利用可能オブジェクトでなくなってしまいます。

シーンにテンプレートを配置する

テンプレートができたら、それをシーンに配置できます。

例えば、Asset Browserから3D Viewへテンプレートをドラッグします。

配置されると:

  • シーンのScene Graphにテンプレートインスタンスとして表示されます。
  • Caveはインスタンスを示すために異なるテンプレートカラー(緑色)を使います。
  • インスタンスはテンプレート資産との接続を維持します。

image.png

ワークフロー視点では、これはレベル構築の最速の方法の一つです。再利用可能なドア、ピックアップ、敵、プロップを一度作成し、必要な場所にインスタンスを配置するだけです。

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

テンプレートインスタンスはローカルにカスタマイズできます:

image.png

主な方法はルートテンプレートエンティティから公開されたプロパティを使うことです。

これにより以下のバランスが取れます:

  • 構造は再利用可能なまま。
  • 配置された各インスタンスは固有の値を持てる。

例えば複数の敵が同じ敵テンプレートを使いながら、それぞれ異なる体力、速度、巡回設定や行動オプションを持つことが可能です。

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

役立つローカルプロパティ例:

プロパティ 使用例
敵の体力 ある敵を弱く・強くする。
敵の速度 遅い敵や速い敵のバリエーションを作る。
ダメージ量 危険度の違うハザードセットアップを再利用。
ポータルのターゲットレベル それぞれのポータルを異なるシーンに送る。
ピックアップの価値 コイン、宝石、報酬の価値を変える。
ドアのロック状態 ロックドアとアンロックドアで同じセットアップを再利用。
UIテキスト 同じUIウィジェットに異なるラベルを使う。

例として、1つのPortalテンプレートは、配置された各ポータルにローカルプロパティでターゲットシーンを指定できれば、様々な場所で利用可能です。

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

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

例:

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

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

これらは単に使うためだけでなく、本当のCaveオブジェクトの構築方法を学ぶための教材でもあります。

Entity Templatesの良い利用例

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

  • 何度も繰り返して使われる。
  • 複数のシーンで使われる。
  • 複数のコンポーネントで構成されている。
  • 複数の子エンティティで構成されている。
  • 一貫した動作を意図している。
  • 再利用可能なゲームプレイピースとして有用。

良い候補は:

  • 敵。
  • NPC。
  • 武器。
  • 弾丸。
  • 収集アイテム。
  • ドア。
  • チェックポイント。
  • トラップ。
  • レベルポータル。
  • 車両。
  • 壊せるプロップ。
  • UIウィジェット。
  • 再利用可能なレベルデザインピース。

オブジェクトを多く再利用するほど、テンプレートの価値は高まります。

テンプレートを使わない方が良い場合

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

一度だけ現れ、そのシーンだけで意味のあるユニークオブジェクトは普通のシーンエンティティのままでよいです。

例:

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

テンプレートは強力ですが、再利用する場合に最も有用です。小さなオブジェクトすべてを早すぎる段階でテンプレートにすると、かえってプロジェクト管理が難しくなります。

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

同じエンティティセットアップを複数回コピーしていると気付いたら、それをEntity Templateにすることを検討してください。

この習慣は多くの時間を節約し、プロジェクトの規模が大きくなってもきれいに保つ助けになります。