インスタンスのオーバーライド を使用すると、プレハブのインスタンス間でバリエーションを作成し、それらのインスタンスを同じプレハブアセットにリンクすることができます。
プレハブアセットを変更すると、その変更はすべてのインスタンスに反映されます。ただし、個々のインスタンスに直接変更を加えることもできます。直接変更を行うと、特定のインスタンスで インスタンスのオーバーライド が作成されます。
例えば、プレハブアセットの “ロボット” がゲームの複数のレベルに配置されている場合です。“ロボット” の各インスタンスは異なる速度を持ち、異なるオーディオクリップが割り当てられます。
インスタンスのオーバーライド には、以下の 4 種類があります。
プロパティの値をオーバーライドする
コンポーネントを加える
コンポーネントを削除する
子ゲームオブジェクトを加える
プレハブインスタンスにはいくつかの制限があります。プレハブに含まれるゲームオブジェクトを再コピーすることはできず、プレハブに含まれるゲームオブジェクトを削除することはできません。ただし、ゲームオブジェクトを非アクティブ化することはできます。これは、ゲームオブジェクトの削除に代わる適切な方法です (プロパティのオーバーライドの 1 つと考えられます)。
Inspector ウィンドウでは、インスタンスのオーバーライドは 太字 の名前ラベルで表示され、左側に青い線が表示されます。新しいコンポーネントをプレハブインスタンスに追加すると、青い線がコンポーネント全体に伸びます。
また、インスペクターでは、加えられたコンポーネントと削除されたコンポーネントのアイコンにプラスとマイナスのバッジが表示され、追加されたゲームオブジェクトには Hierarchy のアイコンにプラスバッジが表示されます。
Hierarchy ウィンドウでは、オーバーライドされている値、または、デフォルト以外の値を持つプレハブインスタンスには、編集されたことを示すオーバーライド インジケーターがあります。Unity では Inspector ウィンドウのインスタンスのオーバーライドのラインと同じ外観で左マージンに青いラインで表示されます。詳細については、Hierarchy ウィンドウ を参照してください。
プレハブインスタンスのオーバーライドされたプロパティ値は、常にプレハブアセットの値よりも優先されます。つまり、プレハブアセットのプロパティを変更しても、そのプロパティがオーバーライドされているインスタンスには影響しません。
プレハブアセットを変更したときに、すべてのインスタンスが期待通りに更新されない場合は、そのプロパティがインスタンス上でオーバーライドされているかどうかを確認する必要があります。インスタンスのオーバーライドは、どうしても必要な場合にのみ使用することをお勧めします。なぜなら、プロジェクト全体を通してインスタンスのオーバーライドが非常に多い場合、プレハブアセットの変更が、すべてのインスタンスに反映されるかどうかを判断することが難しいからです。
プレハブインスタンスの 整列 (alignment) は特殊なケースで、他のプロパティとは異なる方法で処理されます。 整列 に関する値は、プレハブアセットからプレハブインスタンスに渡されることはありません。つまり、明示的なインスタンスのオーバーライドを行わなくても、プレハブアセットの整列とは常に異なります。具体的には、整列とはプレハブインスタンスのルート Transform の Position と Rotation プロパティを意味し、Rect Transform の場合は Width、Height、Margins、Anchors、Pivot プロパティも含みます。
これは複数のプレハブインスタンスが同じ位置と回転をとることを必要とすることは非常にまれであるからです。一般的には、プレハブインスタンスの位置と回転を変える必要があるため、Unity は上記の処理をプレハブのオーバーライドとして扱いません。
インスタンスのオーバーライドの値を表すデータは、それらを宣言したスクリプトが変更または削除されると、使用されなくなる場合があります。この場合は、使用されていないオーバーライドデータを削除 できます。