Unityをしばらく使ってきたが、基本中の基本であるPrefabについて、よくわかったいなかったので再考してみました。
#Prefabかどうか
HierarchyのGameObject名が青色なものはPrefabとなります.
下図でいうと下のCubeがそれになります.
ちょっと色がわかりにくい場合はHierarchyからGameObjectを選択して、Inspectorに下記があればPrefabとなります.
#作成
HierarchyにあるGameObjectをProjectにD&DするとPrefabが作成されます.
HierarchyにあるGameObjectはPrefabのインスタンスとなります.
ProjectにあるものはPrefabの本体となります.
インスタンスは本体の複製のようなものであり、一つの本体に対し複数のインスタンスをつくることができます.
以降、インスタンスと本体と明確に切り分けて説明します.
#本体の編集
本体をProjectで選択して、Inspectorを編集すると全てのインスタンスが本体で編集した内容になります. 下図は同じ本体のPrefabで作られたインスタンスです
Inspectorは下記. ここのCubeのMeshを変更してみます.
変わりました.
#インスタンスの編集による影響
今度はインスタンスを編集してみます。3つcubeの下に編集用インスタンスを用意しました.
こいつだけHierarchyから編集してみます. meshを変更します.
編集してみました.
ここで再度、本体をProjectで選択して、Inspectorを編集するとどうなるでしょうか?
meshをsphereにする変更です.
先ほどだと、全てのインスタンスが本体で編集した内容になりました.
なんと、インスタンスを編集したやつは反映されないのです.
#インスタンスの編集による影響2
改めて本体をProjectで選択して、Inspectorを編集します.
今度はMaterialです.
この場合は、全てのインスタンスが本体で編集した内容になりました.
インスタンスの編集で変えたもの(Component単位?)は、本体の変更を無視するようです.
#Select、Revert、Apply
HierarchyからGameObjectを選択すると、Inspectorに下記の3ボタンが表示されます.
###Select
Projectに飛んで本体を選択したような状態になります.
###Revert
インスタンスで編集した内容を全てリセットして本体を同じにします.
###Apply
インスタンスで編集した内容を本体に反映させます.