最近在把之前自己写的/用的舒服的脚手架抽出来,做通用模块。花一天时间写了一下Unity中数据表的读取和数据持久化操作。
关于数据导入其实有很多技术路线可以用。大多数都是以excel为起点(策划友好的),unity可读/可动态加载的格式(json,xml,csv,lua,assetdatabase等)为终点的 序列化/反序列化 处理方案。这部分的编码没有什么技术含量,主要的工作量在于处理C#中对于对象类型的强要求。如果用lua实现的话工作量不超两个小时,毕竟万物基于table。
目前V0.1版本采用的技术路线是,excel由导表工具(第三方开源)转换为Josn(KV,Array)并自动生成对应C#类。数据导入模块处理所有C#数据类的数据导入和初始化,使其在整个游戏生命周期中.Net层随时可读。且json以AB包的形式动态加载,达成数据的热更。
综上,该模块的核心内容可以拆为三部分,载入到scene中作为单例常驻提供读取数据能力的DataTableManager,处理Json加载和类型绑定的DataTableCore静态类,处理PC Runtime文件索引及加密的IOHelper静态类,以及负责Json数据序列化/反序列化的JsonHelper。其实现阶段后两者可以融合起来,但是为了后期更好的解耦,方便Helper适应不同文件格式的平行堆量,故此拆分。
其中的关键的在于对导入的不同格式json文件的支持:使用Newtonsoft.Json.Linq库来支持Jarray和Jobject的序列化与反序列化,并通过C#反射绑定对应Class,并将其分类存入Dict和Array的List中,供运行时调取。


当前还没做AB包载入,稍后补全。后期会通过资源管理模块实现对于全局资源的统一管理和优化。
------------------------------------------------------------------------- -----2022.2.12 下午16:14 于上海漕河泾
文章评论