标签:new 没有 图片 需要 字符 构建 文件 pre 指针
unity的序列化在unity的开发中起着举重足轻的地位,许多核心的功能都是基于序列化和反序列化来实现的。序列化简单来讲就是就是将我们所要保存的数据进行二进制存储,然后当我们需要的时候,在读取二进制文件,反序列化回来。下面是一些常用的序列化的例子:
可序列化对象
可采用unity编辑器的序列化类ScriptableObject,当我们继承这个基类,我们就可以调用unity给我们的接口进行序列化了。具体的序列化接口可以到unity的官方接口文档上查看使用方法,这里不具体介绍。
下面来讲讲具体开发过程中个人遇到的坑
Serialization depth limit 7 exceeded at 'XNodeScripts::ConfigNode.nodeList'. There may be an object composition cycle in one or more of your serialized classes.
Serialization hierarchy:
8: XNodeScripts::ConfigNode.nodeList
7: XNodeScripts::ConfigNode.nodeList
6: XNodeScripts::ConfigNode.nodeList
5: XNodeScripts::ConfigNode.nodeList
4: XNodeScripts::ConfigNode.nodeList
3: XNodeScripts::ConfigNode.nodeList
2: XNodeScripts::ConfigNode.nodeList
1: XNodeScripts::ConfigNode.nodeList
0: XNodeScripts::SelectMsgNode.rootNode
这里的报错信息提示我们我在创建序列化数据nodeList的时候,可能是在这个nodeList里面有循环的序列化。这边我们发现unity还提示我们序列化的深度为7。我在网上查到,原来我们的子系统是构建在序列化系统之上的,所以如果放任其死循环的序列化的话,当一个非常大的序列化流将导致整个系统崩溃。为了避免这样的情况,unity采用了一个深度为7的阙值,及循环序列化为空的子集最多只能为7个。我们在进行序列化的创建的时候,一个非常常见的错误就是通过序列化构造一个类似树状结构的数据结构,在我们声明的序列化类里面,如果还有包含本身的对象,类似于
[Serializable]
public class DepthClass : ScriptableObject
{
public List<DepthClass> depthObjects;
}
上诉的这种序列化结构,就会产生我之前所示的系统报错。有效的避免空值的序列化,对于树状结构包括字典的存储,我采用的是List
标签:new 没有 图片 需要 字符 构建 文件 pre 指针
原文地址:https://www.cnblogs.com/fzuljz/p/11168131.html