【初心者Unity】プレハブの使い方②(編集)
前回の記事では、プレハブの作成からプレハブを元にしたゲームオブジェクトの複製まで解説しました。
本記事では、プレハブの編集方法について解説していきます。
プレハブを編集することで、そのプレハブを元に複製した全てのゲームオブジェクトに同様の変更が適用されます。
なお、本記事の内容は2018.3以降のバージョンに対応しています。
それ以前のバージョンでは操作画面が異なりますのでご注意ください。
また、説明のため前回の記事で作成したプレハブを使用します。
一緒に手を動かして確認したい方は記事を参照してプレハブの作成を行ってください。
1.プレハブの編集
通常の画面では、シーン内に配置されたゲームオブジェクトを編集することはできますが、プレハブを編集することはできません。
プレハブを編集するためには専用の画面に切り替える必要があります。
プロジェクトビューで編集したいプレハブを選択します。
インスペクタービューの表示が以下のように切り替わるので、Open Prefabをクリックします。
すると、ヒエラルキービューとシーンビューの表示が切り替わります。
この状態をプレハブモードと言います。プレハブを編集する専用の画面です。
プレハブモードでは、通常のゲームオブジェクトの編集と同様の操作でプレハブを編集できます。
今回はインスペクタービューでプレハブのサイズを変更してみましょう。
プレハブの編集が完了したら、ヒエラルキービュー上部の「<」か、シーンビュー上部の「Scenes」をクリックしてください。
通常のゲームオブジェクト編集画面に戻ります。
また、プレハブから複製した全てのゲームオブジェクトのサイズが変更されていることが確認できると思います。
2.インスタンスの編集
プレハブから複製したインスタンスは通常のゲームオブジェクトと同様の操作で編集することができます。
ただし、インスタンスの編集については、いくつか注意点があります。
・あるインスタンスを編集したとき、その編集内容は他のインスタンスに反映されない
・あるインスタンスに適用されているマテリアルの中身を編集した場合は、他のインスタンスにも編集内容が反映される
・あるインスタンスを編集したとき、変更した項目がプレハブの影響を受けなくなる
順番に見ていきましょう。
なお説明のため、Sphereプレハブからインスタンスを2つ(InstanceA・InstanceB)作成した以下の構成を使用します。
・あるインスタンスを編集したとき、その編集内容は他のインスタンスに反映されない
InstanceAのサイズを変更してみて下さい。
InstanceBのサイズには影響しないことが確認できます。
・あるインスタンスに適用されているマテリアルの中身を編集した場合は、他のインスタンスにも編集内容が反映される
上記の項目の例外事項です。
InstanceAに適用されているマテリアルの色を変更してみます。
するとInstanceBの色も変更されることが確認できます。
これは各インスタンスがひとつのマテリアルを共有しているためです。
・あるインスタンスを編集したとき、変更した項目がプレハブの影響を受けなくなる
先ほどInstanceAのサイズを変更しましたが、その状態で大元のプレハブのサイズを変更してみましょう。
サイズ変更はInstanceBにのみ適用されます。
このようにインスタンス独自で設定値を変更した場合、その項目に関してはプレハブの影響を受けない仕様になっています。
3.インスタンスの編集内容をプレハブに適用する
あるインスタンスで変更した内容が他のインスタンスに影響しないことは先ほど確認しましたが、それに逆らって、あるインスタンスで編集した内容を他のオブジェクトにも適用したい場合はあるかと思います。
わざわざそんなことをせずとも大元のプレハブを編集すれば良いようにも思いますが、例えば、シーンビューの中で他のオブジェクトと比較しつつサイズを調整したい場合などにニーズはあります。
インスペクタービュー上部、Prefabという項目内のOverridesをクリックします。
ここで、Apply Allをクリックすることで、当該インスタンスの設定内容が他のインスタンスに適用されます
(正確に言えば、大元のプレハブの設定に上書きコピーされます)。
一方、Revert Allをクリックすることで、全ての設定項目をプレハブの設定に戻すことができます(Revert = もとに戻す)。
4.プレハブとの連携を解除する
プレハブから複製したインスタンスをプレハブの影響下から独立させることができます。
ヒエラルキービュー上で独立させたいインスタンスを右クリックし、Unpack Prefabを選択します。
これでプレハブとの関係が解除できました。
以降、このゲームオブジェクトに関しては、プレハブの編集内容が反映されなくなります。
アイコンの色もプレハブの複製物を表す水色から白色に変化していることが確認できるかと思います。