关于前篇文章“存储/读取工具”的补充

详见:


本来搁床上都快烂了,无聊翻了翻其他的Unity存储文章,又发现了很重要的事情。

之前我认为Unity的序列化不支持List<>(看到有篇文章是这样写的),但是又有一篇文章说Unity可以做到。新看到的文章说的更加详细具体,所以我选择相信后者。

另外,新文章中提到了Unity序列化关于多态的问题,如 基类 a = new 派生类()这种,序列化和反序列化后得到基类实例,除非基类继承UnityEngine.Object或者Monobehaviour。

我写的工具,按照原理是依赖于给定类的结构的,因此读取的时候要求给定其类型,并且显然是不支持用基类类型去读取派生类或者反过来了。读取时需要给定类型这点用起来可能不太方便,不过比Unity序列化那样还要给基类加上继承才能解决多态问题要好一点。

另外,Unity关于结构体的序列化做得很好,这点属于是薄纱我了。为了让写的工具能和Unity序列化有个区分,我就列个列表吧。

序列化小工具Unity序列化
基础数据类型大部分大部分
自定义结构体需要手动添加支持
引用类型支持支持
多态需要给明类型支持(11.2编辑)
标签不需要public或SerializeField
静态static包含不允许
常量包含不允许
枚举需要手动添加支持
内置Unity类型V2,V3,四元数,Color大部分
容器数组、高维数组、List<>、Stack<>等数组,List<>
字典不支持不支持
嵌套容器支持部分支持(11.2编辑)
委托不支持部分间接支持(封装成UnityEvent)
自定义接口
性能

综上,这个工具用起来可能比Unity序列化方便一点(主要是没有标签要求,不需要public或者打上标签),但是上限和性能远比不上Unity序列化。好处是能够尽量减少对源代码的影响(你可以随时换用其他存储方式而不需要改变源代码,不像Unity序列化一样到处需要打标签),并且简单易上手(调用方法,传入实例和文件名就能存储,传入类型和文件名就能读取)。

(11.2编辑)以上对Unity序列化的理解有误。当需要存/读档时,一般只能使用垃圾到不行的JsonUtility(如果使用plasticscm,也可以导入newtonsoft)。这东西甚至不支持可序列化类的数组,难用至极。所以此工具的唯一优点就在于使用方便了。

一句话就是:不需要动脑子,直接保存就行了,省去大部分烦恼。

© 版权声明
THE END
喜欢就点个赞吧
点赞0 分享
评论 共3条

请登录后发表评论

    • Acoloco的头像-水波萌Acoloco等级-LV4-水波萌作者0
    • Acoloco的头像-水波萌Acoloco等级-LV4-水波萌作者0
    • Acoloco的头像-水波萌Acoloco等级-LV4-水波萌作者0