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
这样子做也是一种方法,不过会造成一个问题-----编辑器的错误数量会
暴增
文章图片
因为这样子做破坏了原来的数据结构,会导致大量的代码修改。但是这样子做,是代码运行效率最好的方法,但是工程复杂的话改动会很麻烦。
方法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的值也会降低效率,但是,这是我想到最最最最偷懒的办法,改动代码最小。
推荐阅读
- 游戏IP(立足于玩家情感的粉丝经济)
- 人生游戏--是游戏,还是人生()
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- (小说)月流水几亿的火爆游戏养成记
- 游戏治愈了我无聊之症
- 生活与游戏日记(第182篇)(〔成长瞬间〕关注解决问题2019.10)
- 我妈让我不要玩游戏多做点事
- 牛逼!C++开发的穿越丛林真人游戏,游戏未上线就有百万人气
- 《暴走江湖》-单机休闲挂机游戏
- 游戏|2022年如何学习前端前沿技术,破卷而出()