%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 0}
m_IsPrefabParent: 1
增加 2个大的字段 GameObject:
和 Transform:
GameObject
字段的 m_Component
中有 Transform
的 id
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 4
m_Component:
- 4: {fileID: 450296}
同时, prefab
字段的 m_ObjectHideFlags:
0->1 , m_RootGameObject:
{fileID: 0 -> game object ID
Prefab:
m_ObjectHideFlags: 1
...
m_RootGameObject: {fileID: 101870}
增加了一个 MonoBehaviour:
字段,
同时 GameObject
字段的 m_Component
增加了 MonoBehaviour
的 id
m_Component:
- 4: {fileID: 450296}
- 114: {fileID: 11481900}
无变化
MonoBehaviour 中 立刻出现了 aaa的修改:
MonoBehaviour:
...
aaa: 5
同时, Prefab 中的 m_Modification: -> m_Modifications:
也记录了修改:
m_Modifications:
- target: {fileID: 0}
propertyPath: aaa
value: 5
objectReference: {fileID: 0}
无变化
MonoBehaviour 中:
MonoBehaviour:
...
aaa: 5
bbb: {fileID: 101870}
Prefab 中:
m_Modifications:
- target: {fileID: 0}
propertyPath: aaa
value: 5
objectReference: {fileID: 0}
- target: {fileID: 0}
propertyPath: bbb
value:
objectReference: {fileID: 101870}
ccc size 设为 1 后
MonoBehaviour 中 增加了 :
ccc:
- {fileID: 0}
Prefab: 也增加了 , 纪录 ccc size 的信息
m_Modifications:
...
- target: {fileID: 0}
propertyPath: ccc.Array.size
value: 1
objectReference: {fileID: 0}
MonoBehaviour 中:
ccc:
- {fileID: 101870}
Prefab: 增加了 :
- target: {fileID: 0}
propertyPath: ccc.Array.data[0]
value:
objectReference: {fileID: 101870}
MonoBehaviour: 中
ccc: []
prefab中:
- target: {fileID: 0}
propertyPath: ccc.Array.size
value: 1 -> 0
但是
- target: {fileID: 0}
propertyPath: ccc.Array.data[0]
value:
objectReference: {fileID: 101870}
并不会消失, 也不会改变,
这时候,size 再改为1, ccc.Array.data[0] 的信息还是不会发生任何改变, 所以 prefab 中的 m_Modifications 中 array 元素信息,可能是过期的,或者无用的。
MonoBehaviour:
ccc:
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
Prefab:
m_Modifications:
- target: {fileID: 0}
propertyPath: ccc.Array.size
value: 5
objectReference: {fileID: 0}
prefab 不发生变化,仅当 prefab 中的任意 property 发生变化,并保存后,才会同步更新所有的信息。
脚本外部的修改并不会导致 prefab 发生修改, 仅当 prefab 本身发生编辑事件后,才会同步更新 外部脚本的修改到 prefab.
随意,unity 处理 prefab, 并不是完全根据prefab 文件的描述,而是需要结合外部脚本的修改情况,做相应修改。