文件加载方法、装置、设备及计算机可读存储介质与流程

    专利查询2023-07-08  135



    1.本技术涉及文件处理技术,尤其涉及一种文件加载方法、装置、设备及计算机可读存储介质。


    背景技术:

    2.目前,引擎在加载虚拟场景文件时,由于虚拟场景文件保留了编辑器显示虚拟场景中虚拟对象的嵌套层次,但是在处理复杂虚拟场景时候会出现嵌套极深的层次结构,还约束了引擎只能严格的按照从高到低依次对文件中的虚拟对象进行实例化,从而极大影响了引擎加载虚拟场景文件的效率。而有的虚拟场景文件通过文件头部哈希(hash)值来定位场景或者预制件文件,通过虚拟对象哈希值或虚拟组件哈希值来定位某个文件中特定的属性值,在加载场景过程中实例化某个虚拟对象时候,又需要根据存储有组件哈希值跳转到不同文件的不同位置才能获取到完整的游戏对象组件数据。这种方式为了获取每个虚拟对象的完整数据需要耗费很多的性能损失,同样也会降低虚拟场景文件的加载速度。


    技术实现要素:

    3.本技术实施例提供一种文件加载方法、装置及计算机可读存储介质,能够提高文件加载速度。
    4.本技术实施例的技术方案是这样实现的:
    5.本技术实施例提供一种文件加载方法,包括:
    6.获取待加载文件,所述待加载文件中包括多个虚拟对象的对象信息,所述多个虚拟对象的对象信息之间无嵌套关系;
    7.从各个虚拟对象的对象信息中获取所述各个虚拟对象的组件信息,并基于所述各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间;
    8.获取所述各个虚拟对象的对象类型,并基于所述各个虚拟对象的对象类型和组件信息为各个虚拟对象运行时的内存空间进行信息填充;
    9.基于各个虚拟对象的对象信息构建所述各个虚拟对象之间的层次结构,并基于所述层次结构显示所述各个虚拟对象。
    10.本技术实施例提供一种文件加载装置,包括:。
    11.第一获取模块,用于获取待加载文件,所述待加载文件中包括多个虚拟对象的对象信息,所述多个虚拟对象的对象信息之间无嵌套关系;
    12.第二获取模块,用于从各个虚拟对象的对象信息中获取所述各个虚拟对象的组件信息,并基于所述各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间;
    13.信息填充模块,用于获取所述各个虚拟对象的对象类型,并基于所述各个虚拟对象的对象类型和组件信息为各个虚拟对象运行时的内存空间进行信息填充;
    14.层次构建模块,用于基于各个虚拟对象的对象信息构建所述各个虚拟对象之间的层次结构,并基于所述层次结构显示所述各个虚拟对象。
    15.在一些实施例中,对象信息包括虚拟对象的属性信息和组件信息,对应的第二获取模块,还用于:
    16.从第i个虚拟对象的对象信息中直接获取所述第i个虚拟对象中所包括的各个组件的组件标识和所述各个组件的组件内容信息,其中i=1,2,

    ,n,n为虚拟对象总数。
    17.在一些实施例中,该第二获取模块,还用于:
    18.从所述各个虚拟对象的属性信息中获取所述各个虚拟对象的组件组合信息;
    19.基于所述组件组合信息,确定所述各个虚拟对象所包含的组件标识;
    20.基于所述各个虚拟对象所包含的组件标识分配出各个虚拟对象运行时的内存空间。
    21.在一些实施例中,该信息填充模块,还用于:
    22.基于第i个虚拟对象的对象类型和组件信息确定所述第i个虚拟对象运行时的组件填充信息;
    23.基于所述第i个虚拟对象中所包括的各个组件的组件标识确定所述各个组件对应的组件系统;
    24.利用所述各个组件对应的组件系统中的反序列化函数将所述组件填充信息填充到所述各个虚拟对象运行时的内存空间。
    25.在一些实施例中,该信息填充模块,还用于:
    26.当所述第i个虚拟对象的对象类型为场景自创对象时,将所述各个组件的组件内容信息确定为所述第i个虚拟对象运行时的组件填充信息。
    27.在一些实施例中,该信息填充模块,还用于:
    28.当所述第i个虚拟对象的对象类型为预制件实例对象时,基于所述第i个虚拟对象的属性信息确定所述第i个虚拟对象的原始预制件路径和预制件实例标识;
    29.基于所述原始预制件路径和所述预制件实例标识获取原始组件信息;
    30.确定所述第i个虚拟对象的组件信息是否为空;
    31.当所述第i个虚拟对象的组件信息为空时,将所述原始组件信息确定为所述第i个虚拟对象运行时的组件填充信息。
    32.在一些实施例中,该信息填充模块,还用于:
    33.当所述第i个虚拟对象的组件信息不为空时,确定所述第i个虚拟对象是否包含删除组件;
    34.当所述第i个虚拟对象包含删除组件时,获取所述删除组件对应的组件内容信息,所述组件内容信息包括已删除组件标识;
    35.将其他组件的组件内容信息确定为所述其他组件的差异信息,所述其他组件为所述第i个虚拟对象除所述删除组件之外的组件;
    36.基于所述原始组件信息、所述已删除组件标识和所述其他组件的差异信息确定所述第i个虚拟对象的组件填充信息。
    37.在一些实施例中,该信息填充模块,还用于:
    38.将所述原始组件信息中所述已删除组件标识对应的组件信息删除,得到删除后的组件信息;
    39.基于所述其他组件的差异信息对所述删除后的组件信息进行更新,得到更新后的
    组件信息;
    40.将所述更新后的组件信息确定为所述第i个虚拟对象的组件填充信息。
    41.在一些实施例中,该信息填充模块,还用于:
    42.当所述第i个虚拟对象不包含删除组件时,将所述各个组件的组件内容信息确定为所述各个组件的差异信息;
    43.基于所述原始组件信息和所述各个组件的差异信息确定所述第i个虚拟对象的组件填充信息。
    44.在一些实施例中,该层次构建模块,还用于:
    45.从所述各个虚拟对象的对象信息中获取所述各个虚拟对象的层次信息,所述层次信息包括所述虚拟对象的父对象的对象标识、所述虚拟对象的子对象的对象标识、所述虚拟对象的前一个兄弟对象的对象标识、所述虚拟对象的后一个兄弟对象的对象标识;
    46.基于所述各个虚拟对象的层次信息,构建所述各个虚拟对象之间的层次结构。
    47.本技术实施例提供一种计算机设备,包括:
    48.存储器,用于存储可执行指令;
    49.处理器,用于执行所述存储器中存储的可执行指令时,实现本技术实施例提供的文件加载方法。
    50.本技术实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本技术实施例提供的文件加载方法。
    51.本技术实施例具有以下有益效果:
    52.在获取到待加载文件之后,该待加载文件中包括多个虚拟对象的对象信息,从各个虚拟对象的对象信息中获取所述各个虚拟对象的组件信息,并基于所述各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间;获取所述各个虚拟对象的对象类型,并基于所述各个虚拟对象的对象类型和组件信息为各个虚拟对象运行时的内存空间进行信息填充,之后基于各个虚拟对象的对象信息构建所述各个虚拟对象之间的层次结构,并基于所述层次结构显示所述各个虚拟对象。由于在待加载文件中多个虚拟对象的对象信息之间无嵌套关系,也即多个虚拟对象的对象信息是展平存储的,从而能够避免层次结构上的深度嵌套,另外在加载文件时,先通过对象信息分配出各个虚拟对象运行时的内存空间,然后再根据组件信息并行为各个虚拟对象运行时的内存空间进行信息填充,能够提高文件加载速度,从而提高引擎加载文件的性能。
    附图说明
    53.图1a为游戏场景示意图;
    54.图1b为只有一个游戏对象组成的预制件示意图;
    55.图1c为游戏场景、预制件、预制件实例的关系图;
    56.图1d为游戏场景文件和预制件文件包含内容的示意图;
    57.图1e为相关技术中场景文件的文件内容示意图;
    58.图2是本技术实施例提供的文件加载系统架构的结构示意图;
    59.图3是本技术实施例提供的文件加载终端400的结构示意图;
    60.图4是本技术实施例提供的文件加载方法的一种实现流程示意图;
    61.图5是本技术实施例提供的确定组件填充信息的实现流程示意图;;
    62.图6a是引擎中不同组件和组件系统的对应关系示意图;
    63.图6b是各个虚拟对象的层次结构示意图;
    64.图7a为本技术实施例提供的场景文件和预制件文件的应用软件环境示意图;
    65.图7b为本技术实施例提供的游戏安装包内容示意图;
    66.图8为本技术实施例提供的文件格式的整体框架示意图;
    67.图9为本技术实施例提供的文件头部信息示意图;
    68.图10为本技术实施例提供的文件格式中文件主体内容的示意图;
    69.图11为本技术实施例提供的预制件实例中游戏对象和所对应预制件中游戏对象的差异信息的示意图;
    70.图12为本技术实施例提供的差异信息的存储示意图;
    71.图13为本技术实施例提供的预制件实例的文件格式示意图。
    具体实施方式
    72.为了使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术作进一步地详细描述,所描述的实施例不应视为对本技术的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本技术保护的范围。
    73.在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
    74.在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本技术实施例能够以除了在这里图示或描述的以外的顺序实施。
    75.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本技术实施例的目的,不是旨在限制本技术。
    76.对本技术实施例进行进一步详细说明之前,对本技术实施例中涉及的名词和术语进行说明,本技术实施例中涉及的名词和术语适用于如下的解释。
    77.1)组件(component),描述游戏对象的某类功能的若干属性的集合。根据功能的不同,一个游戏对象实际拥有若干组件。
    78.2)游戏对象(gameobject),在游戏开发过程中用以挂载各种系统组件的基本单位。
    79.3)游戏场景(scene),包含一组游戏对象以描述游戏内容的对象。
    80.4)预制件(prefab),由一个或者多个游戏对象组成的可复用资源模板,用于加速游戏场景搭建。
    81.5)预制件实例(prefabinstance),在游戏编辑器中使用prefab快速创建出的一组游戏对象。
    82.6)键值对,以关键字来索引对应的值的方式。关键字通常是基础类型,通常是字符
    串,数字等。而值可以是复合类型,如数组。
    83.为了更好地理解本技术实施例提供的游戏数据渲染方法,首先对相关技术中的用于渲染的游戏场景文件和预制件文件进行说明。图1a展示了一个的游戏场景。该场景由4个游戏对象组成,其中球体(sphere)游戏对象111是平面(plane)游戏对象112的父子节点。立方体(cube)游戏对象113和cube2游戏对象114分别是sphere的兄弟对象。
    84.图1b为只有一个游戏对象组成的预制件示意图。通过把预制件往场景中拖动,可以创建出预制件实例。如图1a中的cube游戏对象和cube2游戏对象分别是两个预制件实例。
    85.图1c为游戏场景、预制件、预制件实例的关系图。以游戏对象1为例进行说明,如图1c所示,游戏对象1对应的预制件文件中包括游戏对象1的自身数据和各个组件的json数据,把美术制作好的预制件拖动到游戏场景后,会在游戏场景中根据预制件(prefab)文件中的游戏对象和组件的数据生成真正的运行时状态的游戏对象,而这些由prefab创建出来的游戏对象来自于同一个预制件实例(prefab instance)。用户在修改游戏场景中的游戏对象(gameobject)1和游戏对象中的组件信息的时候,预制件实例会维护游戏场景和预制件中存储信息的差异信息。
    86.图1d为游戏场景文件和预制件文件包含内容的示意图,如图1d所示,游戏场景文件包括游戏对象信息、烘焙信息、寻路信息和其他场景信息,并且游戏场景中的游戏对象信息中包括游戏场景自身创建的游戏对象的信息,以及由预制件创建出来,由预制件实例管理的游戏对象的信息。因为预制件是用来产生游戏对象的模板,所以不会包含非游戏对象有关的数据,因此,预制件文件中仅包括游戏对象信息。
    87.图1e为相关技术中场景文件的文件内容示意图,在图1e中示出了相关技术中游戏引擎常用的两种场景文件的格式。当游戏引擎使用场景文件1作为场景文件保存格式时,其使用的预制件文件格式除了不包含图1e中所示的烘培、寻路等场景信息之外基本和场景文件1保持一致。该文件格式展平了游戏对象和组件的所有存储关系。游戏对象之间的嵌套关系由变换(transform)组件(会维护当前游戏对象的父子游戏对象的)来维护。而游戏对象中会存储自己含有组件的哈希值。根据组件哈希值可以在文件中找到对应组件信息,根据这些信息就可以在引擎中实例化出运行时候的游戏对象。而针对预制件实例中的游戏对象,该文件格式需要根据自己维护的差异信息和对应预制件中游戏对象的所有组件信息恢复成真正的组件信息,从而在引擎中实例化出运行时的游戏对象。
    88.部分游戏引擎使用图1e中场景文件2的文件格式来存储场景文件。该文件格式会直接根据缩进或者是诸如xml标记语言等自带的层次结构来管理游戏对象的嵌套。每个游戏对象的的组件内容都会在自己的子层次结构中。而基于该类型的场景内容很少考虑预制件在场景使用的情况。
    89.以下对上述两种场景文件的文件格式存在的缺点进行说明
    90.场景文件1采用了展平所有的游戏对象和游戏组件的文件格式来描述场景和预制件。其通过图1e所示的文件头部信息的头部hash值来定位场景或者预制件文件,通过游戏内容hash值(如游戏对象哈希值、游戏组件哈希值)定位某个文件中特定的属性值。该方案首先需要游戏引擎维护一个全局的hash值和文件对应关系的管理器以对一个文件hash值中知道其对应磁盘上的哪个文件。当修改场景或者预制件内容时候,场景和预制件文件的hash值会发生变化,需要同步到有关联的地方。此方案实现非常复杂,而且当场景或者预制
    件发生修改时,因为hash值也会发生改变。其次,该方案在加载场景过程中实例化某个游戏对象时候,又需要根据存储有组件哈希值(图1e中游戏对象里面的组件哈希值1、2

    n)跳转到不同文件的不同位置才能获取到完整的游戏对象组件数据。这种方式为了获取每个gameobject的完整数据需要耗费很多的性能损失。
    91.此外,该方案针对预制件实例部分的信息也是根据文件哈希,游戏内容哈希找到prefab文件中对应的游戏对象的内容或者游戏组件内容,然后根据预制件实例中存储的值根据差异字符串(组件属性构成的字符串,比如transformcomponent中translation属性中的x坐标属性,差异字符串就类似于“translation.x”)对游戏对象的内容或者游戏组件内容进行更新,拿更新完后的数据在引擎中实例化游戏对象。这种文件中存有的差异字符串来同步prefabinstance和prefab的变化以获取完成游戏对象数据的方式较为复杂,也非常耗费性能。
    92.场景文件2虽然结构简洁,保留了编辑器显示游戏场景中游戏对象的嵌套层次,但是在处理复杂游戏场景时候会出现嵌套极深的层次结构,还约束了引擎只能严格的按照从高到低依次对文件中的游戏对象进行实例化。此外,这种文件格式也难以支持预制件有关能力。
    93.基于以上问题,本技术实施例提出一种文件加载方法,在该文件加载方法中使用一种能同时支持表达预制件和场景的文件格式,而且避免了相关技术中场景文件1中采用哈希值索引文件内容和差异字符串来表带来实现复杂度和性能开销。此外,本技术实施例描述gameobject和组件(component)的方式可以应用于多种引擎加载场景和预制件的实现方式,而不是局限于从文件中若干gameobject开始基于嵌套的解析出所有内容。本技术实施例提供的的文件格式可以支持不同引擎架构,可以满足部分引擎以若干组件的组合类型为粒度来实例化游戏对象的需求,提升引擎的性能。
    94.本技术实施例提供一种文件加载方法、装置、设备和计算机可读存储介质,能够提高文件加载速度,提升引擎性能,下面说明本技术实施例提供的计算机设备的示例性应用,本技术实施例提供的计算机设备可以实施为笔记本电脑,平板电脑,台式计算机,机顶盒,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)等各种类型的用户终端,也可以实施为服务器。下面,将说明设备实施为终端时示例性应用。
    95.参见图2,图2是本技术实施例提供的文件处理系统100的架构示意图,如图2所示,在该文件处理系统100中包括美术设计终端200、网络300和文件加载终端400通过网络300连接美术设计终端200,网络300可以是广域网或者局域网,又或者是二者的组合。
    96.当文件加载终端400和美术设计终端200通过网络300建立有直接的通信连接时,美术设计终端200可以在完成场景设计或者预制件设计之后,将文件发送至文件加载终端400。文件加载终端400获取待加载文件,所述待加载文件中包括多个虚拟对象的对象信息,所述多个虚拟对象的对象信息之间无嵌套关系,也即多个虚拟对象的对象信息是展平存储的,存储等级之间没有嵌套关系,可以同时获取从而能够提高读取速率,然后从各个虚拟对象的对象信息中获取所述各个虚拟对象的组件信息,并基于所述各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间,之后获取所述各个虚拟对象的对象类型,并基于所述各个虚拟对象的对象类型和组件信息为各个虚拟对象运行时的内存空间进行信息填
    充,最后基于各个虚拟对象的对象信息构建所述各个虚拟对象之间的层次结构,并基于所述层次结构显示所述各个虚拟对象,此时完成文件加载过程。
    97.在一些实施例中,美术设计终端200还可以通过网络300连接服务器,文件加载终端400也通过网络300连接服务器,美术设计终端200可以在完成场景设计或者预制件设计之后将文件发送至服务器,文件加载终端400在需要加载文件时,从服务器获取待加载文件。
    98.在一些实施例中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。文件加载终端400可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、智能车载设备等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本技术实施例中不做限制。
    99.参见图3,图3是本技术实施例提供的文件加载终端400的结构示意图,图3所示的文件加载终端400包括:至少一个处理器410、存储器450、至少一个网络接口420和用户接口430。文件加载终端400中的各个组件通过总线系统440耦合在一起。可理解,总线系统440用于实现这些组件之间的连接通信。总线系统440除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图3中将各种总线都标为总线系统440。
    100.处理器410可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(dsp,digital signal processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
    101.用户接口430包括使得能够呈现媒体内容的一个或多个输出装置431,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口430还包括一个或多个输入装置432,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
    102.存储器450可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器450可选地包括在物理位置上远离处理器410的一个或多个存储设备。
    103.存储器450包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(rom,read only me mory),易失性存储器可以是随机存取存储器(ram,random access memor y)。本技术实施例描述的存储器450旨在包括任意适合类型的存储器。
    104.在一些实施例中,存储器450能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
    105.操作系统451,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
    106.网络通信模块452,用于经由一个或多个(有线或无线)网络接口420到达其他计算设备,示例性的网络接口420包括:蓝牙、无线相容性认证(wifi)、和通用串行总线(usb,universal serial bus)等;
    107.呈现模块453,用于经由一个或多个与用户接口430相关联的输出装置431(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
    108.输入处理模块454,用于对一个或多个来自一个或多个输入装置432之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
    109.在一些实施例中,本技术实施例提供的装置可以采用软件方式实现,图3示出了存储在存储器450中的文件加载装置455,其可以是程序和插件等形式的软件,包括以下软件模块:第一获取模块4551、第二获取模块4552、信息填充模块4553和层次构建模块4554,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
    110.在另一些实施例中,本技术实施例提供的装置可以采用硬件方式实现,作为示例,本技术实施例提供的装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本技术实施例提供的文件加载方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(asic,application specif ic integrated circuit)、dsp、可编程逻辑器件(pld,programmable logic de vice)、复杂可编程逻辑器件(cpld,complex programmable logic device)、现场可编程门阵列(fpga,field-programmable gate array)或其他电子元件。
    111.将结合本技术实施例提供的终端的示例性应用和实施,说明本技术实施例提供的文件加载方法。
    112.本技术实施例提供一种文件加载方法,图4为本技术实施例提供的文件加载方法的一种实现流程示意图,将结合图4对本技术实施例提供的文件加载方法的各个步骤进行说明。
    113.步骤s101,获取待加载文件。
    114.该待加载文件可以是虚拟场景文件,也可以是预制件文件。待加载文件中包括多个虚拟对象的对象信息,所述多个虚拟对象的对象信息之间无嵌套关系。当待加载文件为虚拟场景文件时,待加载文件中所包含的虚拟对象可能是场景文件自创的,也可以是来自预制件实例的,也即虚拟场景文件中会包括两种类型的虚拟对象的对象信息。当待加载文件为预制件文件时,待加载文件中所包含的虚拟对象均来自预制件实例,也即预制件文件中只包括一种类型的虚拟对象的对象信息。
    115.虚拟对象的对象信息包括虚拟对象的属性信息和组件信息,在本技术实施例中,基于虚拟对象的类型不同,虚拟对象的属性信息和组件信息也有所不同。当虚拟对象的类型为场景文件自创时,属性信息包括虚拟对象名称、虚拟对象唯一标识号、组件组合类型以及标记该虚拟对象是否来自于预制件实例的标记字段,组件信息中包括各个组件的完整信息;当虚拟对象的类型为来自预制件实例时,属性信息中除了包括虚拟对象名称、虚拟对象唯一标识号、组件组合类型、标记该虚拟对象是否来自于预制件实例的标记字段之外,还包括预制件实例id、预制件路径、以及预制件id;组件信息包括的是与预制件实例中原始组件内容信息的差异信息,但是该差异信息的内容格式与原始组件内容信息的格式相同,不同于相关技术中存储差异信息的哈希值,因此能够基于差异信息和原始组件内容信息直接即可确定出实际的组件内容信息,提高信息处理效率。
    116.步骤s102,从各个虚拟对象的对象信息中获取各个虚拟对象的组件信息,并基于各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间。
    117.在本技术实施例中,各个虚拟对象的组件信息包括有各个组件的内容信息。虚拟对象的对象信息的components关键字下存放有该虚拟对象所有的组件标识和组件内容信息。每个组件的数据格式由引擎的组件系统所决定。
    118.基于所述各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间在实现时,可以虚拟对象的对象信息中所包括的属性信息中的组件组合类型字段确定出该虚拟对象中所包括组件的组件标识,并基于各个组件标识分配出虚拟对象运行时的内存空间。
    119.步骤s103,获取各个虚拟对象的对象类型,并基于各个虚拟对象的对象类型和组件信息为各个虚拟对象运行时的内存空间进行信息填充。
    120.获取虚拟对象类型在实现时,可以获取对象信息中的用于标记该虚拟对象是否来自于预制件实例的标记字段的字段值,该字段值为布尔类型数值,为tr ue或者为false,当该标记字段为false时,说明该虚拟对象不是来自于预制件实例的,也即该虚拟对象的对象类型为场景文件自创;当该标记字段为true时,说明该虚拟对象为来自于预制件实例的,也即虚拟对象的对象类型为来自预制件实例。
    121.基于所述各个虚拟对象的对象类型和组件信息为各个虚拟对象运行时的内存空间进行信息填充在实现时,首先根据虚拟对象的对象类型和组件信息确定各个组件的组件填充信息,然后由各个组件对应的处理系统将组件填充信息填充到对应的内存空间。其中,当该虚拟对象的对象类型为场景文件自创时,那么组件信息也即为组件填充信息;当该虚拟对象的对象类型为预制件实例对象时,那么组件信息为与预制件实例中原始组件内容的差异信息,需要通过差异信息和原始组件内容信息确定出组件填充内容。
    122.步骤s104,基于各个虚拟对象的对象信息构建各个虚拟对象之间的层次结构,并基于层次结构显示所述各个虚拟对象。
    123.在本技术实施例中,虚拟对象的对象信息中包括虚拟对象的父对象的对象标识、所述虚拟对象的子对象的对象标识、所述虚拟对象的前一个兄弟对象的对象标识、所述虚拟对象的后一个兄弟对象的对象标识,在获取到每个虚拟对象的父对象的对象标识、所述虚拟对象的子对象的对象标识、所述虚拟对象的前一个兄弟对象的对象标识、所述虚拟对象的后一个兄弟对象的对象标识之后,也就能根据这些信息构建出各个虚拟对象之间的层次结构。之后基于该层次结构信息即可渲染显示出各个虚拟对象,完成文件加载过程。
    124.在本技术实施例中,在文件加载终端获取到待加载文件之后,该待加载文件中包括多个虚拟对象的对象信息,从各个虚拟对象的对象信息中获取所述各个虚拟对象的组件信息,并基于所述各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间;获取所述各个虚拟对象的对象类型,并基于所述各个虚拟对象的对象类型和组件信息为各个虚拟对象运行时的内存空间进行信息填充,之后基于各个虚拟对象的对象信息构建所述各个虚拟对象之间的层次结构,并基于所述层次结构显示所述各个虚拟对象。由于在待加载文件中多个虚拟对象的对象信息之间无嵌套关系,也即多个虚拟对象的对象信息是展平存储的,从而能够避免层次结构上的深度嵌套,另外在加载文件时,先通过对象信息分配出各个虚拟对象运行时的内存空间,然后再根据组件信息并行为各个虚拟对象运行时的内存空间进行信息填充,能够提高文件加载速度,从而提高引擎加载文件的性能。
    125.在一些实施例中,该对象信息包括虚拟对象的属性信息和组件信息,上述步骤s102中的“从各个虚拟对象的对象信息中获取所述各个虚拟对象的组件信息,并基于所述各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间”可以通过以下步骤实现:
    126.步骤s1021,从第i个虚拟对象的对象信息中直接获取所述第i个虚拟对象中所包括的各个组件的组件标识和所述各个组件的组件内容信息。
    127.其中,i=1,2,

    ,n,n为虚拟对象总数,n为正整数。
    128.不同于相关技术中,组件信息与对象信息是同时展平的,需要通过哈希值确定组件信息所归属的对象信息,也不同于相关技术中对象信息和组件信息均是按照严格的嵌套关系存储的,在本技术实施例中,不同虚拟对象的对象信息时展平存储的,而虚拟对象的组件信息是全部存储在各个虚拟对象的对象信息中的,在实现时,可以是存储在对象信息中“components”这一关键字对应的内容中。组件信息包括组件标识和各个组件的组件内容信息。组件标识可以是组件名称,例如可以是mesh component、camera componet、light compone nt等等,组件内容信息可以是完整的组件内容信息,也可以是组件差异信息。
    129.步骤s1022,从所述各个虚拟对象的属性信息中获取所述各个虚拟对象的组件组合信息。
    130.在本技术实施例中,可以获取虚拟对象的属性信息中“prototype”这一关键字的值,该“prototype”关键字对应的值为将虚拟对象中包括的各个组件的组件标识利用哈希算法计算得出的哈希值。
    131.步骤s1023,基于所述组件组合信息,确定所述各个虚拟对象所包含组件的组件标识。
    132.该步骤在实现时,可以按照预设的哈希算法对各个虚拟对象的组件组合信息进行解析,从而得到各个虚拟对象所包含的组件标识。
    133.步骤s1024,基于所述各个虚拟对象所包含组件的组件标识分配出各个虚拟对象运行时的内存空间。
    134.在得到各个虚拟对象所包含组件的组件标识之后,可以获取各个组件标识对应组件所需的内存空间,进而可以确定出各个虚拟对象运行时所需的内存空间。
    135.通过上述的步骤s1021至步骤s1024,可以通过预先在虚拟对象的属性信息中存储组件组合信息,如此通过解析该组件组合信息就可以确定出虚拟对象所包含组件的组件标识,进而确定出各个虚拟对象运行时所需的内存空间,并预先分配出来,为后续进行信息填充的并行执行提供基础。并且由于存储组件组合信息,这样能够满足部分引擎以若干组件的组合类型为粒度来实例化虚拟对象的需求,提升引擎加载场景和预制件的性能。
    136.在一些实施例中,上述步骤s103中的“基于所述各个虚拟对象的对象类型和组件信息为各个运行时虚拟对象的内存空间进行信息填充”可以通过以下步骤实现:
    137.步骤s1031,基于第i个虚拟对象的对象类型和组件信息确定所述第i个虚拟对象运行时的组件填充信息。
    138.组件信息包括组件标识和组件内容信息,由于当第i个虚拟对象的对象类型为场景自创对象时,组件内容信息中包括的是完整的组件信息,此时将组件内容信息确定为组件填充信息即可,而当第i个虚拟对象的对象类型为预制件实例对象时,组件内容信息包括
    的是差异信息,此时需要通过组件信息中的组件标识确定出对应的原始组件信息,并基于原始组件信息和差异信息确定出该组件对应的组件填充信息。
    139.步骤s1032,基于所述第i个虚拟对象中所包括的各个组件的组件标识确定所述各个组件对应的组件系统。
    140.在引擎中包括多个组件系统,图6a是引擎中不同组件和组件系统的对应关系示意图,如图6a所示,不同的组件标识对应有不同的组件系统,例如网格组件对应网格系统、光照组件对应有光照系统、变换组件对应有变换系统。
    141.步骤s1033,利用所述各个组件对应的组件系统中的反序列化函数将所述组件填充信息填充到所述各个虚拟对象运行时的内存空间。
    142.在本技术实施例中,组件系统中包括序列化函数和反序列化函数,其中,通过反序列化函数能够将组件填充信息填充到各个虚拟对象运行时的内存空间,而序列化函数能够把运行时的虚拟对象的组件内容保存到一个文本状态。而反序列化函数的作用,就是把文本状态转化成运行时虚拟对象的组件信息。
    143.通过上述步骤s1031至步骤s1033,在基于第i个虚拟对象的对象类型和组件信息确定出第i个虚拟对象运行时的组件填充信息之后,确定出各个组件标识对应的组件系统,然后由各个组件系统并行的调用自身的反序列化函数将各个组件对应的组件填充信息填充到内存空间,如此从而能够缩短加载时间,提高加载效率。
    144.在一些实施例中,上述步骤s1031“基于所述各个虚拟对象的对象类型和组件信息确定各个的虚拟对象运行时的组件填充信息”可以通过图5所示的步骤s311至步骤s3112实现,以下结合图5对各个步骤进行说明。
    145.步骤s311,判断第i个虚拟对象是否为场景自创对象。
    146.该步骤在实现时,可以获取第i个虚拟对象的属性信息中用于标记该虚拟对象是否来自于预制件实例的标记字段“isprefabinstance”的字段值,当“ispr efabinstance”的字段值为false时,说明第i个虚拟对象的对象类型为场景自创对象,此时进入步骤s312;当“isprefabinstance”的字段值为true时,说明第i个虚拟对象的对象类型为预制件实例对象,此时进入步骤s313。
    147.步骤s312,将各个组件的组件内容信息确定为第i个虚拟对象运行时的组件填充信息。
    148.由于场景自创的虚拟对象的组件内容信息中包括完整的组件数据,因此可以将组件内容信息确定为组件填充信息。
    149.步骤s313,基于第i个虚拟对象的属性信息确定第i个虚拟对象的原始预制件路径和预制件实例标识。
    150.当该第i个虚拟对象为预制件实例对象时,可以从第i个虚拟对象的属性信息中获取“instanceid”关键字的值获取预制件实例标识,通过获取“prefabpat h”关键字的值获取原始预制件路径。
    151.步骤s314,基于原始预制件路径和预制件实例标识获取原始组件信息。
    152.在该步骤中,获取的是预制件实例中各个组件的原始组件信息。假设预制件实例中包括10个组件,在该步骤中获取的是10个组件的原始组件信息。原始组件信息包括组件标识和原始组件内容信息。
    153.步骤s315,确定第i个虚拟对象的组件信息是否为空。
    154.由于来自预制件实例的虚拟对象的组件信息中存储的是差异信息,当第i个虚拟对象的组件信息为空时,说明没有对预制件实例中的原始组件信息进行修改,此时进入步骤s316;当第i个虚拟对象的组件信息不为空时,说明有对预制件实例中的原始组件信息进行修改,此时进入步骤s317。
    155.步骤s316,将所述原始组件信息确定为所述第i个虚拟对象运行时的组件填充信息。
    156.由于第i个虚拟对象的组件信息为空,说明没有对预制件实例的组件进行修改,此时可以将原始组件信息确定为第i个虚拟对象运行时的组件填充信息。
    157.步骤s317,判断第i个虚拟对象中是否包含删除组件。
    158.其中,该步骤在实现时,可以获取组件信息中是否包括删除组件标识对应的组件,例如,预设删除组件标识为“destroyed components”,当组件信息中包括“destroyed components”对应的组件时,确定所述第i个虚拟对象包含删除组件时,此时进入步骤s318;当组件信息中不包括“destroyed components”对应的组件时,确定不包含删除组件时,进入步骤s3113。
    159.步骤s318,获取删除组件对应的组件内容信息。
    160.删除组件对应的组件内容信息包括已删除组件标识。
    161.步骤s319,将其他组件的组件内容信息确定为其他组件的差异信息。
    162.该其他组件为第i个虚拟对象除所述删除组件之外的组件。
    163.步骤s3110,基于原始组件信息、已删除组件标识和其他组件的差异信息确定第i个虚拟对象的组件填充信息。
    164.该步骤可以通过以下步骤实现:
    165.步骤s31101,将所述原始组件信息中所述已删除组件标识对应的组件信息删除,得到删除后的组件信息。
    166.步骤s31102,基于其他组件的差异信息对所述删除后的组件信息进行更新,得到更新后的组件信息。
    167.在本技术实施例中,差异信息保持了与原始组件内容一样的嵌套模式,不用靠单个差异信息的字符串来表达的,差异信息中包括的是与原始组件信息具有不同值的关键字和对应的差异值,该步骤在实现时,将差异信息中包括的关键字对应的原始值更新为差异值即可,从而能够大大降低恢复出完整组件信息的成本和性能,也极大的简化了游戏引擎实现的难度。
    168.步骤s31103,将更新后的组件信息确定为所述第i个虚拟对象的组件填充信息。
    169.步骤s3111,将各个组件的组件内容信息确定为所述各个组件的差异信息。
    170.当第i个虚拟对象的组件信息不为空,且不包含删除组件时,将各个组件的组件内容信息确定给各个组件的差异信息。假设预制件实例中包括10个组件,其中,对3个组件进行了修改,那么此时在待加载文件的第i个虚拟对象中包括3个组件的差异信息。
    171.步骤s3112,基于所述原始组件信息和所述各个组件的差异信息确定所述第i虚拟对象的组件填充信息。
    172.该步骤在实现时,基于所述各个组件的差异信息对所述原始组件信息进行更新,
    得到更新后的组件信息,并将更新后的组件信息确定为第i个虚拟对象的组件填充信息。
    173.承接上述的举例,假设原始组件信息中包括10个组件的组件标识和10个组件的原始组件内容,其中第i个虚拟对象中包括3个组件的差异信息,每个组件的差异信息中包括的是与该组件的原始组件内容信息具有不同值的关键字和对应的差异值,该步骤在实现时,将这三个组件的差异信息中包括的关键字对应的原始值更新为差异值,也即完成了对原始组件信息的更新,得到更新后的组件信息。
    174.在一些实施例中,上述步骤s104“基于各个虚拟对象的对象信息中构建所述各个虚拟对象之间的层次结构”,可以通过以下步骤实现:
    175.步骤s1041,从所述各个虚拟对象的对象信息中获取所述各个虚拟对象的层次信息。
    176.所述层次信息包括虚拟对象的父对象的对象标识、所述虚拟对象的子对象的对象标识、所述虚拟对象的前一个兄弟对象的对象标识、所述虚拟对象的后一个兄弟对象的对象标识。
    177.在本技术实施例中,层次信息可以存储在对象信息的属性信息中,也可以存储在对象信息的组件信息中。当层次信息存储在组件信息中时,可以如其他实施例所示,存储在变换组件中。需要说明的是,当层次信息存储在组件信息中时,基于各个虚拟对象的对象类型和组件信息确定各个的虚拟对象运行时的组件填充信息在实现时,所提及的组件信息是不包括该变换组件信息的,也即变换组件中的层次信息并不用于确定组件填充信息。
    178.步骤s1042,基于所述各个虚拟对象的层次信息,构建所述各个虚拟对象之间的层次结构。
    179.在获取到每个虚拟对象的父对象的对象标识、所述虚拟对象的子对象的对象标识、所述虚拟对象的前一个兄弟对象的对象标识、所述虚拟对象的后一个兄弟对象的对象标识,也即能根据上述得到的层次信息构建出各个虚拟对象之间的层次结构。
    180.简单举例来说,有四个虚拟对象分别为a、b、c、d,其中,虚拟对象a的父对象的对象标识为空,子对象的对象标识为b和c,前一个兄弟对象的对象标识为空,后一个兄弟对象的对象标识为空;虚拟对象b的父对象的对象标识为a,子对象的对象标识为d,前一个兄弟对象的对象标识为空,后一个兄弟对象的对象标识为c;虚拟对象c的父对象的对象标识为a,子对象的对象标识为空,前一个兄弟对象的对象标识为b,后一个兄弟对象的对象标识为空;虚拟对象d的父对象的对象标识为b,子对象的对象标识为空,前一个兄弟对象的对象标识为空,后一个兄弟对象的对象标识为空,基于上述层次信息,得到图6b所示的层次结构。
    181.在本技术实施例中,是通过对象信息中的层次信息构建虚拟对象的层次结构,而无需要求虚拟对象在存储时按照严格的嵌套关系,能够降低对象信息存储的实现复杂度,提高对象信息的读取效率,并且能够基于层次信息构建出准群的层次结构保证文件加载的准确性。
    182.下面,将说明本技术实施例在一个实际的应用场景中的示例性应用。
    183.图7a为本技术实施例提供的场景文件和预制件文件的应用软件环境示意图,如图7a所示,该应用软件环境包括游戏引擎701、编辑器702、加载系统703和文件资源704。其中:
    184.游戏引擎701中包括多个游戏场景,每个场景都有自己的加载系统703(l oadingsystem),该加载系统703用于管理游戏场景和预制件,对应地该加载系统703包含预
    制件管理器7031(prefabmanager)和场景管理器7032(scenema nager)。prefabmanager 7031用于通过基于编辑器702接收到的编辑操作产生本技术实施例提供的预制件文件和创建预制件实例。scenemanager 7032用于通过基于编辑器702接收到的编辑操产生本技术实施例提供的的游戏场景文件和加载场景。用户在使用编辑器702的过程中,可以通过预制件在场景中创建出预制件实例,并支持修改预制件实例中若干游戏对象的属性。
    185.图7b为本技术实施例提供的游戏安装包内容示意图,如图7b所示,游戏安装包包含的内容有:纹理、动画、材质、声音、脚本、场景、预制件等等,其中场景和预制件资源是游戏加载、卸载和运行过程中的重要资源。
    186.本技术实施例利用同一种文件格式来描述场景和预制件,避免了复杂游戏场景中游戏对象和组件的嵌套层次非常深约束了引擎加载实现能力,能够满足不同的游戏引擎繁多的加载场景和预制件的需求,方便游戏引擎实现简单而高效的场景和预制件加载卸载逻辑。此外,还便于游戏引擎开发者在文件中增删自定义的内容,满足不同游戏繁多而复杂的需求,拥有较高的自由度。
    187.图8为本技术实施例提供的文件格式的整体框架示意图,该文件格式是基于json的。如图8所示,文件格式内容主要包含文件头部信息801和文件主体信息802两个部分,由两个json对象构成。该文件格式可以根据不同引擎的需求自由扩展,下面对本文件格式的内容进行说明。
    188.图9为本技术实施例提供的文件头部信息示意图,如图9所示,文件头部信息包括文件版本、文件类型以及当前文件依赖的其他资源文件。因为在正常游戏开发中时游戏引擎会迭代更新,有时会对场景和预制件文件进行小幅度修改,但是会保证对旧有场景和预制件文件的向下兼容。此时需要版本信息(ve rsion)关键字来区分不同的文件版本是很重要的。
    189.该“依赖的其它资源(resourcedependency)”是用来描述场景和预制件中游戏对象的部分组件所依赖的其他的资源。如图9所示,在本技术实施例中使用相对路径的方式来存储依赖的其他资源,这些资源在根据本技术实施例提供的场景和预制件文件内容实例化游戏对象之前,会预先被加载到游戏引擎中。图9仅仅为本文件格式实际使用的示例,对象中的关键字等内容可以视引擎需求自定义。
    190.在游戏中会存在多种资源,如网格,材质,贴图,着色器等。用文件类型(filetype)来标记场景文件和预制件文件,防止游戏引擎把场景文件和预制件文件误当成其他资源文件进行进行处理。
    191.图10为本技术实施例提供的文件格式中文件主体内容的示意图,文件主体信息针对预制件文件和游戏场景文件会略有不同。游戏场景文件会比预制件文件多如图10中所示的editordata,scenedata的键值对1001,其所包含的内容根据引擎不同而有所不同。这两个内容会存储除gameobject以外的只和场景有关的数据。
    192.在图10所示的文件主体内容中关于gameobject关键字后面的值的内容包括两个部分,一是rootgameobject关键字的值,二是gameobjectlist关键字的值。
    193.其中,rootgameobject中euid用来描述所有游戏对象的根节点是哪个,isprefabresource用来描述文件是否是预制件文件。euid是游戏引擎中用来唯一标记一个游戏对象的,在本技术实施例中,会对每一个游戏对象创建一个唯一的128位数字,然后通
    过其16进制的值转化得到的字符串作为euid的值。因为euid的唯一性,所以可以在引擎的变换组件的层次结构中,描述出此游戏对象的父类游戏对象、第一个孩子游戏对象、同层次的前一个游戏对象和同层次的后一个游戏对象。
    194.gameobjectlist关键字所描述的内容是euid和游戏对象内容的键值对。场景中所有的游戏对象都会展平的存储在这个gameobjectlist关键字中。但是和相关技术不同的是,在本技术实施例中不会展平所有的组件以避免根据哈希值来组件组合信息的代价。
    195.如图10所示,gameobjectid_1是其中某个游戏对象的euid的值,该值所对应的内容会包含两种类型。一是游戏对象本身的属性,二是游戏对象所包含的组件信息。因为在本技术实施例中不会特例化的区分来自于预制件实例的游戏对象。所以游戏对象所有本身的属性如表1所示:
    196.表1、游戏对象的属性信息表
    197.198.在本技术实施例中,根游戏对象据是否来自于预制件(可以根据isprefabi nstance属性判断)具备不同的不一样的属性。预制件实例的游戏对象具有表1中所有的属性值,而instanceid、prefabpath、prefabeuid的是专门给预制件类型的游戏对象使用的。在表1所示的属性中,prototype属性是专门给支持ecs架构的引擎来使用的,该架构的引擎会在内存上把同一种组件类型组合方式的游戏对象进行顺序存储来优化。所以该引擎在使用本技术实施例提供的文件可以根据该属性快速的对游戏对象的组件组合进行分类,从而提升加载场景和预制件的速度。
    199.预制件实例可能由一个或多个游戏对象组成,在本技术实施例中,采用扁平存储游戏对象的方式来避免层次结构上的深度嵌套。所以这些来自于预制件实例的游戏对象会具有一个instanceid值来判断出属于哪个游戏预制件实例。该值的字符串也是由引擎负责创建唯一的128位数字转化而来。
    200.尽管知道了一个游戏对象来自于哪个预制件实例(instanceid),该预制件实例来自于哪个预制件路径(prefabpath)还是不够的。因为预制件实例的游戏对象在场景或者预制件中存储的时候,存储的并不是组件的完整信息,而是和所属预制件中原始游戏对象组件内容的差异值,所以还需要用prefabeuid来标记该游戏对象来自于哪个预制件中的哪个游戏对象,以便于根据自身的部分信息和原始游戏对象得到真正的完整的组件信息值。
    201.如图10所示,游戏对象中的内容除自身属性之外,还会包含组件的内容信息。在components关键字下会存放所有的component及其自身的数据。每个component的数据格式由游戏引擎的组件系统所决定。本技术实施例提供的扁平化的游戏对象结构可以适应各种游戏引擎加载场景或者预制件的需求的同时,也需要提供重建游戏对象的层次结构的信息。所以在transformcomponent的组件中应该正确存储该游戏对象的父亲游戏对象、第一个孩子游戏对象、前后兄弟游戏对象的信息。
    202.图11为本技术实施例提供的预制件实例中游戏对象和所对应预制件中游戏对象的差异信息的示意图,其中1101示出了预制件中游戏对象的某个组件的原始数据,在用该预制件在场景或者其它预制件中创建预制件实例后,可以通过编辑器修改部分数据,得到1102示出的预制件实例中的游戏对象的数据。而在场景或者预制件中存储该游戏对象时候,只会存储1103所示的差异信息。
    203.图12为本技术实施例提供的差异信息的存储示意图,如图12所示,本技术实施例的预制件实例游戏对象中的组件差异信息不用靠单个差异信息的字符串来表达,而是保持了和组件完整内容一样的嵌套模式,可以大大降低恢复出完整组件信息的成本和性能,也极大的简化了游戏引擎实现的难度。
    204.图13为本技术实施例提供的预制件实例的文件格式示意图,如图13所示,针对预制件实例中的游戏对象,还会维护专门的“destroyedcomponents”关键字1301来描述预制件实例中游戏对象中删除了其对应预制件中游戏对象的哪些组件。因为编辑器在修改预制件实例中游戏对象的信息时,除了修改组件的属性值之外,还可以增删组件。对于增加的组件而言,只需要在预制件实例中的游戏对象中保存下这个组件即可,对于删除的组件而言就需要专门保存到destroyedcomponents”关键字所对应的值中。
    205.本技术实施例提供一种能够同时支持表达预制件和场景的文件格式,通过展平存储游戏对象,在游戏对象里存储自身组件信息的方式大大降低了实现复杂度,减少了性能
    开销。此外,在本技术实施例中描述预制件实例中的游戏对象的差异信息的方式无需特例化解析复杂字符串,实现简单易于维护。该文件格式可以支持不同引擎架构,可以满足部分引擎以若干组件的组合类型为粒度来实例化游戏对象的需求,提升引擎加载场景和预制件的性能。
    206.下面继续说明本技术实施例提供的文件加载装置455的实施为软件模块的示例性结构,在一些实施例中,如图3所示,存储在存储器450的文件加载装置455中的软件模块可以包括:
    207.第一获取模块4551,用于获取待加载文件,所述待加载文件中包括多个虚拟对象的对象信息,所述多个虚拟对象的对象信息之间无嵌套关系;
    208.第二获取模块4552,用于从各个虚拟对象的对象信息中获取所述各个虚拟对象的组件信息,并基于所述各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间;
    209.信息填充模块4553,用于获取所述各个虚拟对象的对象类型,并基于所述各个虚拟对象的对象类型和组件信息为各个虚拟对象运行时的内存空间进行信息填充;
    210.层次构建模块4554,用于基于各个虚拟对象的对象信息构建所述各个虚拟对象之间的层次结构,并基于所述层次结构显示所述各个虚拟对象。
    211.在一些实施例中,对象信息包括虚拟对象的属性信息和组件信息,对应的第二获取模块,还用于:
    212.从第i个虚拟对象的对象信息中直接获取所述第i个虚拟对象中所包括的各个组件的组件标识和所述各个组件的组件内容信息,其中i=1,2,

    ,n,n为虚拟对象总数。
    213.在一些实施例中,该第二获取模块,还用于:
    214.从所述各个虚拟对象的属性信息中获取所述各个虚拟对象的组件组合信息;
    215.基于所述组件组合信息,确定所述各个虚拟对象所包含的组件标识;
    216.基于所述各个虚拟对象所包含的组件标识分配出各个虚拟对象运行时的内存空间。
    217.在一些实施例中,该信息填充模块,还用于:
    218.基于第i个虚拟对象的对象类型和组件信息确定所述第i个虚拟对象运行时的组件填充信息;
    219.基于所述第i个虚拟对象中所包括的各个组件的组件标识确定所述各个组件对应的组件系统;
    220.利用所述各个组件对应的组件系统中的反序列化函数将所述组件填充信息填充到所述各个虚拟对象运行时的内存空间。
    221.在一些实施例中,该信息填充模块,还用于:
    222.当所述第i个虚拟对象的对象类型为场景自创对象时,将所述各个组件的组件内容信息确定为所述第i个虚拟对象运行时的组件填充信息。
    223.在一些实施例中,该信息填充模块,还用于:
    224.当所述第i个虚拟对象的对象类型为预制件实例对象时,基于所述第i个虚拟对象的属性信息确定所述第i个虚拟对象的原始预制件路径和预制件实例标识;
    225.基于所述原始预制件路径和所述预制件实例标识获取原始组件信息;
    226.确定所述第i个虚拟对象的组件信息是否为空;
    227.当所述第i个虚拟对象的组件信息为空时,将所述原始组件信息确定为所述第i个虚拟对象运行时的组件填充信息。
    228.在一些实施例中,该信息填充模块,还用于:
    229.当所述第i个虚拟对象的组件信息不为空时,确定所述第i个虚拟对象是否包含删除组件;
    230.当所述第i个虚拟对象包含删除组件时,获取所述删除组件对应的组件内容信息,所述组件内容信息包括已删除组件标识;
    231.将其他组件的组件内容信息确定为所述其他组件的差异信息,所述其他组件为所述第i个虚拟对象除所述删除组件之外的组件;
    232.基于所述原始组件信息、所述已删除组件标识和所述其他组件的差异信息确定所述第i个虚拟对象的组件填充信息。
    233.在一些实施例中,该信息填充模块,还用于:
    234.将所述原始组件信息中所述已删除组件标识对应的组件信息删除,得到删除后的组件信息;
    235.基于所述其他组件的差异信息对所述删除后的组件信息进行更新,得到更新后的组件信息;
    236.将所述更新后的组件信息确定为所述第i个虚拟对象的组件填充信息。
    237.在一些实施例中,该信息填充模块,还用于:
    238.当所述第i个虚拟对象不包含删除组件时,将所述各个组件的组件内容信息确定为所述各个组件的差异信息;
    239.基于所述原始组件信息和所述各个组件的差异信息确定所述第i个虚拟对象的组件填充信息。
    240.在一些实施例中,该层次构建模块,还用于:
    241.从所述各个虚拟对象的对象信息中获取所述各个虚拟对象的层次信息,所述层次信息包括所述虚拟对象的父对象的对象标识、所述虚拟对象的子对象的对象标识、所述虚拟对象的前一个兄弟对象的对象标识、所述虚拟对象的后一个兄弟对象的对象标识;
    242.基于所述各个虚拟对象的层次信息,构建所述各个虚拟对象之间的层次结构。
    243.需要说明的是,本技术实施例针对文件加载装置的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本装置实施例中未披露的技术细节,请参照本技术方法实施例的描述而理解。
    244.本技术实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本技术实施例上述的文件加载方法。
    245.本技术实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本技术实施例提供的文件加载方法,例如,如图4、图5和图6示出的文件加载方法。
    246.在一些实施例中,计算机可读存储介质可以是fram、rom、prom、ep rom、eeprom、闪存、磁表面存储器、光盘、或cd-rom等存储器;也可以是包括上述存储器之一或任意组合的
    各种设备。
    247.在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
    248.作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(html,hyper text markup language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
    249.作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
    250.以上所述,仅为本技术的实施例而已,并非用于限定本技术的保护范围。凡在本技术的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本技术的保护范围之内。

    技术特征:
    1.一种文件加载方法,其特征在于,所述方法包括:获取待加载文件,所述待加载文件中包括多个虚拟对象的对象信息,所述多个虚拟对象的对象信息之间无嵌套关系;从各个虚拟对象的对象信息中获取所述各个虚拟对象的组件信息,并基于所述各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间;获取所述各个虚拟对象的对象类型,并基于所述各个虚拟对象的对象类型和组件信息为各个虚拟对象运行时的内存空间进行信息填充;基于各个虚拟对象的对象信息构建所述各个虚拟对象之间的层次结构,并基于所述层次结构显示所述各个虚拟对象。2.根据权利要求1中所述的方法,其特征在于,所述对象信息包括虚拟对象的属性信息和组件信息,所述从各个虚拟对象的对象信息中获取所述各个虚拟对象的组件信息,包括:从第i个虚拟对象的对象信息中直接获取所述第i个虚拟对象中所包括的各个组件的组件标识和所述各个组件的组件内容信息,其中i=1,2,

    ,n,n为虚拟对象总数。3.根据权利要求2中所述的方法,其特征在于,所述基于所述各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间,包括:从所述各个虚拟对象的属性信息中获取所述各个虚拟对象的组件组合信息;基于所述组件组合信息,确定所述各个虚拟对象所包含的组件标识;基于所述各个虚拟对象所包含的组件标识分配出各个虚拟对象运行时的内存空间。4.根据权利要求2中所述的方法,其特征在于,所述基于所述各个虚拟对象的对象类型和组件信息为各个虚拟对象运行时的内存空间进行信息填充,包括:基于第i个虚拟对象的对象类型和组件信息确定所述第i个虚拟对象运行时的组件填充信息;基于所述第i个虚拟对象中所包括的各个组件的组件标识确定所述各个组件对应的组件系统;利用所述各个组件对应的组件系统中的反序列化函数将所述组件填充信息填充到所述各个虚拟对象运行时的内存空间。5.根据权利要求4中所述的方法,其特征在于,所述基于所述各个虚拟对象的对象类型和组件信息确定各个的虚拟对象运行时的组件填充信息,包括:当所述第i个虚拟对象的对象类型为场景自创对象时,将所述各个组件的组件内容信息确定为所述第i个虚拟对象运行时的组件填充信息。6.根据权利要求4中所述的方法,其特征在于,所述基于所述各个虚拟对象的对象类型和组件信息确定各个的虚拟对象运行时的组件填充信息,包括:当所述第i个虚拟对象的对象类型为预制件实例对象时,基于所述第i个虚拟对象的属性信息确定所述第i个虚拟对象的原始预制件路径和预制件实例标识;基于所述原始预制件路径和所述预制件实例标识获取原始组件信息;确定所述第i个虚拟对象的组件信息是否为空;当所述第i个虚拟对象的组件信息为空时,将所述原始组件信息确定为所述第i个虚拟对象运行时的组件填充信息。7.根据权利要求6中所述的方法,其特征在于,所述基于所述各个虚拟对象的对象类型
    和组件信息确定各个的虚拟对象运行时的组件填充信息,包括:当所述第i个虚拟对象的组件信息不为空时,确定所述第i个虚拟对象是否包含删除组件;当所述第i个虚拟对象包含删除组件时,获取所述删除组件对应的组件内容信息,所述组件内容信息包括已删除组件标识;将其他组件的组件内容信息确定为所述其他组件的差异信息,所述其他组件为所述第i个虚拟对象除所述删除组件之外的组件;基于所述原始组件信息、所述已删除组件标识和所述其他组件的差异信息确定所述第i个虚拟对象的组件填充信息。8.根据权利要求7中所述的方法,其特征在于,所述基于所述原始组件信息、所述已删除组件标识和所述其他组件的差异信息确定所述第i个虚拟对象的组件填充信息,包括:将所述原始组件信息中所述已删除组件标识对应的组件信息删除,得到删除后的组件信息;基于所述其他组件的差异信息对所述删除后的组件信息进行更新,得到更新后的组件信息;将所述更新后的组件信息确定为所述第i个虚拟对象的组件填充信息。9.根据权利要求7中所述的方法,其特征在于,所述基于所述各个虚拟对象的对象类型和组件信息确定各个的虚拟对象运行时的组件填充信息,包括:当所述第i个虚拟对象不包含删除组件时,将所述各个组件的组件内容信息确定为所述各个组件的差异信息;基于所述原始组件信息和所述各个组件的差异信息确定所述第i个虚拟对象的组件填充信息。10.根据权利要求1中所述的方法,其特征在于,所述基于各个虚拟对象的对象信息中构建所述各个虚拟对象之间的层次结构,包括:从所述各个虚拟对象的对象信息中获取所述各个虚拟对象的层次信息,所述层次信息包括所述虚拟对象的父对象的对象标识、所述虚拟对象的子对象的对象标识、所述虚拟对象的前一个兄弟对象的对象标识、所述虚拟对象的后一个兄弟对象的对象标识;基于所述各个虚拟对象的层次信息,构建所述各个虚拟对象之间的层次结构。11.一种文件加载装置,其特征在于,所述装置包括:第一获取模块,用于获取待加载文件,所述待加载文件中包括多个虚拟对象的对象信息,所述多个虚拟对象的对象信息之间无嵌套关系;第二获取模块,用于从各个虚拟对象的对象信息中获取所述各个虚拟对象的组件信息,并基于所述各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间;信息填充模块,用于获取所述各个虚拟对象的对象类型,并基于所述各个虚拟对象的对象类型和组件信息为各个虚拟对象运行时的内存空间进行信息填充;层次构建模块,用于基于各个虚拟对象的对象信息构建所述各个虚拟对象之间的层次结构,并基于所述层次结构显示所述各个虚拟对象。12.一种计算机设备,其特征在于,所述计算机设备包括:存储器,用于存储可执行指令;
    处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至10任一项所述的方法。13.一种计算机可读存储介质,存储有可执行指令,其特征在于,所述可执行指令被处理器执行时实现权利要求1至10任一项所述的方法。14.一种计算机程序产品,包括计算机程序或指令,其特征在于,所述计算机程序或指令被处理器执行时实现权利要求1至10任一项所述的方法。

    技术总结
    本申请提供了一种文件加载方法、装置、设备及计算机可读存储介质;方法包括:获取待加载文件,所述待加载文件中包括多个虚拟对象的对象信息,所述多个虚拟对象的对象信息之间无嵌套关系;从各个虚拟对象的对象信息中获取所述各个虚拟对象的组件信息,并基于所述各个虚拟对象的对象信息分配出各个虚拟对象运行时的内存空间;获取所述各个虚拟对象的对象类型,并基于所述各个虚拟对象的对象类型和组件信息为各个虚拟对象运行时的内存空间进行信息填充;基于各个虚拟对象的对象信息构建所述各个虚拟对象之间的层次结构,并基于所述层次结构显示所述各个虚拟对象。通过本申请,能够提高文件加载速度。提高文件加载速度。提高文件加载速度。


    技术研发人员:周家炜 孙凌峰
    受保护的技术使用者:腾讯科技(深圳)有限公司
    技术研发日:2022.02.11
    技术公布日:2022/5/25
    转载请注明原文地址:https://tc.8miu.com/read-17419.html

    最新回复(0)