テンプレート
テンプレート(またはプレハブ)は再利用可能なエンティティを作成することにより、開発を迅速化することができます。シーン内に複数のテンプレートのインスタンスを配置することができ、テンプレート・アセットに変更を加えてそれを適用すると、そのテンプレートのすべてのインスタンスが更新されます。
テンプレートの作成
新しいテンプレート・アセットを作成するには、シーン内の任意のエンティティを右クリックして「Template → New Template」を選択します。これにより、新しいテンプレート・アセットが作成され、アセット・パネルで現在選択されたフォルダに追加されます。そして、右クリックしたエンティティはその新しいテンプレート・アセットのインスタンスになります。
シーンにテンプレートの追加
テンプレート・アセットをシーンにドラッグ&ドロップするか、ヒエラルキー内のエンティティの下に右クリックして、「Template → Add Instance」を選択します。それから、テンプレート・アセットを選択することによって、クリックされたエンティティのインスタンスが作成されます。
エンティティがテンプレートのインスタンスであるとき、ヒエラルキーには少し異なる外観があります。
テンプレート・インスタンスのルート・エンティティとその子供たちは、同じテンプレートの一部であることを示す異なるアイコンを持っています。
テンプレート・インスタンスのルートを選択すると、エンティティ・インスペクターに次のプロパティが表示されることに注意してください。
テンプレートの更新
テンプレート・アセットに変更を加えるには、まずエディタにそのインスタンスを追加する必要があります。次に、インスタンスを自由に変更し、最後に変更内容をテンプレート・アセットに適用します。
テンプレートのオーバーライド
テンプレートのインスタンスまたはその子供に変更を加えると、テンプレート・オーバーライドが生成されます。いくつかの種類のオーバーライドがあります。
- field override: エンティティまたはそのコンポーネントのフィールドの値が、テンプレート・アセット内のそれと異なるオーバーライド。
- New Entity override: テンプレート・インスタンスの子として追加されたEntityで、テンプレート・アセットに存在しないもの。
- Deleted Entity override: テンプレート・インスタンスから削除された子Entity。
オーバーライドをテンプレート・アセットに適用すると、それらはオーバーライドではなく、テンプレート・アセットの一部になります。
テンプレートインスタンスのルートを選択し、エンティティインスペクターを確認することによって、オーバーライドの概要を確認できます。
また、オーバーライドされたフィールドのラベルの色が異なることにも注目してください。オーバーライドの詳細なリストを表示するには、Overrides Diff Viewをクリックしてください。
オーバーライドされたフィールドのカラー・ラベルにマウスを重ねると、そのオーバーライドに関する詳細を表示することができます。
オーバーライドの適用
オーバーライドを適用するには、オーバーライドされたフィールドのツールチップに表示されるAPPLYをクリックします。
複数のオーバーライドを適用するには、テンプレートインスタンスのルートを選択し、エンティティインスペクターでApply Allをクリックします。また、テンプレートインスタンスのルートを右クリックし、Template → Apply To Templateを選択することもできます。
また、Overrides Diff Viewを開いてそこでオーバーライドを適用することもできます。
テンプレート・アセットに適用するオーバーライドは、そのテンプレート・アセットの他のインスタンスにも反映されます。
注:現時点では、テンプレート・アセットにオーバーライドを適用するアクションを取り消すことはできません。
オーバーライドの元に戻す
特定のオーバーライドを元に戻すには、オーバーライドされたフィールドのツールチップに表示されるREVERTをクリックします。
すべてのオーバーライドを元に戻すには、テンプレートインスタンスのルートを選択し、エンティティインスペクターでRevert Allをクリックします。
また、Overrides Diff Viewを開いて、そこからオーバーライドを元に戻すこともできます。
オーバーライドの詳細
オーバーライドを作成すると、それをオーバーライドするプロパティがテンプレート・アセットから更新されないように保護されます。たとえば、次のようなテンプレート・インスタンスがあるとします。
Tree1/Sphereの位置を変更します。これにより、Sphereエンティティの位置にオーバーライドが作成されます。次に、別のテンプレート・アセットのインスタンスを作成し、Sphereの位置を別のものに変更します。第2のインスタンスからオーバーライドを適用すると、第1のインスタンスの位置が更新されないため、オーバーライドされて保護されます。Sphereエンティティの位置の変更を第1のインスタンスに反映させるには、まずオーバーライドを元に戻す必要があります。
実行時にインスタンス化
次のように、実行時にテンプレート・アセットをインスタンス化することができます。
var templateAsset = this.app.assets.get(templateAssetId);
var instance = templateAsset.resource.instantiate();
this.app.root.addChild(instance);
スクリプト属性を使用して、IDで検索するのではなく、スクリプトにTemplate Assetsを渡すこともできます。
いつテンプレート・アセットを読み込む必要がありますか?
テンプレートはエンティティの階層とデータを保存します。テンプレート・インスタンスがエディタのシーンに追加されると、エンティティの階層とデータがシーン・データに含まれます。
実行時に、テンプレート・インスタンスはアセットにリンクされていないため、アセットのプリロード/ロードを行わないことによりダウンロード・サイズを減らすことができます。
テンプレートのインスタンスを実行時にインスタンス化する場合にのみ、テンプレート・アセットをロードする必要があります。