一种基于游戏引擎的游戏资源构建方法和装置
技术领域
本发明涉及一种基于游戏引擎的游戏资源构建方法和装置,属于游戏开发的技术领域。
背景技术
在游戏开发的过程中常使用游戏引擎,将游戏资源构建为资源压缩包,并在游戏运行过程中对该资源压缩包进行加载。如在游戏引擎Unity中,资源压缩包(AssetBundle)是一个包含游戏资源(Asset)的压缩包,可以在游戏运行的时候被加载。该游戏资源(Asset)可以包括模型、贴图、预制体、声音甚至整个场景。
但是,Unity的AssetBundle构建流水线无法很好地利用计算资源,具体的表现为,在使用Unity将游戏资源(Asset)资源压缩包(AssetBundle)时,CPU占用率、磁盘IO都使用得非常低,使得在进行大型的游戏资源构建任务时,耗时是非常长的。
发明内容
本发明提供一种基于游戏引擎的游戏资源构建方法和装置,基于游戏引擎的游戏资源构建方式进行改进,采用将资源构建任务根据资源压缩包的依赖关系拆分为多个子任务,并通过多个进程执行来增加计算资源的利用,从而提高效率,节省时间。
本发明的技术方案第一方面为1、一种基于游戏引擎的游戏资源构建方法,所述方法包括以下步骤:A、确认资源构建任务对应的资源列表,所述资源列表设置有游戏资源与资源压缩包的对应关系,所述资源构建任务根据所述对应关系,将所述游戏资源构建为所述资源压缩包;B、根据所述游戏资源确定所述资源压缩包之间的依赖关系;C、根据所述依赖关系,将所述资源构建任务拆分为多组正交的子任务;D、调度多个进程并行化执行所述子任务,以对所述子任务对应的游戏资源构建为所述资源压缩包。
进一步的,所述步骤B包括:选择所述资源列表中的任一个游戏资源作为目标游戏资源,确定所述目标游戏资源的依赖游戏资源;当所述依赖游戏资源是所述资源列表中的游戏资源时,则表明所述目标游戏资源对应的资源压缩包与所述依赖游戏资源对应的资源压缩包存在依赖关系。
进一步的,所述步骤C包括:将存在所述依赖关系的所述资源压缩包分配至同一子任务进行构建。
进一步的,所述步骤C还包括:根据CPU核心数目确定预设的任务数量;根据所述子任务对应的游戏资源确定所述子任务的任务权重;根据所述任务权重对子任务进行合并,得到小于等于所述任务数量的新的子任务。
进一步的,根据所述子任务对应的游戏资源确定所述子任务的任务权重,包括:根据所述子任务所要构建的资源压缩包对应的游戏资源数量;根据所述游戏资源数量确定所述子任务的任务权重。
进一步的,所述步骤D包括:根据所述子任务对应的游戏资源生成配置文件,所述配置文件设置有游戏资源和资源压缩包的对应关系;以批处理模式调度多个进程并行化执行所述子任务,所述子任务根据所述配置文件将所述游戏资源构建为所述资源压缩包。
本发明的技术方案第二方面为一种计算机装置,包括存储器、处理器及储存在存储器上并能够在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
A、确认资源构建任务对应的资源列表,所述资源列表设置有游戏资源与资源压缩包的对应关系,所述资源构建任务根据所述对应关系,将所述游戏资源构建为所述资源压缩包;
B、根据所述游戏资源确定所述资源压缩包之间的依赖关系;
C、根据所述依赖关系,将所述资源构建任务拆分为多组正交的子任务;
D、调度多个进程并行化执行所述子任务,以对所述子任务对应的游戏资源构建为所述资源压缩包。
本发明的技术方案第三方面为一种计算机可读存储介质,其上储存有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
A、确认资源构建任务对应的资源列表,所述资源列表设置有游戏资源与资源压缩包的对应关系,所述资源构建任务根据所述对应关系,将所述游戏资源构建为所述资源压缩包;
B、根据所述游戏资源确定所述资源压缩包之间的依赖关系;
C、根据所述依赖关系,将所述资源构建任务拆分为多组正交的子任务;
D、调度多个进程并行化执行所述子任务,以对所述子任务对应的游戏资源构建为所述资源压缩包。
本发明的有益效果为:采用临时文件和进程关联方式来增加计算资源的利用可视化监控服务器的工作压力,从而提高效率,节省时间。
附图说明
图1所示为根据本发明的方法的总体流程图。
图2所示为根据本发明的实施例中的资源构建任务拆分示意图。
具体实施方式
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。
需要说明的是,如无特殊说明,当某一特征被称为“固定”、“连接”在另一个特征,它可以直接固定、连接在另一个特征上,也可以间接地固定、连接在另一个特征上。此外,本公开中所使用的上、下、左、右等描述仅仅是相对于附图中本公开各组成部分的相互位置关系来说的。在本公开中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。此外,除非另有定义,本文所使用的所有的技术和科学术语与本技术领域的技术人员通常理解的含义相同。本文说明书中所使用的术语只是为了描述具体的实施例,而不是为了限制本发明。本文所使用的术语“和/或”包括一个或多个相关的所列项目的任意的组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种元件,但这些元件不应限于这些术语。这些术语仅用来将同一类型的元件彼此区分开。例如,在不脱离本公开范围的情况下,第一元件也可以被称为第二元件,类似地,第二元件也可以被称为第一元件。本文所提供的任何以及所有实例或示例性语言(“例如”、“如”等)的使用仅意图更好地说明本发明的实施例,并且除非另外要求,否则不会对本发明的范围施加限制。
参考图1,根据本发明的方法可以用于基于游戏引擎的对游戏资源进行并行构建。该方法包括以下步骤:A、确认资源构建任务对应的资源列表,所述资源列表设置有游戏资源与资源压缩包的对应关系,所述资源构建任务根据所述对应关系,将所述游戏资源构建为所述资源压缩包;B、根据所述游戏资源确定所述资源压缩包之间的依赖关系;C、根据所述依赖关系,将所述资源构建任务拆分为多组正交的子任务;D、调度多个进程并行化执行所述子任务,以对所述子任务对应的游戏资源构建为所述资源压缩包。
在步骤B中,例如选择所述资源列表中的任一个游戏资源作为目标游戏资源,确定所述目标游戏资源的依赖游戏资源;当所述依赖游戏资源是所述资源列表中的游戏资源时,则表明所述目标游戏资源对应的资源压缩包与所述依赖游戏资源对应的资源压缩包存在依赖关系。具体的,以游戏引擎为Unity为例进行说明,通过AssetDatabase.GetDependencies(asset,true)接口的运用,可以很简单地构建出资源依赖树,从而确定目标游戏资源的依赖游戏资源。例如,将所述资源列表中任一游戏资源(asset)作为目标游戏资源称为A,使用AssetDatabase.GetDependencies接口得出包含直接、间接的依赖游戏资源,称为B,检查该B是否是所述资源列表中的游戏资源,且属于不同的资源压缩包(assetbundle),则可以判定A所属的assetbundle依赖于B所属的assetbundle。遍历资源列表中的所有游戏资源,既可以得出所有asset对应的assetbundle之间的依赖关系。
在步骤C中,例如将存在所述依赖关系的所述资源压缩包分配至同一子任务进行构建。具体的,同样以游戏引擎为Unity为例进行说明,参照图2,假设资源列表中设置了将要构建的6个assetbundle文件之间的依赖关系,如图2中abcdef的6个assetbundle文件。则根据依赖关系,则将(a,b,c)分配至子任务1中构建,将(d,e)分配至子任务2中构建,将(f)分至子任务3中构建。
在另一实施例中,在步骤C中,还根据CPU核心数目确定预设的任务数量;根据所述子任务对应的游戏资源确定所述子任务的任务权重;根据所述任务权重对子任务进行合并,得到小于等于所述任务数量的新的子任务。优选的,根据所述子任务对应的游戏资源确定所述子任务的任务权重,包括:根据所述子任务所要构建的资源压缩包对应的游戏资源数量;根据所述游戏资源数量确定所述子任务的任务权重。具体的,参照图2,若每个assetbundle文件只对应一个游戏资源,则子任务1的任务权重为3,子任务2的任务权重为2,子任务3的任务权重为1。
在步骤D中,例如根据所述子任务对应的游戏资源生成配置文件,所述配置文件设置有游戏资源和资源压缩包的对应关系;以批处理模式调度多个进程并行化执行所述子任务,所述子任务根据所述配置文件将所述游戏资源构建为所述资源压缩包。具体的,同样以游戏引擎为Unity为例进行说明,将子任务包含的asset输出为Json格式的配置文件,并部署与子任务同样数量的子工程,以batchMode模式启动Unity进程载入该子工程。子工程读取配置文件以对配置文件描述的游戏资源进行构建。并等待所有进程执行完毕后,确认完成游戏资源的构建。
应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。
此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。
进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的方法和技术编程时,本发明还包括计算机本身。
计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。