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

embedded/2024/11/14 3:55:12/

文章目录

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

前言

首先思考如果不使用框架,那么我们大概率会专门包装做一个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。


http://www.ppmy.cn/embedded/137400.html

相关文章

java操作ES(一)RestHighLevelClient(2)集成与demo

一、集成方法 1、pom依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.x.x</version> <!-- 请使用与你的Elasticsearch版本相匹配的版…

打响反对人工智能的第一枪

序言&#xff1a;人工智能的讨论不能只有一片叫好的声音&#xff0c;一味的追捧反而可能隐藏巨大的危机。因此&#xff0c;必须有反对的声音&#xff0c;且越强烈越能激发深入思考。本篇文章的作者就以犀利的视角&#xff0c;漂亮地打响了反对人工智能应用的第一枪。 我以前一…

论文阅读《Structure-from-Motion Revisited》

摘要 增量式地运动结构恢复是从无序图像集合中进行三维重建的一个普遍策略。虽然增量式地重建系统在各个方面上都取得了巨大的进步&#xff0c;但鲁棒性、准确性、完整度和尺度仍然是构建真正通用管道的关键问题。我们提出了一种新的运动结构恢复技术&#xff0c;它改进了目前…

矩阵函数及计算

矩阵函数 下面的式子一定要记住&#xff01;&#xff01; 例题&#xff1a; 求出Jordan形求出可逆P和P根据给出的公式&#xff0c;计算每一项&#xff0c;然后带入J中的元素&#xff0c;组成新的乘法式&#xff0c;计算出最后结果。 考点 主要是会计算函数矩阵矩阵函数。 参…

传奇996_19——龙岭总结

功能&#xff1a; 切割 切割属性&#xff1a; 即人物属性&#xff0c;可以设置临时属性或者永久属性&#xff0c;龙岭使用的是临时属性&#xff0c;所谓临时就是存在有效期&#xff0c;龙岭设置的有效期是123456789秒&#xff0c;即1428.89802天。 龙岭写法&#xff08;倒叙…

漫谈分布式唯一ID

文章目录 本系列前言UUIDDB自增主键Redis incr命令号段模式雪花算法 本系列 漫谈分布式唯一ID&#xff08;本文&#xff09;分布式唯一ID生成&#xff08;二&#xff09;&#xff1a;leaf分布式唯一ID生成&#xff08;三&#xff09;&#xff1a;uid-generator分布式唯一ID生成…

postgres+timescaledb--离线安装,centos7.9

操作系统是centos7.9&#xff0c;使用的hper-V,安装的虚拟机环境&#xff0c;安装好操作系统之后&#xff0c;让系统不连外网后直接按下方操作安装。 方式1&#xff0c;使用压缩包&#xff0c;复杂一点。&#xff08;第一种方式暂时没有安装timescaledb&#xff09; 装备安装…

全网最全最新最细的MYSQL5.7下载安装图文教程

一、MYSQL两种安装包格式 MySQL安装文件分为两种&#xff0c;一种是msi格式的&#xff0c;一种是zip格式的。zip格式相当于绿色版&#xff0c;不需要安装&#xff0c;只需解压缩之后就可以使用了&#xff0c;但是要进行配置。msi格式是安装版。 二、MYSQL官网下载 1.官网地址…