CN111359219B - 虚幻引擎的文件处理方法、装置、设备及存储介质 - Google Patents
虚幻引擎的文件处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111359219B CN111359219B CN202010184526.5A CN202010184526A CN111359219B CN 111359219 B CN111359219 B CN 111359219B CN 202010184526 A CN202010184526 A CN 202010184526A CN 111359219 B CN111359219 B CN 111359219B
- Authority
- CN
- China
- Prior art keywords
- game
- file
- engine
- adopting
- processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/60—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
Abstract
本申请提供一种虚幻引擎的文件处理方法、装置、设备及存储介质,涉及游戏文件处理技术领域。该方法包括:采用其他游戏引擎的文件处理节点,获取游戏文件;若游戏文件的格式为其他游戏引擎对应的文件格式,则采用其他游戏引擎的文件处理节点,对游戏文件进行处理。通过在虚幻引擎的文件系统的操作链节点中添加其他游戏引擎的文件系统,使得在不需要修改虚幻引擎的基础上即可实现其他游戏引擎文件系统的移植,从而可以采用移植后的虚幻引擎的文件系统,获取包含在不同包体格式中的游戏文件。为虚幻引擎的文件系统提供了对多种包体格式游戏文件的支持,使得虚幻引擎的文件系统可以适用于多种不同要求的应用场合。
Description
技术领域
本发明涉及游戏文件处理技术领域,具体而言,涉及一种虚幻引擎的文件处理方法、装置、设备及存储介质。
背景技术
不同的游戏引擎都有自己的文件系统,通过提供一层统一的抽象的文件操作接口(比如文件的打开、读、写),用以屏蔽不同平台的文件读写差异,同时还也会提供对包体文件读取的支持,用以将游戏中的资源组织成一个文件,并且引擎可以直接读取这个包体中的游戏资源。不同引擎的文件系统支持的包体格式也不一样,不同的包体格式适用于不同的应用场合。
虚幻引擎UE4文件系统支持的包体格式为UE4自定义的PAK压缩文件格式(PAK为UE4自定义的包体格式,里面可以打包多个文件),游戏资源通过打包成PAK格式用以发布和传输。因此PAK格式决定了游戏资源的加载速度。UE4中的PAK格式功能齐全,可以满足一般要求不高的应用场合。
但是,由于PAK包体格式体积相对较大,额外文件信息较多,比如游戏中包含大量的小文件时,或者游戏对包体大小有严格要求时,PAK格式会造成的较多的浪费,从而导致PAK包体格式适用的应用场合比较局限。
发明内容
本发明的目的在于,针对上述现有技术中的不足,提供一种虚幻引擎的文件处理方法、装置、设备及存储介质,以解决现有的虚幻引擎文件系统支持的包体格式较为局限的问题。
为实现上述目的,本发明实施例采用的技术方案如下:
第一方面,本发明实施例提供了一种虚幻引擎的文件处理方法,所述虚幻引擎中具有其他游戏引擎的文件处理节点,所述方法包括:
采用所述其他游戏引擎的文件处理节点,获取游戏文件;
若所述游戏文件的格式为所述其他游戏引擎对应的文件格式,则采用所述其他游戏引擎的文件处理节点,对所述游戏文件进行处理。
可选地,所述游戏文件为游戏资源的文件;所述采用所述其他游戏引擎的文件处理节点,对所述游戏文件进行处理,包括:
采用所述其他游戏引擎的文件处理节点,对所述游戏资源的文件进行处理,以加载所述游戏资源。
可选地,所述采用所述其他游戏引擎的文件处理节点,获取游戏文件,包括:
采用所述其他游戏引擎的文件处理节点获取文件路径;
若所述文件路径为所述其它游戏引擎的文件路径,则由所述其他游戏引擎的文件处理节点,采用所述文件路径,获取所述游戏资源的文件。
可选地,所述采用所述其他游戏引擎的文件处理节点,获取游戏文件,还包括:
若所述文件路径为所述虚幻引擎的文件路径,则由所述虚幻引擎的文件处理节点,采用所述文件路径,获取所述游戏资源的文件。
可选地,所述游戏资源的文件包括:游戏美术资源的文件;所述游戏美术资源为采用所述虚幻引擎的烘焙应用,进行烘焙得到的预设操作系统的格式对应的美术资源。
可选地,所述游戏文件为:游戏脚本的文件;所述虚幻引擎中还具有所述其他游戏引擎对应编程语言的虚拟机;所述采用所述其他游戏引擎的文件处理节点,对所述游戏文件进行处理,包括:
采用所述其他游戏引擎的文件处理节点,从所述游戏脚本的文件中,获取所述游戏脚本;
采用所述其他游戏引擎对应编程语言的虚拟机,运行所述游戏脚本。
可选地,所述采用所述其他游戏引擎对应编程语言的虚拟机,运行所述游戏脚本,包括:
采用所述其他游戏引擎对应编程语言的虚拟机,调用所述游戏脚本的文件名,以运行所述游戏脚本。
可选地,所述方法还包括:
采用所述其他游戏引擎对应编程语言的虚拟机,调用所述游戏脚本中的子类时,根据预先记录的子类成员属性记录,对所述子类成员属性记录的子类,进行热更新;其中,所述子类成员属性记录中记录有被所述其他游戏引擎对应编程语言的虚拟机调用的子类的信息。
可选地,所述根据预先记录的子类成员属性记录,对所述子类成员属性记录的子类,进行热更新之前,所述方法还包括:
采用所述其他游戏引擎对应编程语言的虚拟机中,预设的属性获取函数,获取所述子类成员属性记录。
可选地,所述方法还包括:
若所述游戏文件的格式为所述虚幻引擎对应的文件格式,则采用所述虚幻引擎中所述虚幻引擎的文件处理节点对所述游戏文件进行处理。
第二方面,本申请实施例还提供一种虚幻引擎的文件处理装置,所述虚幻引擎中具有其他游戏引擎的文件处理节点,所述装置包括:获取模块、处理模块;
所述获取模块,用于采用所述其他游戏引擎的文件处理节点,获取游戏文件;
所述处理模块,用于获取模块若所述游戏文件的格式为所述其他游戏引擎对应的文件格式,则采用所述其他游戏引擎的文件处理节点,对所述游戏文件进行处理。
可选地,所述处理模块,具体用于采用所述其他游戏引擎的文件处理节点,对所述游戏资源的文件进行处理,以加载所述游戏资源。
可选地,所述获取模块,具体用于采用所述其他游戏引擎的文件处理节点获取文件路径;若所述文件路径为所述其它游戏引擎的文件路径,则由所述其他游戏引擎的文件处理节点,采用所述文件路径,获取所述游戏资源的文件。
可选地,所述获取模块,还用于若所述文件路径为所述虚幻引擎的文件路径,则由所述虚幻引擎的文件处理节点,采用所述文件路径,获取所述游戏资源的文件。
可选地,所述游戏资源的文件包括:游戏美术资源的文件;所述游戏美术资源为采用所述虚幻引擎的烘焙应用,进行烘焙得到的预设操作系统的格式对应的美术资源。
可选地,所述游戏文件为:游戏脚本的文件;所述虚幻引擎中还具有所述其他游戏引擎对应编程语言的虚拟机;所述处理模块,还具体用于采用所述其他游戏引擎的文件处理节点,从所述游戏脚本的文件中,获取所述游戏脚本;
采用所述其他游戏引擎对应编程语言的虚拟机,运行所述游戏脚本。
可选地,所述处理模块,具体用于采用所述其他游戏引擎对应编程语言的虚拟机,调用所述游戏脚本的文件名,以运行所述游戏脚本。
可选地,所述装置还包括:热更新模块;
所述热更新模块,用于采用所述其他游戏引擎对应编程语言的虚拟机,调用所述游戏脚本中的子类时,根据预先记录的子类成员属性记录,对所述子类成员属性记录的子类,进行热更新;其中,所述子类成员属性记录中记录有被所述其他游戏引擎对应编程语言的虚拟机调用的子类的信息。
可选地,所述获取模块,还用于采用所述其他游戏引擎对应编程语言的虚拟机中,预设的属性获取函数,获取所述子类成员属性记录。
可选地,所述处理模块,还用于若所述游戏文件的格式为所述虚幻引擎对应的文件格式,则采用所述虚幻引擎中所述虚幻引擎的文件处理节点对所述游戏文件进行处理。
第三方面,本申请实施例还提供一种处理设备,包括:存储器和处理器,所述存储器存储有所述处理器可执行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所提供的任一虚幻引擎的文件处理方法。
第四方面,本申请实施例还提供一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被读取并执行时,实现上述第一方面所提供的任一虚幻引擎的文件处理方法。
本申请的有益效果是:
本申请所提供的虚幻引擎的文件处理方法、装置、设备及存储介质中,可通过在虚幻引擎的文件系统的操作链节点中添加其他游戏引擎的文件系统,使得在不需要修改虚幻引擎的基础上即可实现其他游戏引擎文件系统的移植,并尽可能对虚幻引擎原有文件系统改动最小,从而可以采用移植后的虚幻引擎的文件系统,获取包含在不同包体格式中的游戏文件。为虚幻引擎的文件系统提供了对多种包体格式游戏文件的支持,使得虚幻引擎的文件系统可以适用于多种不同要求的应用场合。
其次,将游戏资源的文件与游戏脚本的文件分开处理,使得文件处理效率更高。
另外,有效解决了其他游戏引擎的文件系统向虚幻引擎的文件系统移植的过程中,一些第三方源码库的移植、虚幻引擎文件系统的文件路径与其他游戏引擎的文件系统的文件路径不兼容、以及虚幻引擎文件系统的文件路径与其他游戏引擎的文件系统的编译器语法不一致等问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种虚幻引擎的文件处理系统框图;
图2为本申请实施例提供的一种虚幻引擎的文件处理方法的流程示意图;
图3为本申请实施例提供的另一种虚幻引擎的文件处理方法的流程示意图;
图4为本申请实施例提供的另一种虚幻引擎的文件处理方法的流程示意图;
图5为本申请实施例提供的一种虚幻引擎的文件处理装置的示意图;
图6为本申请实施例提供的另一种虚幻引擎的文件处理装置的示意图;
图7为本申请实施例提供的又一种虚幻引擎的文件处理装置的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
需要说明的是,为了提高虚幻引擎(Unreal Engine)的文件处理效率以及扩大文件处理的范围,使得虚幻引擎的文件系统可以提供对多种包体格式的支持。本申请中采用将其他游戏引擎(如Neox引擎)的文件系统移植在虚幻引擎的文件系统中。以使得可以采用移植了其他引擎文件系统的虚幻引擎文件系统提供对多种包体格式的支持,以适用于多种不同要求的应用场合。其中,虚幻引擎例如可以为UE4引擎,也可以为其他版本的虚幻引擎。
另外,在移植过程中还解决了由于两种引擎的编译器不一样、路径形式不一样、第三方库加载形式不一样等带来的问题,并且在加载游戏资源和脚本时分开处理,最终将Neox文件系统移植到UE4上作为文件操作链的一个节点。在UE4中移植了Neox文件系统后,可以在UE4中加载Neox文件系统的多种格式包体。
图1为本申请实施例提供的一种虚幻引擎的文件处理系统框图;该虚幻引擎的文件处理系统可以安装于,可实现本申请所提供的虚幻引擎的文件处理方法的服务器或者处理器上。如图1所示,该虚幻引擎的文件处理系统可以包括多个文件处理模块:游戏资源模块、其他游戏引擎文件处理模块、压缩PAK平台文件处理模块、物理平台文件处理模块、脚本资源模块、编程语言Python虚拟机模块。
其中,游戏资源模块包括多种不同包体格式的游戏资源,其他游戏引擎文件处理模块从游戏资源模块获取游戏资源,并对自身处理模块所支持的包体格式的游戏资源进行读取,对于不能读取的游戏资源,可以通过PAK压缩平台文件处理模块进行读取,而对于通过其他游戏引擎文件处理模块和PAK压缩平台文件处理模块均不能读取的游戏资源,可以采用物理平台文件处理模块进行资源读取,以完成游戏资源的读取加载。
当游戏要运行脚本资源时,可以先从其他游戏引擎文件处理模块中获取编译好的脚本字节码,再交给虚拟机模块执行该字节码。
如下通过多个实例对本申请所提供的虚幻引擎的文件处理方法进行示例说明。
图2为本申请实施例提供的一种虚幻引擎的文件处理方法的流程示意图,该虚幻引擎的文件处理方法可由通过软件和/或硬件的方式实现。该方法的执行主体可以是具备游戏开发功能的处理器或者是服务器。如图2所示,该方法可包括:
S101、采用其他游戏引擎的文件处理节点,获取游戏文件。
S102、若游戏文件的格式为其他游戏引擎对应的文件格式,则采用其他游戏引擎的文件处理节点,对游戏文件进行处理。
需要说明的是,为了使得虚幻引擎的文件系统可以提供对多种包体格式的支持,在采用本实施例提供的虚化引擎文件系统进行文件处理之前,可以将其他游戏引擎(本申请中其他游戏引擎可以为不开源的Neox引擎,本申请以该Neox引擎为例对实施例进行说明。其可以支持多种包体格式,例如:支持流式加载/内存文件/带寄存器cache加载、支持npk(Neox package,Neox引擎中的一种压缩打包格式)、wdf(Neox引擎中的一种不压缩打包格式)、zip压缩格式、ppk(Neox引擎中的一种热更资源专用的包体格式),当然其他游戏引擎并不局限于Neox引擎,也可以为其他一些游戏引擎)的文件系统移植到虚幻引擎UE4的文件系统中。以使得可以采用移植后的虚幻引擎文件系统进行文件处理。其中,npk格式,其格式简单,体积较小,可以用于打包脚本和普通资源,ppk格式的特点是当包体内的文件需要替换时,无需修改原有数据文件而是将索引修改指向新的文件即可,用于patch(游戏内更新资源或者脚本的一种机制)等文件需要替换/修改的场合。
可选地,可以利用虚幻引擎的文件系统的文件操作链特性,在虚幻引擎文件系统的压缩平台文件处理节点上插入其他游戏引擎的文件系统节点,并在该节点上实现了其他游戏引擎的文件系统机制,使得在不需要修改虚幻引擎的文件系统的基础上即可实现其他游戏引擎的文件系统移植。其中,可以通过将其他游戏引擎的文件系统中的多个文件处理模块对应的源代码进行移植来实现,具体的移植过程本申请中不作详细说明,可以采用常规移植手段处理。
可选地,游戏文件可以包括:游戏中所需要的音频资源、视频资源、人物模型资源等任何游戏开发中所需的资源。在游戏启动时,可以将其他游戏引擎的文件处理节点(FNeoxFsPlatformFile)添加至虚幻引擎文件系统的文件操作链的顶端。
以所要获取的游戏文件为npk包体格式或者是pak包体格式为例进行说明。当游戏要读取目标游戏文件(Resource)时,虚幻引擎文件系统会将所要读取的目标游戏文件的路径传给虚幻引擎文件处理系统中的各个节点。可以通过其他游戏引擎的文件处理节点从获取的npk包体格式的游戏文件中查找当前所需的目标游戏文件,若npk包体格式的游戏文件中不存在该目标游戏文件,则可以通过虚幻引擎文件处理节点从pak包体格式的游戏文件中进行查找,若通过虚幻引擎文件处理节点也未查找到目标游戏文件,则最终可以通过物理平台文件处理节点,从磁盘上来读取真实的目标游戏文件,其中,物理平台文件处理节点可以根据不同的应用平台(苹果或者安卓)等来调用对应平台的文件读写接口。
综上所述,本实施例提供的虚幻引擎的文件处理方法,通过在虚幻引擎的文件系统的操作链节点中添加其他游戏引擎的文件系统,使得在不需要修改虚幻引擎的基础上即可实现其他游戏引擎文件系统的移植,并尽可能对虚幻引擎原有文件系统改动最小,从而可以采用移植后的虚幻引擎的文件系统,获取包含在不同包体格式中的游戏文件。为虚幻引擎的文件系统提供了对多种包体格式游戏文件的支持,使得虚幻引擎的文件系统可以适用于多种不同要求的应用场合。
可选地,游戏文件为游戏资源的文件;采用其他游戏引擎的文件处理节点,对游戏文件进行处理,可以包括:采用其他游戏引擎的文件处理节点,对游戏资源的文件进行处理,以加载游戏资源。
在一些实施例中,其他游戏引擎的文件处理节点中封装了对npk包体的挂载、文件访问的封装,可以采用其他游戏引擎的文件处理节点,对打包在npk包体内的游戏资源进行加载,以获取游戏资源文件。
图3为本申请实施例提供的另一种虚幻引擎的文件处理方法的流程示意图,可选地,上述步骤S102中,采用其他游戏引擎的文件处理节点,获取游戏文件,可以包括:
S201、采用其他游戏引擎的文件处理节点获取文件路径。
可选地,在获取游戏资源的文件时,虚幻引擎文件系统可以将待获取游戏资源的文件的路径传送至采用其他游戏引擎的文件处理节点,以使得其他游戏引擎的文件处理节点可以根据游戏资源的文件的路径,在其所支持的包体中获取该游戏资源的文件。
S202、若文件路径为其它游戏引擎的文件路径,则由其他游戏引擎的文件处理节点,采用文件路径,获取游戏资源的文件。
需要说明的是,在虚幻引擎文件系统将待获取游戏资源的文件的路径传送至采用其他游戏引擎的文件处理节点时,是以虚幻引擎文件系统所对应的文件路径形式传送的,其他游戏引擎的文件处理节点可以先对接收到的路径进行转化,以转化为自身可支持的文件路径,并根据文件路径,在自身所支持的包体例如:npk包体中进行查询,若可以查询到该文件路径,则,从路径对应的文件中获取游戏资源的文件。
可选地,采用其他游戏引擎的文件处理节点,获取游戏文件,还可以包括:若文件路径为虚幻引擎的文件路径,则由虚幻引擎的文件处理节点,采用文件路径,获取游戏资源的文件。
可选地,在获取游戏资源的文件时,虚幻引擎文件系统同时也可以将待获取游戏资源的文件的路径传送至虚幻引擎的文件处理节点,若待获取游戏资源的文件不存在于其他游戏引擎的文件处理节点所支持的npk包体中时,可以进一步地通过虚幻引擎的文件处理节点,在虚幻引擎的文件处理节点所支持的pak包体中根据文件路径进行查询,以获取游戏资源的文件。
而当通过其他游戏引擎的文件处理节点、以及虚幻引擎的文件处理节点均未获取到游戏资源的文件,可以通过物理平台文件处理节点,根据文件路径,在磁盘中获取该游戏资源的文件。需要说明的是,该物理平台文件处理节点为虚幻引擎文件系统的文件操作链上的最后一个节点,对于任意的游戏资源的文件,最终可以通过该节点从磁盘中获取。
可选地,游戏资源的文件包括:游戏美术资源的文件;游戏美术资源为采用虚幻引擎的烘焙应用,进行烘焙得到的预设操作系统的格式对应的美术资源。
需要说明的是,游戏美术资源的文件可以包括:游戏场景文件、人物模型文件等。在一些实施例中,游戏资源的文件中包括的游戏资源的文件也是采用npk包体打包的,对于游戏美术资源的文件的打包,可以使用虚幻引擎文件系统自带的烘焙(Cook,就是把原始资源格式比如png等转换成对应平台图形处理器GPU所支持的格式)工具将美术资源的文件烘焙成对应平台(iOS苹果或者Android安卓)格式(比如安卓是ETC格式)的资源后,再将这些资源用npk打包。虚幻引擎文件系统烘焙之后的美术资源的文件可以存放在路径“Saved\StagedBuilds\平台名”中。
在一些实施例中,在将其他游戏引擎的文件系统移植到虚拟引擎的文件系统中时,可以将其他游戏引擎的文件系统中包含的多个文件系统模块,例如:nxnpk(npk文件系统模块)、nxppk(ppk文件系统模块)、nxstreamfile(数据流文件系统模块)、nxfile(普通文件系统模块)、nxmemoryfile(内存文件系统模块)等进行移植。
可选地,本申请提供的虚幻引擎的文件系统中还可以包括有zlib(数据压缩函式库)、lz4(无损压缩库)、boost(C++程序库)等第三方源码库,以使得虚幻引擎的文件系统可以提供其他游戏引擎的文件系统移植过程中所依赖的第三方源码库。
另外,本实施例中,还可以在其他游戏引擎的文件系统中配置文件操作接口,例如:Neox-UE4中间层文件操作接口nxuerealfile,用来处理路径不兼容问题,可选地,当到其他游戏引擎的文件系统的节点获取到的文件路径为虚幻引擎文件系统的标准文件路径时,可以通过nxuerealfile将该标准路径转换为绝对路径,其中,绝对路径为其他游戏引擎的文件系统可支持的路径形式,从而为其他游戏引擎的文件处理节点读取虚幻引擎文件路径对应的文件提供支持。当然,当其他游戏引擎不为Neox引擎时,假设A引擎,那么上述配置的文件操作接口相应的也可以为(A-UE4中间层文件操作接口)。
可选地,可以按照虚幻引擎文件系统中文件路径的具体规则分类处理:
(1)标准文件路径
以../../..开头,比如../../../XC2/Content/Scripts,
FPaths::ProjectDir()系列函数通常取到的就是标准文件路径,不能直接被其他游戏引擎的文件处理节点打开(open/fopen)。
(2)包体(pak)中的文件路径
以/开头(但以/不一定为包体路径),比如/Content/Scripts,通常认为不可写。
(3)绝对路径
文件的真实路径,比如:
/storage/emulated/0/UE4Game/XC2/Content/Scripts,可被其他游戏引擎的文件处理节点直接open/fopen,也即,绝对路径可以直接用C标准库的接口来读写文件。
需要说明的是,虚幻引擎文件系统自己的编译工具UBT(它对现有C++编译器作了一些修改,某些C++语法在这个编译器上不支持)禁用了部分C/C++语法,比如指针强转整数。故,可以将原有虚幻引擎文件系统不支持语法的代码用更老版本的C++语法(虚幻引擎文件系统所能支持的)去改写,以使得虚幻引擎文件系统的文件路径与其他游戏引擎的文件系统的编译器语法达到一致。
图4为本申请实施例提供的另一种虚幻引擎的文件处理方法的流程示意图,可选地,游戏文件为:游戏脚本的文件;虚幻引擎中还具有其他游戏引擎对应编程语言的虚拟机;如图4所示,上述步骤S102中,采用其他游戏引擎的文件处理节点,对游戏文件进行处理,可以包括:
S301、采用其他游戏引擎的文件处理节点,从游戏脚本的文件中,获取游戏脚本。
需要说明的是,上述游戏脚本的文件中包含的即为游戏脚本,通过对游戏脚本的文件进行解密,可以获取其中包含的游戏脚本。本申请中,可以对游戏文件为游戏资源的文件、以及为游戏脚本的文件分开进行处理。上述对游戏文件为游戏资源的文件的处理方法进行了解释说明。本实施例中,对游戏文件为游戏脚本的文件的处理进行解释说明。
可选地,本实施例中的游戏资源的文件为编程语言Python编写的文件,其是采用npk包体格式进行加密打包和发布的。故,可以通过其他游戏引擎的文件处理节点,从npk包体中获取游戏脚本。
S302、采用其他游戏引擎对应编程语言的虚拟机,运行游戏脚本。
需要说明的是,虚幻引擎的文件系统本身没有提供python脚本打包功能,要运行游戏资源的脚本,同样需要移植python虚拟机,这里直接用了开源的虚幻引擎的开源插件UnrealEnginePython进行python虚拟机的移植,移植过程不做具体说明。
在上述获取到游戏脚本后,可以将该游戏脚本发送至python虚拟机,以使得python虚拟机去执行获取到的游戏脚本中的脚本字节码。
可选地,上述步骤S302中,采用其他游戏引擎对应编程语言的虚拟机,运行游戏脚本,可以包括:采用其他游戏引擎对应编程语言的虚拟机,调用游戏脚本的文件名,以运行游戏脚本。
在一些实施例中,python虚拟机获取到游戏脚本的文件中包含的游戏脚本后,可以调用该游戏脚本的文件名,以运行游戏脚本中的脚本字节码。
可选地,除了虚拟机移植之外,本申请还有如下特性:
(1)基于虚幻引擎的文件系统接口的文件读写
Python自带的import(导入)文件操作,基于标准文件接口无法获取真实路径,可以通过path_hook(导入路径钩子)使import时调用虚幻引擎的文件系统接口。
(2)支持qa目录(用来调试的目录,可以临时修改代码而不需要重新打包)
方便临时修改脚本不需重新打包,只要拷贝到qa目录即可。
(3)解决引入故障Python Import“BUG”
采用相对路径和绝对路径import一个模块时,会生成两个重复模块,并且有各自的数据。例如分别写import a.b.c和import c会有BUG。可选地,本实施例中统一不带路径,直接import文件名(比如不写import a.b.c就写importc)。
可选地,本申请的方法还包括:采用其他游戏引擎对应编程语言的虚拟机,调用游戏脚本中的子类时,根据预先记录的子类成员属性记录,对子类成员属性记录的子类,进行热更新;其中,子类成员属性记录中记录有被其他游戏引擎对应编程语言的虚拟机调用的子类的信息。
在一些实施例中,可以在SubClass类(继承自虚幻引擎中游戏脚本的子类)被import的时候,添加一个__xdict__(用来记录需热更的属性)属性记录,以便xupdate(热更新)时使用。其中,__xdict__记录了import时该SubClass类的成员。
在另一些实施例中,添加对PyUObject类型(每一个C++对象对应都有一个Python对象,两者的一起记录在PyUObject中)的热更支持。热更时更新的成员变成了__xdict__,依次对旧SubClass的类方法/成员进行传统热更。
可选地,根据预先记录的子类成员属性记录,对子类成员属性记录的子类,进行热更新之前,方法还可以包括:采用其他游戏引擎对应编程语言的虚拟机中,预设的属性获取函数,获取子类成员属性记录。
由于上述步骤本质上是修改func_code(函数代码)达到目的,但热更新添加的方法不会被getattr(属性获取函数)找到,一个直接的方法是为每个对象的__dict__(python中用以对象普通属性的字典)添加该新方法;一个更好的方法是,修改getattr/setattr使得对象能够通过类的__xdict__获取到新成员。
可选地,本申请的方法还可以包括:若游戏文件的格式为虚幻引擎对应的文件格式,则采用虚幻引擎中虚幻引擎的文件处理节点对游戏文件进行处理。对于该步骤的具体解释,已在上述进行了详细说明,此处不再一一赘述。
需要说明的是,本申请中,是针对其他游戏引擎的文件系统中的npk包体格式的文件的处理方法进行了说明,对于其他游戏引擎的文件系统中的其他包体格式,例如:ppk格式、wdf格式等文件的处理,与npk包体格式的文件的处理方法类似,此处不再一一赘述。
综上所述,本申请所提供的虚幻引擎的文件处理方法,通过在虚幻引擎的文件系统的操作链节点中添加其他游戏引擎的文件系统,使得在不需要修改虚幻引擎的基础上即可实现其他游戏引擎文件系统的移植,并尽可能对虚幻引擎原有文件系统改动最小,从而可以采用移植后的虚幻引擎的文件系统,获取包含在不同包体格式中的游戏文件。为虚幻引擎的文件系统提供了对多种包体格式游戏文件的支持,使得虚幻引擎的文件系统可以适用于多种不同要求的应用场合。
其次,将游戏资源的文件与游戏脚本的文件分开处理,使得文件处理效率更高。
另外,有效解决了其他游戏引擎的文件系统向虚幻引擎的文件系统移植的过程中,一些第三方源码库的移植、虚幻引擎文件系统的文件路径与其他游戏引擎的文件系统的文件路径不兼容、以及虚幻引擎文件系统的文件路径与其他游戏引擎的文件系统的编译器语法不一致等问题。
下述对用以执行的本申请所提供的虚幻引擎的文件处理方法的装置、设备及存储介质等进行说明,其具体的实现过程以及技术效果参见上述,下述不再赘述。
图5为本申请实施例提供的一种虚幻引擎的文件处理装置的示意图,该虚幻引擎中具有其他游戏引擎的文件处理节点。如图5所示,该虚幻引擎的文件处理装置可包括:获取模块501、处理模块502;
获取模块501,用于采用其他游戏引擎的文件处理节点,获取游戏文件;
处理模块502,用于获取模块若游戏文件的格式为其他游戏引擎对应的文件格式,则采用其他游戏引擎的文件处理节点,对游戏文件进行处理。
可选地,处理模块502,具体用于采用其他游戏引擎的文件处理节点,对游戏资源的文件进行处理,以加载游戏资源。
可选地,获取模块501,具体用于采用其他游戏引擎的文件处理节点获取文件路径;若文件路径为其它游戏引擎的文件路径,则由其他游戏引擎的文件处理节点,采用文件路径,获取游戏资源的文件。
可选地,获取模块501,还用于若文件路径为虚幻引擎的文件路径,则由虚幻引擎的文件处理节点,采用文件路径,获取游戏资源的文件。
可选地,游戏资源的文件包括:游戏美术资源的文件;游戏美术资源为采用虚幻引擎的烘焙应用,进行烘焙得到的预设操作系统的格式对应的美术资源。
可选地,游戏文件为:游戏脚本的文件;虚幻引擎中还具有其他游戏引擎对应编程语言的虚拟机;处理模块,还具体用于采用其他游戏引擎的文件处理节点,从游戏脚本的文件中,获取游戏脚本;采用其他游戏引擎对应编程语言的虚拟机,运行游戏脚本。
可选地,处理模块502,具体用于采用其他游戏引擎对应编程语言的虚拟机,调用游戏脚本的文件名,以运行游戏脚本。
可选地,如图6所示,装置还包括:热更新模块503;
热更新模块503,用于采用其他游戏引擎对应编程语言的虚拟机,调用游戏脚本中的子类时,根据预先记录的子类成员属性记录,对子类成员属性记录的子类,进行热更新;其中,子类成员属性记录中记录有被其他游戏引擎对应编程语言的虚拟机调用的子类的信息。
可选地,获取模块501,还用于采用其他游戏引擎对应编程语言的虚拟机中,预设的属性获取函数,获取子类成员属性记录。
可选地,处理模块502,还用于若游戏文件的格式为虚幻引擎对应的文件格式,则采用虚幻引擎中虚幻引擎的文件处理节点对游戏文件进行处理。
上述装置用于执行前述实施例提供的方法,其实现原理和技术效果类似,在此不再赘述。
以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器(digital singnal processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(CentralProcessing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。
图7为本申请实施例提供的又一种虚幻引擎的文件处理装置的示意图,该装置可以集成于设备或者设备的芯片,该设备可以是具备游戏资源处理功能的计算设备或服务器。
该虚幻引擎的文件处理装置包括:存储器701、处理器702。存储器701和处理器702通过总线连接。
存储器701用于存储程序,处理器702调用存储器701存储的程序,以执行上述方法实施例。具体实现方式和技术效果类似,这里不再赘述。
可选地,本发明还提供一种程序产品,例如计算机可读存储介质,包括程序,该程序在被处理器执行时用于执行上述方法实施例。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (12)
1.一种虚幻引擎的文件处理方法,其特征在于,所述虚幻引擎中具有其他游戏引擎的文件处理节点,所述方法包括:
采用所述其他游戏引擎的文件处理节点,获取游戏文件;所述其他游戏引擎的文件处理节点在所述虚幻引擎文件系统的压缩平台文件处理节点上插入;
若所述游戏文件的格式为所述其他游戏引擎对应的文件格式,则采用所述其他游戏引擎的文件处理节点,对所述游戏文件进行处理;
所述游戏文件为:游戏脚本的文件;所述虚幻引擎中还具有所述其他游戏引擎对应编程语言的虚拟机;所述采用所述其他游戏引擎的文件处理节点,对所述游戏文件进行处理,包括:
采用所述其他游戏引擎的文件处理节点,从所述游戏脚本的文件中,获取所述游戏脚本;
采用所述其他游戏引擎对应编程语言的虚拟机,运行所述游戏脚本。
2.根据权利要求1所述的方法,其特征在于,所述游戏文件为游戏资源的文件;所述采用所述其他游戏引擎的文件处理节点,对所述游戏文件进行处理,包括:
采用所述其他游戏引擎的文件处理节点,对所述游戏资源的文件进行处理,以加载所述游戏资源。
3.根据权利要求2所述的方法,其特征在于,所述采用所述其他游戏引擎的文件处理节点,获取游戏文件,包括:
采用所述其他游戏引擎的文件处理节点获取文件路径;
若所述文件路径为所述其他游戏引擎的文件路径,则由所述其他游戏引擎的文件处理节点,采用所述文件路径,获取所述游戏资源的文件。
4.根据权利要求2所述的方法,其特征在于,所述采用所述其他游戏引擎的文件处理节点,获取游戏文件,还包括:
若文件路径为所述虚幻引擎的文件路径,则由所述虚幻引擎的文件处理节点,采用所述文件路径,获取所述游戏资源的文件。
5.根据权利要求2所述的方法,其特征在于,所述游戏资源的文件包括:游戏美术资源的文件;所述游戏美术资源为采用所述虚幻引擎的烘焙应用,进行烘焙得到的预设操作系统的格式对应的美术资源。
6.根据权利要求1所述的方法,其特征在于,所述采用所述其他游戏引擎对应编程语言的虚拟机,运行所述游戏脚本,包括:
采用所述其他游戏引擎对应编程语言的虚拟机,调用所述游戏脚本的文件名,以运行所述游戏脚本。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
采用所述其他游戏引擎对应编程语言的虚拟机,调用所述游戏脚本中的子类时,根据预先记录的子类成员属性记录,对所述子类成员属性记录的子类,进行热更新;其中,所述子类成员属性记录中记录有被所述其他游戏引擎对应编程语言的虚拟机调用的子类的信息。
8.根据权利要求7所述的方法,其特征在于,所述根据预先记录的子类成员属性记录,对所述子类成员属性记录的子类,进行热更新之前,所述方法还包括:
采用所述其他游戏引擎对应编程语言的虚拟机中,预设的属性获取函数,获取所述子类成员属性记录。
9.根据权利要求1-8中任一所述的方法,其特征在于,所述方法还包括:
若所述游戏文件的格式为所述虚幻引擎对应的文件格式,则采用所述虚幻引擎中所述虚幻引擎的文件处理节点对所述游戏文件进行处理。
10.一种虚幻引擎的文件处理装置,所述虚幻引擎中具有其他游戏引擎的文件处理节点,其特征在于,包括:获取模块、处理模块;
所述获取模块,用于采用所述其他游戏引擎的文件处理节点,获取游戏文件;所述其他游戏引擎的文件处理节点在所述虚幻引擎文件系统的压缩平台文件处理节点上插入;
所述处理模块,用于若所述游戏文件的格式为所述其他游戏引擎对应的文件格式,则采用所述其他游戏引擎的文件处理节点,对所述游戏文件进行处理;
所述游戏文件为:游戏脚本的文件;所述虚幻引擎中还具有所述其他游戏引擎对应编程语言的虚拟机;所述处理模块,还具体用于采用所述其他游戏引擎的文件处理节点,从所述游戏脚本的文件中,获取所述游戏脚本;采用所述其他游戏引擎对应编程语言的虚拟机,运行所述游戏脚本。
11.一种处理设备,其特征在于,包括:存储器和处理器,所述存储器存储有所述处理器可执行的计算机程序,所述处理器执行所述计算机程序时实现上述权利要求1-9任一项所述的虚幻引擎的文件处理方法。
12.一种存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被读取并执行时,实现上述权利要求1-9任一项所述的虚幻引擎的文件处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010184526.5A CN111359219B (zh) | 2020-03-16 | 2020-03-16 | 虚幻引擎的文件处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010184526.5A CN111359219B (zh) | 2020-03-16 | 2020-03-16 | 虚幻引擎的文件处理方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111359219A CN111359219A (zh) | 2020-07-03 |
CN111359219B true CN111359219B (zh) | 2023-09-26 |
Family
ID=71200468
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010184526.5A Active CN111359219B (zh) | 2020-03-16 | 2020-03-16 | 虚幻引擎的文件处理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111359219B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112596713B (zh) * | 2020-12-30 | 2024-02-06 | 深圳须弥云图空间科技有限公司 | 基于虚幻引擎的处理方法、装置、电子设备及存储介质 |
CN113450463B (zh) * | 2021-07-01 | 2023-07-21 | 网易(杭州)网络有限公司 | 预制体的转换方法和装置 |
CN115826933B (zh) * | 2023-02-14 | 2023-06-13 | 成都曾自科技有限公司 | 编辑器下加载使用Cook后资源的方法、装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622236A (zh) * | 2012-01-13 | 2012-08-01 | 深圳市妙趣工场信息科技有限公司 | 一种Geart3D游戏引擎 |
CN103425491A (zh) * | 2013-07-30 | 2013-12-04 | 广州市动景计算机科技有限公司 | 一种游戏引擎 |
CN106325866A (zh) * | 2016-08-22 | 2017-01-11 | 网易(杭州)网络有限公司 | 跨引擎调用方法及装置 |
-
2020
- 2020-03-16 CN CN202010184526.5A patent/CN111359219B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622236A (zh) * | 2012-01-13 | 2012-08-01 | 深圳市妙趣工场信息科技有限公司 | 一种Geart3D游戏引擎 |
CN103425491A (zh) * | 2013-07-30 | 2013-12-04 | 广州市动景计算机科技有限公司 | 一种游戏引擎 |
CN106325866A (zh) * | 2016-08-22 | 2017-01-11 | 网易(杭州)网络有限公司 | 跨引擎调用方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111359219A (zh) | 2020-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111359219B (zh) | 虚幻引擎的文件处理方法、装置、设备及存储介质 | |
CN109542506B (zh) | 一种可灵活配置接口和快速交付服务的系统 | |
CN109491695A (zh) | 一种集成安卓应用的增量更新方法 | |
CN109408393B (zh) | 应用测试方法、装置及设备和计算机可读存储介质 | |
CN111176717B (zh) | 生成安装包的方法、装置及电子设备 | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
CN107357607B (zh) | 文件数据的读取方法及装置 | |
CN112835975B (zh) | 一种在区块链中部署、更新、调用智能合约的方法 | |
WO2020259163A1 (zh) | 设备部署方法及装置、设备运行方法及电子设备 | |
CN111880777A (zh) | 程序信息下发方法、装置、电子设备 | |
CN102012954A (zh) | 用于系统芯片集成设计的子系统集成方法及其子系统集成系统 | |
WO2024045379A1 (zh) | 编译方法和编译器、Wasm虚拟机 | |
CN115629971A (zh) | 一种应用的开发系统和开发方法 | |
CN111740948A (zh) | 数据包发布方法、动态更新方法、装置、设备及介质 | |
CN115756451A (zh) | 一种多项目代码文件重用的方法、装置、设备、存储介质 | |
CN111562929A (zh) | 补丁文件的生成方法、装置、设备及存储介质 | |
CN111506368A (zh) | 对异步调用转同步调用的方法、装置、设备及存储介质 | |
CN114528204A (zh) | 处理代码的方法、处理异常的方法以及各自的装置 | |
CN111475150B (zh) | 一种跨语言绑定方法、装置、设备及存储介质 | |
CN110941443B (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
CN107315596A (zh) | 一种代码自动打包部署方法和装置 | |
CN116243923A (zh) | 一种小程序处理方法、装置及电子设备 | |
CN114840195A (zh) | 一种针对iOS SDK静态库的私有化方法 | |
CN111399896B (zh) | 补丁获取方法、装置、设备及存储介质 | |
CN114911541A (zh) | 配置信息的处理方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |