Version: 2021.1
言語: 日本語
ネスト状のプレハブ
複数レベルでのオーバーライド

プレハブバリアント

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

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

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

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

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

  • びちゃびちゃした音を発する AudioSource コンポーネントを加えることで、GermSlimeTarget のナメクジのような不快な音を実現します。

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

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

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

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

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

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

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

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

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

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

上のスクリーンショットで、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 (基本にすべてを適用) と表示されています。

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

  • 2018–07–31 公開ページ

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

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