前言
序列化/反序列化是unity工作的核心,本文聊聊unity在什么情况下会进行序列化/反序列化操作。
关于unity的序列化,Unity Blog有两篇文章讲的比较好了:
在1月份刚release的新版本2019.3,序列化做了优化,支持null、多态、引用(SerializeReference)
这里聊点其他的, 比如什么情况下会发生序列化,怎么写代码来验证上面两篇文章说的是事实?
unity 编辑器下常见的序列化情形
1. 编辑prefab
从编辑一个值,到自动保存prefab,会调用4次反序列化。 调用路径分别是:
(省略了UnityEditor命名空间前缀)
第1次是在绘制Inspector窗口的时候
-
InspectorWindow.OnGUI -> .InspectorWindow.DrawEditors -> … -> InspectorWindow.DoOnInspectorGUI -> SerializedObject.ApplyModifiedProperties
第2次是在自动保存prefab的时候
EditorApplication.Internal_CallUpdateFunctions
-> PrefabImporterEditor.Update -> PrefabImporterEditor.SaveDirtyPrefabAssets -> PrefabUtility.SavePrefabAsset
第3, 4次都是在保存prefab后的收尾工作时
-
EditorApplication.Internal_CallUpdateFunctions
-> PrefabImporterEditor.Update -> PrefabImporterEditor.SaveDirtyPrefabAssets -> AssetDatabase.StopAssetEditing