Version: Unity 6.0 (6000.0)
言語 : 日本語
ネスト状のプレハブ
Overriding prefab instance data

プレハブバリアント

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

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

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

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

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

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

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

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

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

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

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

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

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 ドロップダウンウィンドウまたはコンテキストメニューを使用)、バリアントのバリエーションがベースプレハブアセットに適用されることを理解しておく必要があります。これは、多くの場合、望ましくない ことです。プレハブバリアントの利点は、有意義で再利用可能なオーバーライドのコレクションを保存できることです。そのため、通常はオーバーライドとして残り、ベースプレハブアセットには適用されません。例として、追加の GermOBlaster ゲームオブジェクトをベースプレハブアセット (“GermSlimeTarget”) に適用すると、ベースプレハブアセットにも GermOBlaster が設定されます。しかし、GermSlimeTarget With GermOBlaster バリアントのポイントは、このバリアントだけが GermOBlaster を扱うことであり、追加された GermOBlaster ゲームオブジェクトはプレハブバリアント内のオーバーライドとして残す必要があります。

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

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

  • 2018–07–31

  • ネスト状のプレハブとプレハブバリアントは 2018.3 で追加

ネスト状のプレハブ
Overriding prefab instance data