logo好方法网

游戏引擎资源处理方法、电子设备及计算机可读存储介质


技术摘要:
本申请涉及数据处理技术领域,公开了一种游戏引擎资源处理方法、电子设备及计算机可读存储介质,其中,游戏引擎资源处理方法包括:通过游戏引擎的第一预设接口接收针对任一运行平台的任一游戏资源的获取请求;接着基于获取请求,通过游戏引擎的资源管理系统获取任一游  全部
背景技术:
本申请的目的旨在至少能解决上述的技术缺陷之一,特提出以下技术方案: 第一方面,提供了一种游戏引擎资源处理方法,包括: 通过游戏引擎的第一预设接口接收针对任一运行平台的任一游戏资源的获取请 求; 基于获取请求,通过游戏引擎的资源管理系统获取任一游戏资源,资源管理系统 包括第一预设接口、资源、资源管理器、资源加载器及资源注册表; 返回获取到的任一游戏资源。 具体地,资源管理器用于缓存已有游戏资源、处理游戏资源释放及根据游戏资源 类型确定游戏资源释放策略; 资源加载器用于基于管道化的加载流水线加载各种游戏资源; 资源注册表用于存储游戏资源的相关信息,相关信息包括标识信息、哈希值、资源 路径到实际路径的转换信息中的至少一项。 进一步地,资源加载器包括加载队列模块、循环引用检测模块、流水线调度模块、 加载流水线模块、资源依赖解析模块及错误处理模块; 加载队列模块用于存储各个正在加载的游戏资源项和/或待加载的游戏资源项; 循环引用检测模块用于检测在各个游戏资源之间的依赖关系是否存在循环依赖, 并当存在循环依赖时对该循环依赖进行断裂处理; 流水线调度模块用于执行以下至少一项:控制各个流水线的拼接、控制管道之间 的数据流入与数据流出、调度各个管道的并行处理、调度各个管道的回调处理; 加载流水线模块用于进行流水线的动态拼接、删除、增加及移位中的至少一项处 理; 资源依赖解析模块用于在反序列化后,解析游戏资源依赖的相关资源,并加载解 析得到的相关资源; 错误处理模块用于记录游戏资源的加载过程中的异常信息,并返回异常信息。 进一步地,加载流水线模块包括资源标识解析管道、资源MD5解析管道、平台适配 管道、资源下载管道及资源加载管道; 资源标识解析管道用于将游戏资源标识信息转化为游戏资源的全局唯一标识信 息,并将该全局唯一标识信息转化为游戏资源的实际路径; 资源MD5解析管道用于通过将游戏资源的哈希值添加到该游戏资源的实际路径 中,获取该游戏资源的版本路径; 平台适配管道用于根据不同游戏运行平台进行相应的应用程序编程接口API的匹 5 CN 111569431 A 说 明 书 2/16 页 配; 资源下载管道用于根据游戏资源的类型确定对应的用于进行游戏资源下载的下 载器; 资源加载管道用于根据游戏资源的类型确定对应的用于进行游戏资源加载的加 载器。 进一步地,资源管理器包括资源策略模块、资源获取模块、资源缓存模块及资源释 放模块; 其中,资源策略模块用于针对不同游戏资源确定不同的管理策略; 资源获取模块用于通过查询资源缓存模块确定是否存在游戏资源,并当存在时返 回该游戏资源,当不存在时通过资源加载器进行该游戏资源的加载; 资源缓存模块用于对游戏中用到的所有资源进行缓存,以使得复用公共游戏资 源; 资源释放模块用于根据用户选择,确定对游戏资源进行释放或者对游戏资源依赖 的相关资源进行释放。 进一步地,资源注册表包括资源路径处理模块、资源信息模块、资源标识映射表模 块及资源MD5映射表模块; 资源路径处理模块用于将游戏资源的全局唯一标识信息转化为游戏资源的路径 信息; 资源信息模块用于存储以下至少一项:游戏资源的类型、游戏资源的相对路径、游 戏资源的名称、游戏资源的标识信息、指示游戏资源是否为子资源的标识; 资源标识映射表模块用于将游戏资源的标识信息与游戏资源的全局唯一标识信 息进行映射; 资源MD5映射表模块用于将游戏资源的全局唯一标识信息与游戏资源的哈希值进 行映射,以使得查询游戏资源的版本信息。 进一步地,通过资源管理系统获取任一游戏资源,包括: 步骤a、通过第一预设接口调用资源注册表的第二预设接口,并通过资源注册表查 询任一游戏资源的相关信息,以获取任一游戏资源的标识信息; 步骤b、根据任一游戏资源的标识信息,调用资源管理器的第三预设接口,并通过 资源管理器获取任一游戏资源。 进一步地,通过资源管理器获取任一游戏资源,包括: 查询资源管理器的资源缓存模块中缓存的游戏资源,并确定缓存的游戏资源中是 否包括任一游戏资源; 如果包括任一游戏资源,则返回任一游戏资源; 如果不包括任一游戏资源,则通过资源管理器调用资源加载器的第四预设接口, 并通过资源加载器加载任一游戏资源。 进一步地,通过资源加载器加载任一游戏资源,包括: 判断加载队列模块是否正在加载任一游戏资源; 如果正在加载任一游戏资源,则注册相应的回调函数,并通过回调函数返回加载 完成的任一游戏资源; 6 CN 111569431 A 说 明 书 3/16 页 如果未在加载任一游戏资源,则在加载队列模块中增加用于加载任一游戏资源的 资源项,并基于资源项对任一游戏资源进行加载处理。 进一步地,基于资源项对任一游戏资源进行加载处理,包括: 通过循环引用检测模块检测资源项是否存在循环依赖; 若存在循环依赖,则对该循环依赖进行断裂处理,并加载所述任一游戏资源; 若不存在循环依赖,则通过流水线调度模块对资源项进行流水线的调度,以使得 任一游戏资源的相关数据流入调度后的流水线,并通过加载流水线模块基于调度后的流水 线加载任一游戏资源。 进一步地,通过加载流水线模块基于调度后的流水线加载任一游戏资源,包括: 通过资源标识解析管道调用第二预设接口,将任一游戏资源的标识信息转化为任 一游戏资源的实际路径; 通过资源MD5解析管道调用第二预设接口,将任一游戏资源的哈希值添加到实际 路径中,得到任一游戏资源的版本路径; 基于版本路径,通过平台适配管道确定适配于任一运行平台的API; 基于API,通过资源下载管道根据任一游戏资源的类型,确定下载任一游戏资源的 下载器,并通过下载器下载任一游戏资源; 基于API,通过资源下载管道根据任一游戏资源的类型,确定加载任一游戏资源的 加载器,并通过加载器加载任一游戏资源。 进一步地,在通过加载流水线模块基于调度后的流水线加载任一游戏资源之后, 还包括: 通过资源依赖解析模块对任一游戏资源依赖的相关资源进行解析,并根据解析结 果判断任一游戏资源是否存在依赖; 如果存在依赖,则循环执行步骤b; 如果不存在依赖,则调用资源管理器的第三预设接口,并通过资源管理器的资源 策略模块确定任一游戏资源的管理策略,同时通过资源管理器的资源缓存模块缓存任一游 戏资源,以使得返回任一游戏资源。 第二方面,提供了一种游戏引擎资源处理装置,包括: 接收模块,用于通过游戏引擎的第一预设接口接收针对任一运行平台的任一游戏 资源的获取请求; 获取模块,用于基于获取请求,通过游戏引擎的资源管理系统获取任一游戏资源, 资源管理系统包括第一预设接口、资源、资源管理器、资源加载器及资源注册表中的至少一 项; 返回模块,用于返回获取到的任一游戏资源。 具体地,资源管理器用于缓存已有游戏资源、处理游戏资源释放及根据游戏资源 类型确定游戏资源释放策略; 资源加载器用于基于管道化的加载流水线加载各种游戏资源; 资源注册表用于存储游戏资源的相关信息,相关信息包括标识信息、哈希值、资源 路径到实际路径的转换信息。 进一步地,资源加载器包括加载队列模块、循环引用检测模块、流水线调度模块、 7 CN 111569431 A 说 明 书 4/16 页 加载流水线模块、资源依赖解析模块及错误处理模块; 加载队列模块用于存储各个正在加载的游戏资源项和/或待加载的游戏资源项; 循环引用检测模块用于检测在各个游戏资源之间的依赖关系是否存在循环依赖, 并当存在循环依赖时对该循环依赖进行断裂处理; 流水线调度模块用于执行以下至少一项:控制各个流水线的拼接、控制管道之间 的数据流入与数据流出、调度各个管道的并行处理、调度各个管道的回调处理; 加载流水线模块用于进行流水线的动态拼接、删除、增加及移位中的至少一项处 理; 资源依赖解析模块用于在反序列化后,解析游戏资源依赖的相关资源,并加载解 析得到的相关资源; 错误处理模块用于记录游戏资源的加载过程中的异常信息,并返回异常信息。 进一步地,加载流水线模块包括资源标识解析管道、资源MD5解析管道、平台适配 管道、资源下载管道及资源加载管道; 资源标识解析管道用于将游戏资源标识信息转化为游戏资源的全局唯一标识信 息,并将该全局唯一标识信息转化为游戏资源的实际路径; 资源MD5解析管道用于通过将游戏资源的哈希值添加到该游戏资源的实际路径 中,获取该游戏资源的版本路径; 平台适配管道用于根据不同游戏运行平台进行相应的应用程序编程接口API的匹 配; 资源下载管道用于根据游戏资源的类型确定对应的用于进行游戏资源下载的下 载器; 资源加载管道用于根据游戏资源的类型确定对应的用于进行游戏资源加载的加 载器。 进一步地,资源管理器包括资源策略模块、资源获取模块、资源缓存模块及资源释 放模块; 其中,资源策略模块用于针对不同游戏资源确定不同的管理策略; 资源获取模块用于通过查询资源缓存模块确定是否存在游戏资源,并当存在时返 回该游戏资源,当不存在时通过资源加载器进行该游戏资源的加载; 资源缓存模块用于对游戏中用到的所有资源进行缓存,以使得复用公共游戏资 源; 资源释放模块用于根据用户选择,确定对游戏资源进行释放或者对游戏资源依赖 的相关资源进行释放。 进一步地,资源注册表包括资源路径处理模块、资源信息模块、资源标识映射表模 块及资源MD5映射表模块; 资源路径处理模块用于将游戏资源的全局唯一标识信息转化为游戏资源的路径 信息; 资源信息模块用于存储以下至少一项:游戏资源的类型、游戏资源的相对路径、游 戏资源的名称、游戏资源的标识信息、指示游戏资源是否为子资源的标识; 资源标识映射表模块用于将游戏资源的标识信息与游戏资源的全局唯一标识信 8 CN 111569431 A 说 明 书 5/16 页 息进行映射; 资源MD5映射表模块用于将游戏资源的全局唯一标识信息与游戏资源的哈希值进 行映射,以使得查询游戏资源的版本信息。 进一步地,获取模块包括第一处理子模块与第二处理子模块; 第一处理子模块,用于通过第一预设接口调用资源注册表的第二预设接口,并通 过资源注册表查询任一游戏资源的相关信息,以获取任一游戏资源的标识信息; 第二处理子模块,用于根据任一游戏资源的标识信息,调用资源管理器的第三预 设接口,并通过资源管理器获取任一游戏资源。 进一步地,第二处理子模块包括查询单元与第一结果处理单元; 查询单元,用于查询资源管理器的资源缓存模块中缓存的游戏资源,并确定缓存 的游戏资源中是否包括任一游戏资源; 第一结果处理单元,用于当包括任一游戏资源时,返回任一游戏资源;以及用于当 不包括任一游戏资源时,通过资源管理器调用资源加载器的第四预设接口,并通过资源加 载器加载任一游戏资源。 进一步地,第一结果处理单元具体用于判断加载队列模块是否正在加载任一游戏 资源;以及用于当正在加载任一游戏资源时,注册相应的回调函数,并通过回调函数返回加 载完成的任一游戏资源;以及用于当未在加载任一游戏资源时,在加载队列模块中增加用 于加载任一游戏资源的资源项,并基于资源项对任一游戏资源进行加载处理。 进一步地,第一结果处理单元具体用于通过循环引用检测模块检测资源项是否存 在循环依赖;以及当存在循环依赖时,对该循环依赖进行断裂处理,并加载任一游戏资源; 以及当不存在循环依赖时,通过流水线调度模块对资源项进行流水线的调度,以使得任一 游戏资源的相关数据流入调度后的流水线,并通过加载流水线模块基于调度后的流水线加 载任一游戏资源。 进一步地,第一结果处理单元具体用于通过资源标识解析管道调用第二预设接 口,将任一游戏资源的标识信息转化为任一游戏资源的实际路径;以及用于通过资源MD5解 析管道调用第二预设接口,将任一游戏资源的哈希值添加到实际路径中,得到任一游戏资 源的版本路径;以及用于基于版本路径,通过平台适配管道确定适配于任一运行平台的 API;以及用于基于API,通过资源下载管道根据任一游戏资源的类型,确定下载任一游戏资 源的下载器,并通过下载器下载任一游戏资源;以及用于基于API,通过资源下载管道根据 任一游戏资源的类型,确定加载任一游戏资源的加载器,并通过加载器加载任一游戏资源。 进一步地,第二处理子模块还包括第二结果处理单元; 第二结果处理单元,用于通过资源依赖解析模块对任一游戏资源依赖的相关资源 进行解析,并根据解析结果判断任一游戏资源是否存在依赖;以及当存在依赖时循环执行 第二处理子模块的动作;以及当不存在依赖时,调用资源管理器的第三预设接口,并通过资 源管理器的资源策略模块确定任一游戏资源的管理策略,同时通过资源管理器的资源缓存 模块缓存任一游戏资源,以使得返回任一游戏资源。 第三方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处 理器上运行的计算机程序,处理器执行所述程序时实现上述的游戏引擎资源处理方法。 第四方面,提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算 9 CN 111569431 A 说 明 书 6/16 页 机程序,该程序被处理器执行时实现上述的游戏引擎资源处理方法。 本申请实施例提供的游戏引擎资源处理方法,通过游戏引擎的资源管理系统的第 一预设接口,接收针对任一运行平台的任一游戏资源的获取请求,并通过资源管理系统基 于该获取请求,获取任一游戏资源,其中,资源管理系统包括第一预设接口、资源、资源管理 器、资源加载器及资源注册表,使得可以通过资源加载器适配不同的游戏运行平台,例如 iOS(苹果操作系统)、Android(安卓操作系统)、Windows(微软操作系统)等,并从其中获取 相应的游戏资源,从而游戏引擎上层的应用层和引擎子系统可以利用资源管理器提供的第 一预设接口获取不同游戏运行平台的游戏开发资源,实现了各大游戏运行平台的不同格式 资源的高效和灵活管理,满足了对资源管理系统的扩展性需求以及快速地加载不同游戏运 行平台的大量资源的需求。 本申请附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变 得明显,或通过本申请的实践了解到。 附图说明 本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得 明显和容易理解,其中: 图1为本申请实施例的游戏引擎资源处理方法的流程示意图; 图2为本申请实施例的游戏引擎的系统架构示意图; 图3为本申请实施例的游戏引擎的资源管理系统的结构示意图; 图4为本申请实施例的获取游戏资源的基本过程示意图; 图5为本申请实施例的游戏引擎资源处理装置的基本结构示意图; 图6为本申请实施例的游戏引擎资源处理装置的详细结构示意图; 图7为本申请实施例的电子设备的结构示意图。
技术实现要素:
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终 相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附 图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。 本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一 个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措 辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加 一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元 件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在 中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措 辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。 为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方 式作进一步地详细描述。 下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述 技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念 10 CN 111569431 A 说 明 书 7/16 页 或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。 实施例一 本申请实施例提供了一种游戏引擎资源处理方法,如图1所示,包括: 步骤S110,通过游戏引擎的第一预设接口接收针对任一运行平台的任一游戏资源 的获取请求。 具体地,游戏引擎的上层的应用层与引擎子系统,发起针对任一运行平台的任一 游戏资源的获取请求时,终端设备通过游戏引擎的第一预设接口接收该获取请求,该第一 预设接口为游戏引擎的资源管理系统的统一接口,终端设备可以为智能手机、iPad、台式计 算机、笔记本电脑等。 其中,游戏引擎的应用层包括插件、用户组件、游戏性及编辑器等,游戏引擎的引 擎子系统包括场景管理器、动画系统、音频系统及渲染系统等,如图2所示。 步骤S120,基于获取请求,通过游戏引擎的资源管理系统获取任一游戏资源,资源 管理系统包括第一预设接口、资源、资源管理器、资源加载器及资源注册表。 具体地,游戏引擎的资源管理系统的第一预设接口接收到该获取请求后,可以基 于该获取请求,获取该任一游戏资源。其中,资源管理系统包括第一预设接口、资源、资源管 理器、资源加载器及资源注册表。换言之,对资源管理系统进行了模块拆分,使其包括上层 统一接口(即第一预设接口)、资源管理器、资源加载器、资源注册表等部分,如图2所示。其 中,资源管理系统可以通过资源加载器适配不同的游戏运行平台,例如iOS(苹果操作系 统)、Android(安卓操作系统)、Windows(微软操作系统)等,并从其中获取相应的游戏资源, 使得游戏引擎上层的应用层和引擎子系统可以利用资源管理器提供的第一预设接口获取 不同游戏运行平台的游戏资源。 进一步地,如图2所示,游戏引擎的系统架构除包括应用层、引擎子系统、资源管理 系统外还包括平台适配与目标运行平台,其中,在整个游戏引擎中,资源管理系统处于游戏 引擎的底层,是引擎各个子系统以及应用层的基础。 步骤S130,返回获取到的任一游戏资源。 具体地,资源管理系统获取到该任一游戏资源后,向游戏引擎的上层返回获取到 的任一游戏资源。 本申请实施例提供的游戏引擎资源处理方法,与现有技术相比,通过游戏引擎的 资源管理系统的第一预设接口,接收任一运行平台的任一游戏资源的获取请求,并通过资 源管理系统基于该获取请求,获取任一游戏资源,其中,资源管理系统包括第一预设接口、 资源、资源管理器、资源加载器及资源注册表,使得可以通过资源加载器适配不同的游戏运 行平台,例如iOS(苹果操作系统)、Android(安卓操作系统)、Windows(微软操作系统)等,并 从其中获取相应的游戏资源,从而游戏引擎上层的应用层和引擎子系统可以利用资源管理 器提供的第一预设接口获取不同游戏运行平台的游戏开发资源,实现了各大游戏运行平台 的不同格式资源的高效和灵活管理,满足了对资源管理系统的扩展性需求以及快速地加载 不同游戏运行平台的大量资源的需求。 本申请实施例提供了另一种可能的实现方式,其中: 资源管理器用于缓存已有游戏资源、处理游戏资源释放及根据游戏资源类型确定 游戏资源释放策略,通过缓存已有游戏资源可以确保游戏资源不会被重复加载。 11 CN 111569431 A 说 明 书 8/16 页 资源加载器用于基于管道化的加载流水线加载各种游戏资源,即资源加载器是基 于管道化设计的,使得基于管道化设计的加载流水线能够支持快速拓展及适配各类需求。 资源注册表用于存储游戏资源的相关信息,相关信息包括标识信息、哈希值、资源 路径到实际路径的转换信息中的至少一项,而且资源注册表还可以提供对外接口以用于进 行游戏资源的相关信息的查询。 资源管理系统的第一预设接口为资源管理系统对上层提供的统一接口,以供游戏 引擎各个部分进行调用,其包括一系列游戏资源的获取、查询、加载及释放等的接口。 具体地,如图3所示,基于管道化设计的资源加载器包括加载队列模块、循环引用 检测模块、流水线调度模块、加载流水线模块、资源依赖解析模块及错误处理模块,其中,各 个模块的详细内容及功能如下: 加载队列模块用于存储各个正在加载的游戏资源项和/或待加载的游戏资源项, 从而控制游戏资源项之间的依赖等工作。 循环引用检测模块用于检测在各个游戏资源之间的依赖关系是否存在循环依赖, 并当存在循环依赖时对该循环依赖进行断裂处理,相当于检测在各个游戏资源之间的依赖 关系是否存在环的问题,如果存在环,则必须进行环的断裂处理,避免发生死锁的情况。 其中,循环依赖是指循环往复依赖,比如A依赖B,B依赖C,C又依赖A,依赖关系形成 了一个环,即A->B->C->A。循环依赖会造成在加载A时必须先加载B,加载B又必须先加载C, 加载C又必须先加载A,导致永远完成不了,形成无限循环。上述环的问题就是指循环依赖。 由于循环依赖会造成无限循环,所以必须在依赖关系的环中找一个地方进行断 开,比如上述的A->B->C->A,这是一个环,这个时候就需要把B依赖C这条依赖关系断开,变 成A->B与C->A,这样在加载到B时就会停止,从而断开了这个环(即循环依赖)。其中,对循环 依赖进行断裂处理的操作方式是指:在加载一个子资源时,先查找一下这个子资源是否是 自己的祖先资源,如果是,表示存在循环依赖,就不再加载该子资源了,而是直接完成当前 资源的加载。 流水线调度模块可以用于控制各个流水线的拼接、控制管道之间的数据流入与数 据流出、调度各个管道的并行处理、调度各个管道的回调处理等。 加载流水线模块用于进行流水线的动态拼接、删除、增加及移位中的至少一项处 理,且整个加载流水线是基于管道化设计的,其中的管道可以进行动态拼接、删除、增加及 移位等操作,从而实现用户定制的功能。 资源依赖解析模块用于在反序列化后,解析游戏资源依赖的相关资源,并加载解 析得到的相关资源,即将游戏资源中依赖的其他资源解析出来,并进行依赖资源的加载工 作。 其中,反序列化和序列化是一对相对的概念。序列化是指将运行中的对象状态以 一种紧密有序的形式保存下来,可以保存在任何可存储数据的介质中比如数据库,硬盘等 等。反序列化是指读取上面序列化之后保存的数据文件,解析恢复成当时运行时的状态。 错误处理模块用于记录游戏资源的加载过程中的异常信息,并返回异常信息,即 检测资源加载过程中是否发生异常,并当发生异常时记录异常,同时在回调中返回该异常。 进一步地,如图3所示,加载流水线模块包括资源标识解析管道、资源MD5解析管 道、平台适配管道、资源下载管道及资源加载管道,其中,各个管道的详细内容及功能如下: 12 CN 111569431 A 说 明 书 9/16 页 资源标识解析管道用于将游戏资源的标识信息(例如ID)转化为游戏资源的全局 唯一标识信息,并将该全局唯一标识信息转化为游戏资源的实际路径(例如真实路径地 址)。 资源MD5解析管道用于通过将游戏资源的哈希值添加到该游戏资源的实际路径 中,获取该游戏资源的版本路径。 平台适配管道用于根据不同游戏运行平台进行相应的应用程序编程接口API的匹 配,即根据不同目标游戏运行平台进行对应API的适配工作。 资源下载管道用于根据游戏资源的类型确定对应的用于进行游戏资源下载的下 载器,即根据游戏资源类型选择对应的下载器进行资源下载。 资源加载管道用于根据游戏资源的类型确定对应的用于进行游戏资源加载的加 载器,即根据游戏资源类型选择对应的加载器进行资源加载,包括资源的解析、反序列化等 操作。 需要说明的是,上述的资源加载器将加载流程进行管道化设计,每一个管道负责 其中一项事务,各个管道之间业务上没有直接关系,管道串联成一个加载流水线。当任一资 源请求进入流水线后,便可转换为对应资源,通过将各个游戏运行平台的适配、多个游戏资 源格式的处理放入到多个不同的管道中进行工作,从而便避免了相互干扰的问题,而且逻 辑变得更加清晰和更加符合面向对象的设计思想,这极大的降低了开发和维护的难度,提 升了工作效率。此外,各个管道是可热插拔、可修改顺序的,用户可根据具体需求增删、修改 各个管道,从而在很大程度上增加了游戏开发的灵活性。同时,在可预见的未来,新的标准 都可通过增删、修改管道来进行适配,这使得资源管理系统的扩展性大大提高。另外,由于 各个管道之间的工作互不相关,故可通过生产者和消费者模型进行并行化处理,从而大大 利用了并行的效率,极大减少资源加载的时间。 其中,上述新的标准可以指新的图形库,或者现有图形库的新版本,opengl, directx,Vulkan,或者新的JavaScript标准,ES7等等,或者新的游戏平台,比如微信小游 戏,百度小游戏等等都可以算作新标准。 本申请实施例提供了另一种可能的实现方式,其中,如图3所示,资源管理系统中 的资源管理器又可以划分为若干个子模块,各个子模块的详细内容及功能如下: 资源策略模块用于针对不同游戏资源确定不同的管理策略,即针对不同资源使用 不同的策略进行管理,例如,对于引擎的内部资源以及用户需要长期使用的资源路径下的 资源,采取的是用户手动控制,引擎不做释放工作;针对普通资源,则根据对应场景的设置 情况进行控制,如果场景设置为自动释放资源,则对应资源将在场景切换时,根据下一场景 是否依然需要用到此资源来决定,若彻底不需要此资源,则该资源将在场景切换时自动进 行释放。 资源获取模块用于通过查询资源缓存模块确定是否存在游戏资源,并当存在时返 回该游戏资源,当不存在时通过所述资源加载器进行该游戏资源的加载。 资源缓存模块用于对游戏中用到的所有资源进行缓存,以使得复用公共游戏资 源,此外还可以确保游戏资源不会被重复加载。 资源释放模块用于根据用户选择,确定对游戏资源进行释放或者对游戏资源依赖 的相关资源进行释放,即根据用户选择对游戏资源本身进行释放,还是对资源所依赖的所 13 CN 111569431 A 说 明 书 10/16 页 有其他资源进行释放,析构所有相关资源,并从缓存中移除该对象。 另外,如图3所示,资源管理系统中的资源注册表又可以划分为若干个子模块,各 个子模块的详细内容及功能如下: 资源路径处理模块用于将游戏资源的全局唯一标识信息转化为游戏资源的路径 信息。 资源信息模块用于存储以下至少一项:游戏资源的类型、游戏资源的相对路径、游 戏资源的名称、游戏资源的标识信息、指示游戏资源是否为子资源的标识。 资源标识映射表模块用于将游戏资源的标识信息与游戏资源的全局唯一标识信 息进行映射。 资源MD5映射表模块用于将游戏资源的全局唯一标识信息与游戏资源的哈希值进 行映射,以使得查询游戏资源的版本信息。 本申请实施例提供了另一种可能的实现方式,步骤S120中的通过资源管理系统获 取任一游戏资源,具体包括:步骤a、通过第一预设接口调用资源注册表的第二预设接口,并 通过资源注册表查询任一游戏资源的相关信息,以获取任一游戏资源的标识信息;步骤b、 根据任一游戏资源的标识信息,调用资源管理器的第三预设接口,并通过资源管理器获取 任一游戏资源。 具体地,通过资源管理器获取所述任一游戏资源,包括: 查询资源管理器的资源缓存模块中缓存的游戏资源,并确定所述缓存的游戏资源 中是否包括所述任一游戏资源; 如果包括任一游戏资源,则返回所述任一游戏资源; 如果不包括任一游戏资源,则通过资源管理器调用资源加载器的第四预设接口, 并通过资源加载器加载所述任一游戏资源。 具体地,通过资源加载器加载任一游戏资源,包括: 判断加载队列模块是否正在加载所述任一游戏资源; 如果正在加载任一游戏资源,则注册相应的回调函数,并通过回调函数返回加载 完成的任一游戏资源; 如果未在加载任一游戏资源,则在加载队列模块中增加用于加载任一游戏资源的 资源项,并基于资源项对任一游戏资源进行加载处理。 具体地,基于资源项对任一游戏资源进行加载处理,包括: 通过循环引用检测模块检测资源项是否存在循环依赖; 若存在循环依赖,则对该循环依赖进行断裂处理,并加载任一游戏资源; 若不存在循环依赖,则通过流水线调度模块对资源项进行流水线的调度,以使得 任一游戏资源的相关数据流入调度后的流水线,并通过加载流水线模块基于调度后的流水 线加载任一游戏资源。 具体地,通过加载流水线模块基于调度后的流水线加载任一游戏资源,包括: 通过资源标识解析管道调用所述第二预设接口,将任一游戏资源的标识信息转化 为任一游戏资源的实际路径; 通过资源MD5解析管道调用所述第二预设接口,将任一游戏资源的哈希值添加到 实际路径中,得到任一游戏资源的版本路径; 14 CN 111569431 A 说 明 书 11/16 页 基于版本路径,通过平台适配管道确定适配于任一运行平台的API; 基于API,通过资源下载管道根据任一游戏资源的类型,确定下载任一游戏资源的 下载器,并通过下载器下载任一游戏资源; 基于API,通过资源下载管道根据任一游戏资源的类型,确定加载任一游戏资源的 加载器,并通过加载器加载任一游戏资源。 具体地,在通过加载流水线模块基于调度后的流水线加载任一游戏资源之后,还 包括: 通过资源依赖解析模块对任一游戏资源依赖的相关资源进行解析,并根据解析结 果判断任一游戏资源是否存在依赖; 如果存在依赖,则循环执行步骤b; 如果不存在依赖,则调用资源管理器的第三预设接口,并通过资源管理器的资源 策略模块确定任一游戏资源的管理策略,同时通过资源管理器的资源缓存模块缓存任一游 戏资源,以返回任一游戏资源。 其中,图4给出了本实现方式中的通过资源管理系统获取任一游戏资源的基本过 程,该基本过程包括如下所示的几个子过程: 1、游戏引擎的上层(例如应用层、引擎子系统)发起获取任一运行平台的任一游戏 资源的获取请求,相应地,游戏引擎的资源管理系统的第一预设接口(即图4中的统一接口) 接收该获取请求; 2、通过第一预设接口调用资源注册表的第二预设接口(即图4中的资源注册表的 接口),并在资源注册表中查询该任一游戏资源的相关信息,以获取该任一游戏资源的标识 信息(例如ID),同时根据该任一游戏资源的标识信息,调用资源管理器的第三预设接口(即 图4中的资源管理器的接口),并通过资源管理器获取该任一游戏资源。 3、资源管理器的接口调用资源获取模块,以获取用户需要的该任一游戏资源。 4、资源获取模块通过资源缓存模块对该任一游戏资源进行查询,判断该任一游戏 资源是否存在于资源缓存模块中,如果存在于资源缓存模块中,则直接返回该任一游戏资 源,如果不存在于资源缓存模块中,则调用资源加载器的第四预设接口(即图4中的资源加 载器的接口),并通过资源加载器加载该任一游戏资源; 5、资源加载器的接口判断加载队列模块中是否正在加载该任一游戏资源,如果正 在加载该任一游戏资源,则注册回调函数,以通过该回调函数返回加载完成的该任一游戏 资源,否则,在加载队列模块中新增用于加载该任一游戏资源的资源项,并基于该资源项对 该任一游戏资源进行加载处理; 6、通过循环引用检测模块对该资源项进行依赖循环检测,如果发现存在循环依 赖,则将该资源项直接完成,进行循环依赖的环的断裂处理,否则继续加载该任一游戏资 源; 7、通过流水线调度模块对资源项进行流水线的调度,以使得该任一游戏资源的相 关数据流入调度后的流水线; 8、通过资源标识解析管道调用资源注册表的接口,将该任一游戏资源的标识信息 转化为该任一游戏资源的实际路径; 9、通过资源MD5解析管道调用资源注册表的接口,将该任一游戏资源的版本哈希 15 CN 111569431 A 说 明 书 12/16 页 值添加到该任一游戏资源的实际路径中,得到该任一游戏资源的版本路径; 10、根据不同的游戏运行平台,通过平台适配管道适配该任一游戏资源的游戏运 行平台的API; 11、根据该任一游戏资源的类型或格式,选择资源下载器进行该任一游戏资源的 下载; 12、根据该任一游戏资源的类型或格式,选择资源加载器进行该任一游戏资源的 加载; 13、通过资源依赖解析模块对该任一游戏资源的依赖进行解析,即对该任一游戏 资源依赖的相关资源进行解析; 14、根据解析结果判断该任一游戏资源是否存在依赖,如果存在依赖,则返回上述 步骤3继续执行,否则执行下面的步骤15; 15、调用资源管理器的接口,通过资源管理器的资源策略模块设置资源管理策略; 16、通过资源管理器的资源缓存模块缓存该任一游戏资源; 17、返回该任一游戏资源。 [0200] 本申请实施例的游戏引擎资源处理方法,对资源管理系统实现了模块拆分、管道 抽象、平台格式适配、并行加载资源的流程,将加载过程中的环节提炼成单独的管道,将所 有管道组合成加载流水线,加载流水线中的管道进行并行工作。其中,不仅管道可以自由组 合和扩展,以适配多个游戏运行平台,而且在单独的一个管道中可以进行多格式适配。此 外,将加载完成的资源进行缓存,便于之后的资源复用。从而实现了各大平台的不同格式资 源的高效和灵活管理,从而满足资源管理系统扩展性好、快速地加载不同平台的大量资源 的需求。 [0201] 实施例二 [0202] 图5为本申请实施例提供的一种游戏资源引擎处理装置的结构示意图,如图5所 示,该装置50可以包括接收模块51、获取模块52及返回模块53;其中: [0203] 接收模块51用于通过游戏引擎的第一预设接口接收针对任一运行平台的任一游 戏资源的获取请求; [0204] 获取模块52用于基于获取请求,通过游戏引擎的资源管理系统获取任一游戏资 源,资源管理系统包括第一预设接口、资源、资源管理器、资源加载器及资源注册表; [0205] 返回模块53用于返回获取到的任一游戏资源。 [0206] 具体地,资源管理器用于缓存已有游戏资源、处理游戏资源释放及根据游戏资源 类型确定游戏资源释放策略; [0207] 资源加载器用于基于管道化的加载流水线加载各种游戏资源; [0208] 资源注册表用于存储游戏资源的相关信息,相关信息包括标识信息、哈希值、资源 路径到实际路径的转换信息中的至少一项。 [0209] 进一步地,资源加载器包括加载队列模块、循环引用检测模块、流水线调度模块、 加载流水线模块、资源依赖解析模块及错误处理模块; [0210] 加载队列模块用于存储各个正在加载的游戏资源项和/或待加载的游戏资源项; [0211] 循环引用检测模块用于检测在各个游戏资源之间的依赖关系是否存在循环依赖, 并当存在循环依赖时对该循环依赖进行断裂处理; 16 CN 111569431 A 说 明 书 13/16 页 [0212] 流水线调度模块用于执行以下至少一项:控制各个流水线的拼接、控制管道之间 的数据流入与数据流出、调度各个管道的并行处理、调度各个管道的回调处理; [0213] 加载流水线模块用于进行流水线的动态拼接、删除、增加及移位中的至少一项处 理; [0214] 资源依赖解析模块用于在反序列化后,解析游戏资源依赖的相关资源,并加载解 析得到的相关资源; [0215] 错误处理模块用于记录游戏资源的加载过程中的异常信息,并返回异常信息。 [0216] 进一步地,加载流水线模块包括资源标识解析管道、资源MD5解析管道、平台适配 管道、资源下载管道及资源加载管道; [0217] 资源标识解析管道用于将游戏资源标识信息转化为游戏资源的全局唯一标识信 息,并将该全局唯一标识信息转化为游戏资源的实际路径; [0218] 资源MD5解析管道用于通过将游戏资源的哈希值添加到该游戏资源的实际路径 中,获取该游戏资源的版本路径; [0219] 平台适配管道用于根据不同游戏运行平台进行相应的应用程序编程接口API的匹 配; [0220] 资源下载管道用于根据游戏资源的类型确定对应的用于进行游戏资源下载的下 载器; [0221] 资源加载管道用于根据游戏资源的类型确定对应的用于进行游戏资源加载的加 载器。 [0222] 进一步地,资源管理器包括资源策略模块、资源获取模块、资源缓存模块及资源释 放模块; [0223] 其中,资源策略模块用于针对不同游戏资源确定不同的管理策略; [0224] 资源获取模块用于通过查询资源缓存模块确定是否存在游戏资源,并当存在时返 回该游戏资源,当不存在时通过资源加载器进行该游戏资源的加载; [0225] 资源缓存模块用于对游戏中用到的所有资源进行缓存,以使得复用公共游戏资 源; [0226] 资源释放模块用于根据用户选择,确定对游戏资源进行释放或者对游戏资源依赖 的相关资源进行释放。 [0227] 进一步地,资源注册表包括资源路径处理模块、资源信息模块、资源标识映射表模 块及资源MD5映射表模块; [0228] 资源路径处理模块用于将游戏资源的全局唯一标识信息转化为游戏资源的路径 信息; [0229] 资源信息模块用于存储以下至少一项:游戏资源的类型、游戏资源的相对路径、游 戏资源的名称、游戏资源的标识信息、指示游戏资源是否为子资源的标识; [0230] 资源标识映射表模块用于将游戏资源的标识信息与游戏资源的全局唯一标识信 息进行映射; [0231] 资源MD5映射表模块用于将游戏资源的全局唯一标识信息与游戏资源的哈希值进 行映射,以使得查询游戏资源的版本信息。 [0232] 进一步地,获取模块52包括第一处理子模块521与第二处理子模块522,如图6所 17 CN 111569431 A 说 明 书 14/16 页 示,其中: [0233] 第一处理子模块521用于通过第一预设接口调用资源注册表的第二预设接口,并 通过资源注册表查询任一游戏资源的相关信息,以获取任一游戏资源的标识信息; [0234] 第二处理子模块522用于根据任一游戏资源的标识信息,调用资源管理器的第三 预设接口,并通过资源管理器获取任一游戏资源。 [0235] 进一步地,第二处理子模块522包括查询单元5221与第一结果处理单元5222,如图 6所示,其中: [0236] 查询单元5221用于查询资源管理器的资源缓存模块中缓存的游戏资源,并确定缓 存的游戏资源中是否包括任一游戏资源; [0237] 第一结果处理单元5222用于当包括任一游戏资源时,返回任一游戏资源;以及用 于当不包括任一游戏资源时,通过资源管理器调用资源加载器的第四预设接口,并通过资 源加载器加载任一游戏资源。 [0238] 进一步地,第一结果处理单元5222具体用于判断加载队列模块是否正在加载任一 游戏资源;以及用于当正在加载任一游戏资源时,注册相应的回调函数,并通过回调函数返 回加载完成的任一游戏资源;以及用于当未在加载任一游戏资源时,在加载队列模块中增 加用于加载任一游戏资源的资源项,并基于资源项对任一游戏资源进行加载处理。 [0239] 进一步地,第一结果处理单元5222具体用于通过循环引用检测模块检测资源项是 否存在循环依赖;以及当存在循环依赖时,对该循环依赖进行断裂处理,并加载任一游戏资 源;以及当不存在循环依赖时,通过流水线调度模块对资源项进行流水线的调度,以使得任 一游戏资源的相关数据流入调度后的流水线,并通过加载流水线模块基于调度后的流水线 加载任一游戏资源。 [0240] 进一步地,第一结果处理单元5222具体用于通过资源标识解析管道调用第二预设 接口,将任一游戏资源的标识信息转化为任一游戏资源的实际路径;以及用于通过资源MD5 解析管道调用第二预设接口,将任一游戏资源的哈希值添加到实际路径中,得到任一游戏 资源的版本路径;以及用于基于版本路径,通过平台适配管道确定适配于任一运行平台的 API;以及用于基于API,通过资源下载管道根据任一游戏资源的类型,确定下载任一游戏资 源的下载器,并通过下载器下载任一游戏资源;以及用于基于API,通过资源下载管道根据 任一游戏资源的类型,确定加载任一游戏资源的加载器,并通过加载器加载任一游戏资源。 [0241] 进一步地,第二处理子模块522还包括第二结果处理单元5223,如图6所示,其中: [0242] 第二结果处理单元5223用于通过资源依赖解析模块对任一游戏资源依赖的相关 资源进行解析,并根据解析结果判断任一游戏资源是否存在依赖;以及当存在依赖时循环 执行第二处理子模块的动作;以及当不存在依赖时,调用资源管理器的第三预设接口,并通 过资源管理器的资源策略模块确定任一游戏资源的管理策略,同时通过资源管理器的资源 缓存模块缓存任一游戏资源,以使得返回任一游戏资源。 [0243] 本申请实施例提供的装置,与现有技术相比,通过游戏引擎的资源管理系统的第 一预设接口,接收针对任一运行平台的任一游戏资源的获取请求,并通过资源管理系统基 于该获取请求,获取任一游戏资源,其中,资源管理系统包括第一预设接口、资源、资源管理 器、资源加载器及资源注册表,使得可以通过资源加载器适配不同的游戏运行平台,例如 iOS(苹果操作系统)、Android(安卓操作系统)、Windows(微软操作系统)等,并从其中获取 18 CN 111569431 A 说 明 书 15/16 页 相应的游戏资源,从而游戏引擎上层的应用层和引擎子系统可以利用资源管理器提供的第 一预设接口获取不同游戏运行平台的游戏开发资源,实现了各大游戏运行平台的不同格式 资源的高效和灵活管理,满足了对资源管理系统的扩展性需求以及快速地加载不同游戏运 行平台的大量资源的需求。 [0244] 实施例三 [0245] 本申请实施例提供了一种电子设备,如图7所示,图7所示的电子设备700包括:处 理器701和存储器703。其中,处理器701和存储器703相连,如通过总线702相连。进一步地, 电子设备700还可以包括收发器704。需要说明的是,实际应用中收发器704不限于一个,该 电子设备700的结构并不构成对本申请实施例的限定。 [0246] 其中,处理器701应用于本申请实施例中,用于实现图5或图6所示的接收模块、获 取模块及返回模块的功能。 [0247] 处理器701可以是CPU,通用处理器,DSP,ASIC,FPGA或者其他可编程逻辑器件、晶 体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述 的各种示例性的逻辑方框,模块和电路。处理器701也可以是实现计算功能的组合,例如包 含一个或多个微处理器组合,DSP和微处理器的组合等。 [0248] 总线702可包括一通路,在上述组件之间传送信息。总线702可以是PCI总线或EISA 总线等。总线702可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗 线表示,但并不表示仅有一根总线或一种类型的总线。 [0249] 存储器703可以是ROM或可存储静态信息和指令的其他类型的静态存储设备,RAM 或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM、CD-ROM或其他光盘 存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质 或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代 码并能够由计算机存取的任何其他介质,但不限于此。 [0250] 存储器703用于存储执行本申请方案的应用程序代码,并由处理器701来控制执 行。处理器701用于执行存储器703中存储的应用程序代码,以实现图5或图6所示实施例提 供的游戏资源引擎处理装置的动作。 [0251] 本申请实施例提供的电子设备,包括存储器、处理器及存储在存储器上并可在处 理器上运行的计算机程序,处理器执行程序时,与现有技术相比,可实现:通过游戏引擎的 资源管理系统的第一预设接口,接收针对任一运行平台的任一游戏资源的获取请求,并通 过资源管理系统基于该获取请求,获取任一游戏资源,其中,资源管理系统包括第一预设接 口、资源、资源管理器、资源加载器及资源注册表中的至少一项,使得可以通过资源加载器 适配不同的游戏运行平台,例如iOS(苹果操作系统)、Android(安卓操作系统)、Windows(微 软操作系统)等,并从其中获取相应的游戏资源,从而游戏引擎上层的应用层和引擎子系统 可以利用资源管理器提供的第一预设接口获取不同游戏运行平台的游戏开发资源,实现了 各大游戏运行平台的不同格式资源的高效和灵活管理,满足了对资源管理系统的扩展性需 求以及快速地加载不同游戏运行平台的大量资源的需求。 [0252] 本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有 计算机程序,该程序被处理器执行时实现实施例一所示的方法。与现有技术相比,通过游戏 引擎的资源管理系统的第一预设接口,接收针对任一运行平台的任一游戏资源的获取请 19 CN 111569431 A 说 明 书 16/16 页 求,并通过资源管理系统基于该获取请求,获取任一游戏资源,其中,资源管理系统包括第 一预设接口、资源、资源管理器、资源加载器及资源注册表中的至少一项,使得可以通过资 源加载器适配不同的游戏运行平台,例如iOS(苹果操作系统)、Android(安卓操作系统)、 Windows(微软操作系统)等,并从其中获取相应的游戏资源,从而游戏引擎上层的应用层和 引擎子系统可以利用资源管理器提供的第一预设接口获取不同游戏运行平台的游戏开发 资源,实现了各大游戏运行平台的不同格式资源的高效和灵活管理,满足了对资源管理系 统的扩展性需求以及快速地加载不同游戏运行平台的大量资源的需求。 [0253] 本申请实施例提供的计算机可读存储介质适用于上述方法的任一实施例。在此不 再赘述。 [0254] 应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是 这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤 的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一 部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻 执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他 步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。 [0255] 以上所述仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人 员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应 视为本申请的保护范围。 20 CN 111569431 A 说 明 书 附 图 1/4 页 图1 图2 21 CN 111569431 A 说 明 书 附 图 2/4 页 图3 22 CN 111569431 A 说 明 书 附 图 3/4 页 图4 23 CN 111569431 A 说 明 书 附 图 4/4 页 图5 图6 图7 24
分享到:
收藏