Version: 2022.3
言語: 日本語
プレハブモードでのプレハブの編集
インスタンスを通したプレハブの編集

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

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

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

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

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

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

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

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

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

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

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

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

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

Hierarchy ウィンドウでは、オーバーライドされている値、または、デフォルト以外の値を持つプレハブインスタンスには、編集されたことを示すオーバーライド インジケーターがあります。Unity では Inspector ウィンドウのインスタンスのオーバーライドのラインと同じ外観で左マージンに青いラインで表示されます。詳細については、Hierarchy ウィンドウ を参照してください。

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

オーバーライドが優先

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

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

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

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

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

Unused Overrides

The data representing the values of your instance overrides can become unused if the script which declares them is modified or deleted. If this occurs, you can remove the unused override data.

プレハブモードでのプレハブの編集
インスタンスを通したプレハブの編集