Making Tera

たまに書く不定期ブログ

UnityのPrefabについて

Unityで同じオブジェクトを扱う場合は「Prefab」を利用する
なにかと混乱しやすい部分だったのでPrefabを扱い方を図解してみた



【作成方法】
もとになるデータの作成方法はヒエラルキ窓からプロジェクト窓にドラッグするだけ
f:id:makingT:20200622235207p:plain



【複製方法】
さっきの逆にドラッグするだけ
f:id:makingT:20200622235531p:plain

すっごい簡単
Prefabかどうかは文字の色でわかる(青色がPrefabを配置したもの)
f:id:makingT:20200623000101p:plain



配置後に、もとの保存したデータ(作成したPrefab)の中身を変更するとどうなるか?
↓↓↓↓↓↓↓↓
配置したすべてのデータが書き換えられる(開いていないシーンのデータであっても)

超便利!!めでたしめでたし



Prefab紹介記事は大体ここで終わっていて深く書いていないことが多いので
もう少し掘り下げてみる



まずデータの構造を見てみる
先ほどのCubeの場合4つのデータ(コンポーネント)で成り立っている
f:id:makingT:20200623000301p:plain

このデータのABCDがコピーされて配置されている状態を図解すると以下のようになる
f:id:makingT:20200623005258p:plain



ここで、コピー先のデータを変更してみたもののやっぱり戻したいって時
インスペクタ窓のOverridesをクリックしてRevertをクリックする
f:id:makingT:20200623010435p:plain

f:id:makingT:20200623010659p:plain



逆に、データの変更を元のPrefabに適用し、コピー先にも反映させたい場合はApplyをクリックする(コピー先のことをインスタンスと呼びます)
f:id:makingT:20200623010837p:plain

f:id:makingT:20200623011209p:plain




最後に一番混乱するところなのですが、
通常「Prefabを直接変更」もしくは「ApplyをクリックしてPrefabを変更」した場合コピー先はすべて変更されます
し か し
「配置後にデータを変更していた部分だけは Prefabの変更は無視」されます!
f:id:makingT:20200623012152p:plain
・・・・・・・・・・・・・・・・・・・・・・・・
f:id:makingT:20200623020814p:plain



Prefabを変更した際に何が共有されて何が変更されないのか?がわからなくなったら文字の太さを確認しましょう
f:id:makingT:20200623013242p:plain
この例だと
PositionのXYZ座標
RotationのXYZ回転情報
BoxコライダのSizeのX情報である5555
太字です
上記のデータは元のPrefabが変更されたとしても値が維持されます
(それ以外のデータはすべてPrefabと同値になります)



複数人でプロジェクトを触っていて、
「いつの間にかデータが壊れている」
なんてことが減れば幸いです!




 ※1 Prefabの一番親の位置と回転情報は強制的に太字になります
 ※2 マテリアルのようなプロジェクトファイルに作成されるデータは独立したデータであり マテリアルを参照するコンポーネントはあくまで参照先を記載した情報です よってPrefabの参照先の変更とプロジェクトデータの変更は混同してはいけません