ネスト状のプレハブ
複数レベルでのオーバーライド

プレハブバリアント

プレハブバリアントは、一揃いの事前定義されたプレハブのバリエーションを使用したい場合に便利です。

例えば、複数の異なるタイプのロボットが必要な場合があります。それらは、ゲーム内の同じ基本ロボットプレハブに基づいています。ただし、ロボットの中には、アイテムを運ぶもの、動く速度の違うもの、他のものより多くの効果音を発するものなどが必要な場合があります。

これを行うには、最初のロボットプレハブを設定して、すべてのロボットに共通した基本的な動きをさせます。それから、複数のプレハブバリアントを作成して以下を行うことができます。

  • スクリプトのプロパティーオーバーライドを使ってスピードを変更することによって、ロボットをより速く動かすことができます。

  • ロボットのアームに追加のゲームオブジェクトを加えて、ロボットにアイテムを運ばせます。

  • 錆びたきしむような音を発する AudioSource コンポーネントを加えることで、ロボットの錆びたジョイントを実現します。

プレハブバリアントは、基本と呼ばれる別のプレハブのプロパティーを継承します。プレハブバリアントに行われたオーバーライドは、基本プレハブの値よりも優先されます。プレハブバリアントは、モデルプレハブやその他のプレハブバリアントなど、他のどんなプレハブでも基本に持つことができます。

プレハブバリアントの作成

別のプレハブに基づいてプレハブバリアントを作成する方法は複数あります。

Project ウィンドウのプレハブを 右クリック し、Create > Prefab Variant を選択します。これにより、選択したプレハブのバリアントを作成できます。このプレハブには最初はオーバーライドはありません。プレハブバリアントをプレハブモードで開いて、オーバーライドを加えることができます。

また、Hierarchy のプレハブインスタンスを Project ウィンドウに ドラッグ することもできます。これを行うと、新しいプレハブまたはプレハブバリアントを作成するかどうかを尋ねるダイアログが表示されます。プレハブバリアントを選択すると、ドラッグしたプレハブインスタンスに基づく新しいプレハブバリアントが作成されます。そのインスタンスでオーバーライドしたものはすべて、新しいプレハブバリアント内にあります。プレハブモードで開いて、オーバーライドを加えたり、オーバーライドの編集や削除を行うことができます。

プレハブバリアントは青のプレハブアイコンで表示され、矢印がついています。

Hierarchy ウィンドウに表示された基本的な Robot Prefab と Robot With Oil Can と呼ばれるそのプレハブのバリアント
Hierarchy ウィンドウに表示された基本的な Robot Prefab と “Robot With Oil Can” と呼ばれるそのプレハブのバリアント

プレハブバリアントの編集

プレハブバリアントがプレハブモードで開かれると、ルートはプレハブインスタンスとして青のプレハブアイコンで表示されます。このプレハブインスタンスは、プレハブバリアントが継承する基本プレハブを表します。プレハブバリアント自体を表すものではありません。プレハブバリアントに加える編集はすべて、バリアントに存在するこの基本プレハブに対するオーバーライドになります。

プレハブモードのプレハブバリアント Robot With Oil Can。Oil Can プレハブは基本プレハブのオーバーライドとして加えられます
プレハブモードのプレハブバリアント “Robot With Oil Can”。“Oil Can” プレハブは基本プレハブのオーバーライドとして加えられます

上のスクリーンショットで、Robot With Oil Can ルートゲームオブジェクトを選択し、Inspector の Select ボタンをクリックすると、バリアントである Robot With Oil Can ではなく、基本プレハブである Robot が選択されます。なぜなら、プレハブインスタンスは基本プレハブである Robot のインスタンスであるため、Select ボタンは常に、インスタンスの元となるプレハブアセットを選択します。

プレハブインスタンスの場合と同様に、プレハブバリアントのプレハブオーバーライド (プロパティー値の変更、コンポーネントの追加、コンポーネントの削除、子ゲームオブジェクトの追加など) を行なえます。同様の制限もあります。基本プレハブから作成されたプレハブバリアントのゲームオブジェクトを繰り返し、親にすることはできません。また、基本プレハブにあるプレハブバリアントからゲームオブジェクトを削除することもできません。ただし、ゲームオブジェクトを (プロパティーのオーバーライドとして) 非アクティブにして、ゲームオブジェクトの削除と同じ効果を得ることができます。

ノート プレハブバリアントをプレハブモードで編集する場合、オーバーライドの適用 (Overrides ドロップダウンウィンドウやコンテキストメニューを使用) によって、バリアントのバリエーションが基本のプレハブアセットに適用されることを理解する必要があります。これは、望まない ことである場合が多くあります。プレハブバリアントの利点は、有用で再使用可能なオーバーライドの集合を効率よく格納できることです。このため、通常はオーバーライドとして残り、基本のプレハブアセットには適用されないのです。この点を説明するために、基本プレハブアセット (Basic Robot) に追加の Oil Can ゲームオブジェクトを適用すると、プレハブアセットも Oil Can を持つことになります。 Robot With Oil Can バリアントの意義は、このバリエーションのみがオイル缶を運んでいることです。そのため、追加された Oil Can ゲームオブジェクトはプレハブバリアント内でオーバーライドのまま残す必要があります。

Overrides ドロップダウンウィンドウを開くと、そのヘッダーに、オーバーライドの対象となるオブジェクトと、オーバーライドが存在するコンテキストが常に表示されます。プレハブバリアントの場合、ヘッダーは、オーバーライドは基本プレハブを対象とし、プレハブバリアントに存在することが表示されます。さらに明確にするために、Apply All ボタンには Apply All to Base (基本にすべてを適用) と表示されています。

プレハブモードでプレハブバリアントを編集するときの、プレハブバリアントの Overrides ドロップダウン
プレハブモードでプレハブバリアントを編集するときの、プレハブバリアントの Overrides ドロップダウン

  • 2018–07–31 限られた 編集レビュー でパブリッシュされたページ

  • ネスト化したプレハブとプレハブのバリアントを 2018.3 に追加

ネスト状のプレハブ
複数レベルでのオーバーライド