u3d运行游戏scriptableobject数据就丢失/u3d 7层深度序列化问题的一种解决方法

最近写一个编辑器,自己写了一套数据解析和编辑器界面,但是每次运行一下游戏然后用编辑器重新读取就会发现部分数据丢失。当时的心情u3d运行游戏scriptableobject数据就丢失/u3d 7层深度序列化问题的一种解决方法
文章图片
然后我发现。u3d有一个警告
Serialization depth limit 7 exceeded at ‘SerAction.script’. …
原来是因为的数据里面,序列化的层级超过了7级,凡是超过了7级的数据。一旦运行游戏,内存一清(不知道咋描述,反正这个意思)7级以上层级的数据就会丢失。
解决方法 既然知道了原因,那么大家自然而然就想到了办法,没错,把7层级以上的数据放到7层级以内。 方法1
比如
0L
1L
2L
3L
4L
5L
6L
7
假设这8个套娃(手动滑稽),如果直接把第8级的结构放到0层级的的话。
0L 7
1L
2L
3L
4L
5L
6L
这样子做也是一种方法,不过会造成一个问题-----编辑器的错误数量会
暴增u3d运行游戏scriptableobject数据就丢失/u3d 7层深度序列化问题的一种解决方法
文章图片

因为这样子做破坏了原来的数据结构,会导致大量的代码修改。但是这样子做,是代码运行效率最好的方法,但是工程复杂的话改动会很麻烦。
方法2
【u3d运行游戏scriptableobject数据就丢失/u3d 7层深度序列化问题的一种解决方法】0L 7V
1L
2L
3L
4L
5L
6L
7
我们保持原有的数据结构不变,单独在0层级的数据地方,放第8层级的数据变量。对,你想的没错,我们保持结构不变,当要储存的时候,单独把8层的值放到0层的7V中储存。7V是算0层级,所以他的值不会丢失。
当要用到该数据,即读取数据时,把7V的值放回到原结构的7上。储存时,把7的数据更新到7V上。如果有更高的层级也是类似的思想,不过麻烦一些。这个方法会占用更多的内存,并且在原有的代码基础上加上放回和读取7V的值也会降低效率,但是,这是我想到最最最最偷懒的办法,改动代码最小。

    推荐阅读