问题的出现
起因是想在预制体的自定义脚本上保存一个List<vector3[]>类型数据,后发现再导入已保存的预制体时此数据并没有保存。
问题的解决
经查阅资料,发现是Unity不支持这种嵌套类型的序列化,后将vector3[]改为了一自定义类,并配合[Serializable]属性,最后达成目的。
Unity默认支持的序列化类型
Unity 中的序列化程序在实时游戏环境中运行。这对性能有重大影响。因此,Unity 中的序列化与其他编程环境中的序列化具有不同的行为。以下部分概述了如何在 Unity 中使用序列化。要使用字段序列化,必须确保其:
为 public
,或具有 SerializeField
属性
非 static
非 const
非 readonly
具有可序列化的 fieldtype
。(请参阅下面的可序列化的简单字段类型。)
可序列化的简单字段类型
具有 Serializable
属性的自定义非抽象、非泛型类
(请参阅下面的如何确保自定义类可序列化。)
具有 Serializable
属性的自定义结构
对从 UnityEngine.Object
派生的对象的引用
原始数据类型(int、float、double、bool、string
等)
枚举类型
某些 Unity 内置类型:Vector2、Vector3、Vector4、Rect、Quaternion、Matrix4x4、Color、Color32、LayerMask、AnimationCurve、Gradient、RectOffset、GUIStyle
可序列化的容器字段类型
可序列化的简单字段类型的数组
可序列化的简单字段类型的 List<T>
注意:Unity 不支持多级类型(多维数组、交错数组和嵌套容器类型)的序列化。如果要序列化这些类型,可使用两种方法:将嵌套类型包装在类或结构中,或使用序列化回调 ISerializationCallbackReceiver 执行自定义序列化。有关更多信息,请参阅自定义序列化的文档。
如何确保自定义类可序列化
确保其符合以下条件:
具有 Serializable 属性
非抽象
非静态
非泛型(但可继承自泛型类)
要确保自定义类或结构的字段被序列化,请参阅上面的如何确保脚本中的字段被序列化。