プレハブバリアントは、一揃いの事前定義されたプレハブのバリエーションを使用したい場合に便利です。
例えば、ゲームに複数の異なるタイプの 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 公開ページ
ネスト化したプレハブとプレハブのバリアントを 2018.3 で追加
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.