Version: 2021.2
Editing a Prefab in Prefab Mode
インスタンスを通したプレハブの編集

インスタンスのオーバーライド

インスタンスのオーバーライド を使用すると、プレハブのインスタンス間でバリエーションを作成し、それらのインスタンスを同じプレハブアセットにリンクすることができます。

プレハブアセットを変更すると、その変更はすべてのインスタンスに反映されます。ただし、個々のインスタンスに直接変更を加えることもできます。直接変更を行うと、特定のインスタンスで インスタンスのオーバーライド が作成されます。

例えば、プレハブアセットの “ロボット” がゲームの複数のレベルに配置されている場合です。“ロボット” の各インスタンスは異なる速度を持ち、異なるオーディオクリップが割り当てられます。

インスタンスのオーバーライド には、以下の 4 種類があります。

  • プロパティーの値をオーバーライドする

  • コンポーネントを加える

  • コンポーネントを削除する

  • 子ゲームオブジェクトを加える

プレハブインスタンスにはいくつかの制限があります。プレハブに含まれるゲームオブジェクトを再コピーすることはできず、プレハブに含まれるゲームオブジェクトを削除することはできません。ただし、ゲームオブジェクトを非アクティブ化することはできます。これは、ゲームオブジェクトの削除に代わる適切な方法です (プロパティーのオーバーライドの 1 つと考えられます)。

Inspector ウィンドウでは、インスタンスのオーバーライドは 太字 の名前ラベルで表示され、左側に青い線が表示されます。新しいコンポーネントをプレハブインスタンスに追加すると、青い線がコンポーネント全体に伸びます。

プレハブインスタンスを表示するインスペクターウィンドウ。このインスタンスは、オーバーライドされた Is Trigger プロパティーをもち、オーバーライドされた Rigidbody コンポーネントが追加されています
プレハブインスタンスを表示するインスペクターウィンドウ。このインスタンスは、オーバーライドされた “Is Trigger” プロパティーをもち、オーバーライドされた Rigidbody コンポーネントが追加されています

また、インスペクターでは、加えられたコンポーネントと削除されたコンポーネントのアイコンにプラスとマイナスのバッジが表示され、追加されたゲームオブジェクトには Hierarchy のアイコンにプラスバッジが表示されます。

In the Hierarchy window, Prefab instances with overridden or non-default values have an override indicator to show that they have been edited, which Unity displays with a blue line in the left margin with the same appearance as the lines for instance overrides in the Inspector window. For more information, see Hierarchy.

Hierarchy ウィンドウに表示された、オーバーライドによって加えられた GermOBlaster という子ゲームオブジェクトを持つプレハブインスタンス
Hierarchy ウィンドウに表示された、オーバーライドによって加えられた “GermOBlaster” という子ゲームオブジェクトを持つプレハブインスタンス

オーバーライドが優先

プレハブインスタンスのオーバーライドされたプロパティー値は、常にプレハブアセットの値よりも優先されます。つまり、プレハブアセットのプロパティーを変更しても、そのプロパティーがオーバーライドされているインスタンスには影響しません。

プレハブアセットを変更したときに、すべてのインスタンスが期待通りに更新されない場合は、そのプロパティーがインスタンス上でオーバーライドされているかどうかを確認する必要があります。インスタンスのオーバーライドは、どうしても必要な場合にのみ使用することをお勧めします。なぜなら、プロジェクト全体を通してインスタンスのオーバーライドが非常に多い場合、プレハブアセットの変更が、すべてのインスタンスに反映されるかどうかを判断することが難しいからです。

整列はプレハブインスタンスでは特殊

プレハブインスタンスの 整列 (alignment) は特殊なケースで、他のプロパティーとは異なる方法で処理されます。 整列 に関する値は、プレハブアセットからプレハブインスタンスに渡されることはありません。つまり、明示的なインスタンスのオーバーライドを行わなくても、プレハブアセットの整列とは常に異なります。具体的には、整列とはプレハブインスタンスのルート Transform の PositionRotation プロパティーを意味し、Rect Transform の場合は WidthHeightMarginsAnchorsPivot プロパティーも含みます。

これは複数のプレハブインスタンスが同じ位置と回転をとることを必要とすることは非常にまれであるからです。一般的には、プレハブインスタンスの位置と回転を変える必要があるため、Unity は上記の処理をプレハブのオーバーライドとして扱いません。


  • 2018–07–31 Page published

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

Editing a Prefab in Prefab Mode
インスタンスを通したプレハブの編集