プレハブバリアントは、一揃いの事前定義されたプレハブのバリエーションを使用したい場合に便利です。
例えば、ゲームに複数の異なるタイプの GermSlimeTarget が必要な場合があります。それらは、ゲーム内の同じ基本 GermSlimeTarget プレハブに基づいています。ただし、GermSlimeTarget の中には、アイテムを運ぶもの、動く速度の違うもの、他のものより多くの効果音を発するものなどが必要な場合があります。
これを行うには、最初の GermSlimeTarget プレハブを設定して、すべての GermSlimeTarget に共有させたいすべての基本的な動きをさせます。それから、複数のプレハブバリアントを作成して以下を行うことができます。
スクリプトのプロパティーオーバーライドを使ってスピードを変更することによって、GermSlimeTarget をより速く動かすことができます。
GermSlimeTarget のアームに追加のゲームオブジェクトを加えて、GermSlimeTarget にアイテムを運ばせます。
びちゃびちゃした音を発する AudioSource コンポーネントを加えることで、GermSlimeTarget のナメクジのような不快な音を実現します。
プレハブバリアントは、基本と呼ばれる別のプレハブのプロパティーを継承します。プレハブバリアントに行われたオーバーライドは、基本プレハブの値よりも優先されます。プレハブバリアントは、モデルプレハブやその他のプレハブバリアントなど、他のどんなプレハブでも基本として持つことができます。
別のプレハブに基づいてプレハブバリアントを作成する方法は複数あります。
Project ウィンドウのプレハブを 右クリック し、Create > Prefab Variant を選択します。これにより、選択したプレハブのバリアントを作成できます。このプレハブには最初はオーバーライドはありません。プレハブバリアントをプレハブモードで開いて、オーバーライドを加えることができます。
また、Hierarchy のプレハブインスタンスを Project ウィンドウに ドラッグ することもできます。これを行うと、新しいプレハブまたはプレハブバリアントを作成するかどうかを尋ねるダイアログが表示されます。プレハブバリアントを選択すると、ドラッグしたプレハブインスタンスに基づく新しいプレハブバリアントが作成されます。そのインスタンスでオーバーライドしたものはすべて、新しいプレハブバリアント内にあります。プレハブモードで開いて、オーバーライドを加えたり、オーバーライドの編集や削除を行うことができます。
プレハブバリアントは青のプレハブアイコンで表示され、矢印がついています。
プレハブバリアントがプレハブモードで開かれると、ルートはプレハブインスタンスとして青のプレハブアイコンで表示されます。このプレハブインスタンスは、プレハブバリアントが継承する基本プレハブを表します。プレハブバリアント自体を表すものではありません。プレハブバリアントに加える編集はすべて、バリアントに存在するこの基本プレハブに対するオーバーライドになります。
上のスクリーンショットで、GermSlimeTarget With GermOBlaster ルートゲームオブジェクトを選択し、Inspector の Select ボタンをクリックすると、バリアントである__GermSlimeTarget With GermOBlaster__ ではなく、基本プレハブである GermSlimeTarget が選択されます。なぜなら、プレハブインスタンスは基本プレハブである GermSlimeTarget のインスタンスであるため、Select ボタンは常に、インスタンスの元となるプレハブアセットを選択します。
プレハブインスタンスの場合と同様に、プレハブバリアントのプレハブオーバーライド (プロパティー値の変更、コンポーネントの追加、コンポーネントの削除、子ゲームオブジェクトの追加など) を行なえます。同様の制限もあります。基本プレハブから作成されたプレハブバリアントのゲームオブジェクトを繰り返し、親にすることはできません。また、基本プレハブにあるプレハブバリアントからゲームオブジェクトを削除することもできません。ただし、ゲームオブジェクトを (プロパティーのオーバーライドとして) 非アクティブにして、ゲームオブジェクトの削除と同じ効果を得ることができます。
ノート: プレハブバリアントをプレハブモードで編集する場合、オーバーライドの適用 (Overrides ドロップダウンウィンドウやコンテキストメニューを使用) によって、バリアントのバリエーションが基本のプレハブアセットに適用されることを理解する必要があります。これは、望まない ことである場合が多くあります。プレハブバリアントの利点は、有用で再使用可能なオーバーライドの集合を効率よく格納できることです。このため、通常はオーバーライドとして残り、基本のプレハブアセットには適用されないのです。この点を説明するために、基本プレハブアセット (“GermSlimeTarget”) に追加の GermOBlaster ゲームオブジェクトを適用すると、プレハブアセットも GermOBlaster を持つことになります。 GermSlimeTarget With GermOBlaster バリアントの意義は、このバリエーションのみが GermOBlaster を持っていることです。そのため、追加された GermOBlaster ゲームオブジェクトはプレハブバリアント内でオーバーライドのまま残す必要があります。
Overrides ドロップダウンウィンドウを開くと、そのヘッダーに、オーバーライドの対象となるオブジェクトと、オーバーライドが存在するコンテキストが常に表示されます。プレハブバリアントの場合、ヘッダーは、オーバーライドは基本プレハブを対象とし、プレハブバリアントに存在することが表示されます。さらに明確にするために、Apply All ボタンには Apply All to Base (基本にすべてを適用) と表示されています。
2018–07–31 Page published
ネスト化したプレハブとプレハブのバリアントを 2018.3 に追加