欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 【Unity/GameFramework】Start Force ——配置和表加载

【Unity/GameFramework】Start Force ——配置和表加载

2025/9/23 8:15:18 来源:https://blog.csdn.net/Siro_sama/article/details/143689864  浏览:    关键词:【Unity/GameFramework】Start Force ——配置和表加载

文章目录

    • 前言
    • 寻找流程
    • 具体加载
      • 配置加载:
        • 获取路径:
        • 添加到标志数组:
        • 进行实际加载:
      • 数据表加载:
        • 获取路径:
        • 添加到标志数组:
        • 进行实际加载:
      • 语言加载:
      • 字体加载:

前言

首先思考如果不使用框架,那么我们大概率会专门包装做一个Json或者XML工具类,然后实现序列化和反序列化的方法,利用第三方库来对指定路径的文件进行具体序列化反序列化操作。在外部使用时,传入路径,指定类型,即可返回需要的对象。如果是和GameFramework一样做配置使用,那么我们就不仅仅只是序列化出来再交出去。我们还可以做一个类专门存储这一类反序列化出来的配置对象。并指定在某个时机(如初始化,游戏资源加载流程)来让其将所有配置统统反序列化出来,并向外暴露接口来访问这些反序列化的配置对象。

如此一来,就十分接近GameFramework中的配置资源管理了。

寻找流程

首先,如果要加载一个文本文件,并将其反序列化,我们需要先知道其路径,并找到文件。为了快速调试GameFramework加载表的这一过程,我们直接将文件夹下的DataTables给改名成DataTable,路径一旦改变,涉及到加载表的过程就一定会失败,在Unity的错误堆栈上我们可以快速大致预览一下这个行为发生在什么地方。

中间可以注意到ProcedurePreload,即该操作发生在预加载阶段,进入该流程可知,该流程负责加载配置,数据表,语言,文本。这四个加载分别对应不同的组件。

具体加载

找到加载的函数后,按顺序分析一下:

配置加载:

获取路径:

框架在将文件内容反序列化时,只需要输入文件的路径,然后调用对应组件的ReadData方法即可。在Demo中文件的路径被集中存放在了AssetUtility静态类下,其提供了如GetConfigAsset,GetDataTableAsset的接口,只需要输入资源名称和是否从二进制文件读取即可,函数内部将自动拼接相对于Assets的完整的包含文件后缀名的路径并返回。

添加到标志数组:

该流程在Update中遍历标志数组,如果全部加载完毕,则转到下一个流程,因此每个加载操作都要添加到标志数组。该流程订阅了加载事件,每当加载结束后,就会将标志数组中对应的条目赋值为true。

进行实际加载:

通过GameEntry.Config.ReadData,传入文件路径,即可将配置文件读入组件中。这个全局配置里面存的就是场景ID


数据表加载:

数据表通常有多份,在Demo中,因为数量不多,直接将所有数据表名称做成一个数组放在了Preload流程中作为成员变量存在,在加载时遍历名称数组,依次加载。

获取路径:

同上

添加到标志数组:

同上

进行实际加载:

StarForce自己做了一个扩展方法LoadDataTable在DataTableExtension类中。看了一下,主要进行了以下操作:

  • 确保传入参数有效
  • 用“_”分割表名,取第一个部分,作为类型名用反射的方式获取DataRow的类型
  • 调用DataTableComponent的CreateDataTable方法,传入DataRow类型,接收返回值DataTableBase
  • 调用返回的DataTableBase的ReadData方法,将表的内容反序列化到表中

其实就是要根据指定的行类型来新建一个表对象,再往表里塞东西。这一点使用UE新建表时也是一样的。


语言加载:

为了支持本地化,GameFramework有专门的Localization组件,显示文字的时候要通过其获取文字。而对其的配置则是通过XML来配置。因此这个阶段也可以一并将语言文本也一起加载进来。

语言加载和第一个不同的就是是调用的GameEntry.Localization组件来ReadData,其他同上


字体加载:

语言加载完成后就是对应的字体加载。字体加载固定加载MainFont,并且是直接使用ResourceComponent来加载,使用callback来完成加载完的处理,该Demo还额外做了个UI的基类UIForm,内部有一个静态函数SetMainFont和静态字段Font s_MainFont,凡继承了该UI基类,在初始化时,所有Text组件的Font都会被替换成该s_MainFont。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词