14 March 2018
版权声明:本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名elloop(包含链接)

前言

序列化/反序列化是unity工作的核心,本文聊聊unity在什么情况下会进行序列化/反序列化操作。

关于unity的序列化,Unity Blog有两篇文章讲的比较好了:

Unity Serialization

Serialization in Unity

在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

2. Inspector里显示Object的时候


在这里也能看到这篇文章:github博客, CSDN博客, 欢迎访问



分享到