u3d序列化(Serialization)

u3d序列化(Serialization) 本文将分享u3d序列化相关知识内容来源于官方AI和个人理解一.计算机领域的序列化概念序列化就是把内存中的对象转换成可存储或可传输的文本或二进制的过程。反过来把字节流恢复成内存对象叫做反序列化。序列化的核心目的是让内存中的复杂数据变为可存储或可传输。通俗点说序列化就是做数据处理让内存数据可存储可传输并且可逆。序列化物理上是把内存中可序列化的数据转换为已序列化的数据。【序列化到】的意思是将序列化后的内存写入文件的意思二.u3d的序列化概念Serializationis the automatic process of transforming data structures or GameObject states into a format that Unity can store and reconstruct later.序列化是将数据结构或游戏对象状态转换为 Unity 可存储并在以后可重构的格式的自动过程。序列化相关的3个概念序列化可序列化已序列化概念含义举例序列化过程把数据转为可存储格式保存场景时Unity把Transform的position写入文件可序列化状态字段被标记为可被序列化[SerializeField] private int health;已序列化结果数据已经被保存或加载过预制体中的值已经保存到.meta或.asset文件里参考脚本序列化三.序列化系统unity有自己的序列化系统这个系统解决什么情况可被序列化什么时候发生序列化。首先要理解的是序列化是对谁序列化类属性字段方法序列化的操作对象指的是可序列化的类中满足条件的字段(field)对类序列化的意思是对类中满足序列化条件的字段进行序列化四.可序列化的类4.1 UnityEngine.Object继承UnityEngine.Object的类均可序列化主要有MonoBehaviour和ScriptableObject4.2 自定义类(非继承UnityEngine.Object)非static的自定义类上方加上[Serializable]特性后可序列化五.可序列化字段的条件public或具有特性[SerializeField]非static非const非readonly六.可序列化字段的类型原始数据类型(int/float/double/bool/string等)枚举类型(32位或更小)u3d内置类型(Vector2/Vector3/Rect/Color等)[Serializable]修饰的struct继承Object的对象的引用上述类型的数组或ListT七.发生序列化的时机7.1 保存和加载保存和加载场景、资产、AssetBundles时会发生序列化7.2 修改Inspector在Inspector中修改值时unity会在内存中对新值序列化随后再反序列化更新inspector(无论是否保存场景)7.3 脚本挂载到对象将脚本A挂载到对象时A会发生一次序列化7.4 创建预制体时创建预制体B时B上的所有组件会发生一次序列化并写入磁盘7.5 预制体实例化预制体实例化时发生反序列化