メインコンテンツまでスキップ

テンプレート

テンプレート(またはプレハブ)は再利用可能なエンティティを作成することにより、開発を迅速化することができます。シーン内に複数のテンプレートのインスタンスを配置することができ、Templateアセットに変更を加えてそれを適用すると、そのテンプレートのすべてのインスタンスが更新されます。

テンプレートの作成

Templateアセットを作成するには、シーン内の任意のエンティティを右クリックして「Template → New Template」を選択します。これにより、新しいTemplateアセットが作成され、アセット・パネルで現在選択されたフォルダに追加されます。そして、右クリックしたエンティティはその新しいTemplateアセットのインスタンスになります。

シーンにテンプレートの追加

Templateアセットをシーンにドラッグ&ドロップするか、ヒエラルキー内のエンティティの下に右クリックして、「Template → Add Instance」を選択します。それから、Templateアセットを選択することによって、クリックされたエンティティのインスタンスが作成されます。

エンティティがテンプレートのインスタンスであるとき、ヒエラルキーには少し異なる外観があります。

Template Instance

テンプレートインスタンスのルート・エンティティとその子供たちは、同じテンプレートの一部であることを示す異なるアイコンを持っています。

テンプレートインスタンスのルートを選択すると、エンティティインスペクターに次のプロパティが表示されることに注意してください。

Template Inspector

テンプレートの更新

Templateアセットに変更を加えるには、まずエディタにそのインスタンスを追加する必要があります。次に、インスタンスを自由に変更し、最後に変更内容をTemplateアセットに適用します。

テンプレートのオーバーライド

テンプレートのインスタンスまたはその子供に変更を加えると、テンプレート・オーバーライドが生成されます。いくつかの種類のオーバーライドがあります。

  • field override: エンティティまたはそのコンポーネントのフィールドの値が、Templateアセット内のそれと異なるオーバーライド。
  • New Entity override: テンプレートインスタンスの子として追加されたEntityで、Templateアセットに存在しないもの。
  • Deleted Entity override: テンプレートインスタンスから削除された子Entity。

オーバーライドをTemplateアセットに適用すると、それらはオーバーライドではなく、Templateアセットの一部になります。

テンプレートインスタンスのルートを選択し、エンティティインスペクターを確認することによって、オーバーライドの概要を確認できます。

Overrides

また、オーバーライドされたフィールドのラベルの色が異なることにも注目してください。オーバーライドの詳細なリストを表示するには、Overrides Diff Viewをクリックしてください。

オーバーライドされたフィールドのカラー・ラベルにマウスを重ねると、そのオーバーライドに関する詳細を表示することができます。

Override Hover

オーバーライドの適用

オーバーライドを適用するには、オーバーライドされたフィールドのツールチップに表示されるAPPLYをクリックします。

複数のオーバーライドを適用するには、テンプレートインスタンスのルートを選択し、エンティティインスペクターでApply Allをクリックします。また、テンプレートインスタンスのルートを右クリックし、Template → Apply To Templateを選択することもできます。

また、Overrides Diff Viewを開いてそこでオーバーライドを適用することもできます。

Templateアセットに適用するオーバーライドは、そのTemplateアセットの他のインスタンスにも反映されます。

注記

現時点では、Templateアセットにオーバーライドを適用するアクションを取り消すことはできません。

オーバーライドの元に戻す

特定のオーバーライドを元に戻すには、オーバーライドされたフィールドのツールチップに表示されるREVERTをクリックします。

すべてのオーバーライドを元に戻すには、テンプレートインスタンスのルートを選択し、エンティティインスペクターでRevert Allをクリックします。

また、Overrides Diff Viewを開いて、そこからオーバーライドを元に戻すこともできます。

オーバーライドの詳細

オーバーライドを作成すると、それをオーバーライドするプロパティがTemplateアセットから更新されないように保護されます。たとえば、次のようなテンプレートインスタンスがあるとします。

Template Instance

Tree1/Sphereの位置を変更します。これにより、Sphereエンティティの位置にオーバーライドが作成されます。次に、別のTemplateアセットのインスタンスを作成し、Sphereの位置を別のものに変更します。第2のインスタンスからオーバーライドを適用すると、第1のインスタンスの位置が更新されないため、オーバーライドされて保護されます。Sphereエンティティの位置の変更を第1のインスタンスに反映させるには、まずオーバーライドを元に戻す必要があります。

実行時にインスタンス化

次のように、実行時にTemplateアセットをインスタンス化することができます。

const templateAsset = this.app.assets.get(templateAssetId);
const instance = templateAsset.resource.instantiate();
this.app.root.addChild(instance);

スクリプト属性を使用して、IDで検索するのではなく、スクリプトにTemplate Assetsを渡すこともできます。

Templateアセットをいつロードする必要がありますか?

テンプレートはエンティティの階層とデータを保存します。テンプレートインスタンスがエディタのシーンに追加されると、エンティティの階層とデータがシーン・データに含まれます。

実行時に、テンプレートインスタンスはアセットにリンクされていないため、アセットのプリロード/ロードを行わないことによりダウンロードサイズを減らすことができます。

テンプレートのインスタンスを実行時にインスタンス化する場合にのみ、Templateアセットをロードする必要があります。