Version: Unity 6.0 (6000.0)
言語 : 日本語
Overriding prefab instance data
未使用のオーバーライド

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

オーバーライドが優先

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

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

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

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

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

未使用のオーバーライド

インスタンスオーバーライドの値を表すデータは、それらを宣言するスクリプトが変更または削除されると、使用されなくなる可能性があります。その場合は、未使用のオーバーライドデータを削除 できます。

Overriding prefab instance data
未使用のオーバーライド