CN105354049B - 一种三维动画引擎的资源加载方法、装置及系统 - Google Patents
一种三维动画引擎的资源加载方法、装置及系统 Download PDFInfo
- Publication number
- CN105354049B CN105354049B CN201510632720.4A CN201510632720A CN105354049B CN 105354049 B CN105354049 B CN 105354049B CN 201510632720 A CN201510632720 A CN 201510632720A CN 105354049 B CN105354049 B CN 105354049B
- Authority
- CN
- China
- Prior art keywords
- resource
- loading tasks
- load
- loading
- loaded
- 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
-
- 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
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- 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
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请公开了一种三维动画引擎的资源加载方法,在资源打包过程中,将需要打包的资源的依赖信息作为包的主资源,所述资源作为辅资源进行打包,该加载方法包括:先通过预加载目标资源的依赖信息来获取依赖关系,然后再根据依赖关系加载目标资源的依赖资源和目标资源。本申请还公开了三维动画引擎的资源加载的装置和系统。本申请方案能够很好管理资源的依赖关系,提升开发效率。
Description
技术领域
本申请涉及计算机视频游戏开发技术,一种三维动画引擎的资源加载方法、装置及系统。
背景技术
Unity是由Unity Technologies开发的一个用于创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。
鉴于操作平台和Unity自身的限制,Unity资源一般都通过打包为资源包(AssetBundle)的方式进行动态更新与加载。Unity资源指的是用于生成场景及场景中各种物体的元素,例如模型贴图素材、场景源文件、插件等。Assetbundle是Unity Pro提供提供的功能,它可以把多个游戏对象或者资源二进制文件封装到Assetbundle中,提供了封装与解包的方法。
对于资源庞大的游戏来说,资源之间的各种依赖关系处理以及加载的时间消耗是个较大的难题,严重影响开发效率。
发明内容
本申请提供了一种三维动画引擎的资源加载方法、装置及系统,能够很好管理资源的依赖关系,提升开发效率。
本申请实施例提供了一种三维动画引擎的资源加载方法,在资源打包过程中,将需要打包的资源的依赖信息作为包的主资源,所述资源作为辅资源进行打包,该加载方法包括:先通过预加载目标资源的依赖信息来获取依赖关系,然后再根据依赖关系加载目标资源的依赖资源和目标资源。
较佳地,所述先通过预加载目标资源的依赖信息来获取依赖关系,然后再根据依赖关系加载目标资源的依赖资源和目标资源包括:
A、对于资源加载请求,判断依赖信息表中是否包含对应资源的依赖关系,若是,则进行步骤B;否则,在加载任务表中增加一个依赖信息加载的任务T1,并将该资源加载请求添加到任务T1中,然后执行步骤C;
B、根据依赖信息表判断该资源对象的依赖对象是否已经加载,若是,则进行步骤C;否则在加载任务表中增加所有依赖对象的加载任务T2,并将该资源加载请求添加到加载任务T2的请求列表中,然后执行步骤C;
C、在待加载队列中添加该资源的加载任务T3;
D、根据加载任务表进行资源加载;
E、判断待加载队列是否为空,若是,结束本流程;否则,从待加载队列中取出一定数量的任务,添加到加载任务表中,返回步骤D。
较佳地,步骤A之前进一步包括:
判断待加载队列中是否已经存在对应资源的加载任务,是则将该请求添加到待加载队列中的所述加载任务的请求列表中,然后执行步骤D;否则直接执行步骤A。
较佳地,步骤A之前进一步包括:
对于资源加载请求,判断加载任务表中面是否已经存在对应资源的加载任务,若是,则将该资源加载请求添加到加载任务表中的所述加载任务的请求列表中,然后执行步骤D;否则进行步骤A。
较佳地,步骤A之前进一步包括:
对于资源加载请求,判断资源对象表中是否已经存在对应的加载完毕、可以直接进行使用的资源对象,是则增加资源对象表中该对象的引用计数,并直接返回该资源对象的处理,结束该资源加载请求;否则进行步骤A。
较佳地,步骤D包括:
D1、判断加载任务的类型,如果为T1,执行步骤D2,如果为T2,执行步骤D3;如果为T3,执行步骤D4;
D2、对于依赖信息加载任务T1,从目标资源包中加载依赖信息并将所述依赖信息加入依赖信息表,然后依次处理该任务所包含的所有资源加载请求,然后执行步骤D5;
D3、对于所有依赖对象的加载任务T2,从依赖资源包中加载该加载任务对应的资源对象,将所述资源对象加入资源对象表并添加引用计数。加载结束后,依次处理该任务所包含的所有资源请求:当请求资源的依赖资源全部加载完毕后,执行步骤D5;
D4、对于资源的加载任务T3,从包中加载该加载任务对应的资源对象,将所述资源对象加入资源对象表并添加引用计数。加载结束后,依次处理该任务所包含的所有资源请求,然后对客户端返回该资源对象的处理结果;
D5、判断加载任务表中是否还有未处理的任务,若是,返回步骤D1,否则执行步骤E。
较佳地,在服务器侧和客户端侧,分别通过一个包信息列表对本地的资源进行维护;步骤A之前进一步包括:
在客户端启动时,比较本地和服务器的包信息列表,判断两者的校验信息是否一致,若一致,不作进一步处理;若不一致,表明有包添加、删除或者修改,则删除不需要的包或者向服务器发送请求下载发生变更的包。
较佳地,该方法进一步包括:每隔一段时间,对资源对象表进行遍历,检查其引用计数是否归0,并判断其是否为常驻内存的类型,对于引用计数为0的非常驻资源,对其进行卸载处理。
可选地,所述三维动画引擎为Unity引擎。
本申请实施例还提供了一种三维动画引擎的资源加载装置,该装置包括:
打包模块,用于在资源打包过程中,将需要打包的资源的依赖信息作为包的主资源,所述资源作为辅资源进行打包;
预加载模块,用于通过预加载目标资源的依赖信息来获取依赖关系;
资源加载模块,用于根据依赖关系加载目标资源的依赖资源和目标资源。
较佳地,所述预加载模块包括:第一判断单元、第二判断单元、依赖信息加载任务单元和资源加载任务单元;
第一判断单元,用于判断依赖信息表中是否包含与资源加载请求对应的资源的依赖关系,若是,使能第二判断单元;否则,通知依赖信息加载任务单元在加载任务表中增加一个依赖信息加载的任务T1,并将该资源加载请求添加到任务T1中;
第二判断单元,用于根据依赖信息表判断该资源对象的依赖对象是否已经加载,若是,则通知资源加载任务单元在待加载队列中添加该资源的加载任务T3;否则,通知依赖信息加载任务单元在加载任务表中增加所有依赖对象的加载任务T2,并将该资源加载请求添加到加载任务T2的请求列表中;然后通知资源加载任务单元在待加载队列中添加该资源的加载任务T3;;
依赖关系加载任务单元,用于根据来自第一判断单元的通知,在加载任务表中增加依赖信息加载的任务T1,并将该资源加载请求添加到任务T1中;或者根据来自第二判断单元的通知,在加载任务表中增加所有依赖对象的加载任务T2,并将该资源加载请求添加到加载任务T2的请求列表中;
资源加载任务单元,用于根据来自第二判断单元的通知,在待加载队列中添加该资源的加载任务T3;
资源加载模块包括:加载单元和待加载任务处理单元;
加载单元,用于根据加载任务表进行资源加载;
待加载任务处理单元,用于在加载任务表中的任务处理完毕后,从待加载队列中取出一定数量的任务,添加到加载任务表中。
较佳地,该装置进一步包括:
待加载判断模块,用于判断待加载队列中是否已经存在与资源加载请求对应的资源的加载任务,是则将该请求添加到待加载队列中的所述加载任务的请求列表中。
较佳地,该装置进一步包括:
加载判断模块,用于判断加载任务表中面是否已经存在与资源加载请求对应的资源的加载任务,若是,则将该资源加载请求添加到加载任务表中的所述加载任务的请求列表中。
较佳地,该装置进一步包括:
已加载判断模块,用于判断资源对象表中是否已经存在与资源加载请求对应的加载完毕、可以直接进行使用的资源对象,是则增加资源对象表中该对象的引用计数,并直接返回该资源对象的处理。
较佳地,加载单元包括:
任务类型判断子单元,用于判断加载任务的类型,如果为T1,使能第一加载子单元,如果为T2,使能第二加载子单元;如果为T3,使能第三加载子单元;
第一加载子单元,对于依赖信息加载任务T1,从目标资源包中加载依赖信息并将所述依赖信息加入依赖信息表,然后依次处理该任务所包含的所有资源加载请求;
第二加载子单元,对于所有依赖对象的加载任务T2,从依赖资源包中加载该加载任务对应的资源对象,将所述资源对象加入资源对象表并添加引用计数,加载结束后,依次处理该任务所包含的所有资源请求:
第三加载子单元,用于对于资源的加载任务T3,从包中加载该加载任务对应的资源对象,将所述资源对象加入资源对象表并添加引用计数。加载结束后,依次处理该任务所包含的所有资源请求,然后对客户端返回该资源对象的处理结果。
较佳地,该装置进一步包括:
卸载处理模块,用于每隔一段时间,对资源对象表进行遍历,检查其引用计数是否归0,并判断其是否为常驻内存的类型,对于引用计数为0的非常驻资源,对其进行卸载处理。
可选地,所述三维动画引擎为Unity引擎。
本申请实施例还提供了一种三维动画引擎的资源加载系统,该系统包括客户端和服务器,所述客户端包括如前所述的三维动画引擎的资源加载装置;
所述服务器包括:
资源维护模块,用于存储资源,通过一个包信息列表对服务器本地的资源进行维护;
所述客户端还包括:
客户端同步模块,用于通过一个包信息列表对客户端本地的资源进行维护;在客户端启动时,比较本地和服务器的包信息列表,判断两者的校验信息是否一致,若一致,不作进一步处理;若不一致,表明有包添加、删除或者修改,则删除不需要的包或者向服务器发送请求下载发生变更的包。
从以上技术方案可以看出,在打包过程中,将需要打包的资源的依赖信息作为包的主资源,所述资源作为辅资源进行打包;这样做的好处是无需预先将所有的依赖信息加载到内存中,在实际加载包时就可以获得其所有的依赖对象,从而节省内存。在加载资源时,先通过预加载目标资源的依赖信息来获取依赖关系,然后再根据依赖关系加载目标资源的依赖资源和目标资源,从而实现对资源的依赖关系进行有效管理,提升开发效率。
附图说明
图1为本申请实施例提供的Unity资源加载方法的基本处理流程示意图;
图2为本申请的另一个实施例提供了Unity资源加载更为详细的处理流程示意图;
图3为本申请又一实施例给出的Unity资源加载装置结构示意图。
具体实施方式
为使本申请技术方案的技术原理、特点以及技术效果更加清楚,以下结合具体实施例对本申请技术方案进行详细阐述。
本申请提供的三维动画引擎的资源打包加载一体化实现方法,其基本设计思想为:在打包过程中,将需要打包的资源的依赖信息作为包(Bundle)的主资源,所述资源作为辅资源进行打包;这样做的好处是无需预先将所有的依赖信息加载到内存中,在实际加载包时就可以获得其所有的依赖对象,从而节省内存。在加载资源时,先通过预加载目标资源的依赖信息来获取依赖关系,然后再根据依赖关系加载目标资源的依赖资源和目标资源。在打包结束时,会将所有的包名称及其校验信息存在特定列表中,以供更新。
为便于说明,以下实施例中以Unity引擎为例进行阐述,本领域技术人员根据说明书的记载,可以将本申请方案应用到其它不具备资源依赖信息管理功能的三维动画引擎。
本申请实施例主要维护了以下表格:
包信息列表:用于存储包的相关信息;
待加载队列(LoadQueue):用于存储所有正在等待加载的资源相关信息;
加载任务表(LoadingList):用于存储正在加载的资源相关信息;
包缓存表(BundleList):用于缓存Bundle对象;
资源对象表(ObjectList):用于缓存从Bundle中加载的具体资源对象(一个Bundle可能含一个或多个资源),可以直接使用资源对象表中的资源对象;
依赖信息表(Dependences):用于存储资源之间的相互依赖关系。
本申请的多个实施例中,可能存在一些实施例仅使用上述表格中的一部分。
本申请实施例提供的Unity资源加载方法,其基本处理流程如图1所示,包括如下步骤:
步骤101:对于资源加载请求,判断依赖信息表中是否包含对应资源的依赖关系,若是,则进行步骤102;否则,执行步骤103。
步骤102:根据依赖信息表判断该资源对象的依赖对象是否已经加载,若是,则进行步骤105;否则执行步骤104;
步骤103:在加载任务表中增加一个依赖信息加载的任务T1,并将该资源加载请求添加到任务T1中,然后执行步骤105。
步骤104:在加载任务表中增加所有依赖对象的加载任务T2,并将该资源加载请求添加到加载任务T2的请求列表中。
步骤105:在待加载队列中添加该资源的加载任务T3。
步骤106:根据加载任务表进行资源加载。
步骤107:判断待加载队列是否为空,若是,结束本流程;否则执行步骤108。
步骤108:从待加载队列中取出一定数量的任务,添加到加载任务表中,返回步骤106。
本申请的另一个实施例提供了Unity资源加载更为详细的处理流程,如图2所示,包括:
步骤201:判断资源对象表中是否已经存在对应的加载完毕、可以直接进行使用的资源对象,是则增加资源对象表中该对象的引用计数,并对客户端直接返回该资源对象的处理,结束该资源加载请求;否则进行步骤202。该步骤的作用是:资源只需被加载一次后就可以多次使用,避免已被加载的资源被重复加载。该步骤可以作为可选步骤。
步骤202:判断加载任务表中是否已经存在对应资源的加载任务,若是,则将该请求添加到加载任务表中的所述加载任务的请求列表中,然后转至步骤207;否则进行步骤203。加载任务表是正在进行加载处理的列表,一旦加载结束就能够对请求列表中的所有请求进行处理。该步骤为可选步骤。
步骤203:判断待加载队列中是否已经存在对应资源的加载任务,是则将该请求添加到待加载队列中的所述加载任务的请求列表中,然后转至步骤207;否则进行步骤204。待加载队列是还在等待、并未进行加载的任务列表,该列表的作用是在客户端发出大量不同资源的请求时先将部分请求缓存,等到之前的加载任务完成之后再执行新的资源加载请求,以便控制正在加载的资源数量,避免一次性加载过多资源导致卡顿的现象。该步骤为可选步骤。
步骤204:判断依赖信息表中是否包含该资源对象的依赖关系,若是,则进行步骤205;否则,增加一个依赖信息加载的任务T1,并将该资源加载请求添加到任务T1中,然后执行步骤206;通过任务T1可以加载该资源的所有依赖关系,依赖关系告知了使用该资源前必须预先加载的资源依赖对象。
步骤205:根据依赖信息表判断该资源对象的依赖对象是否已经加载,若是,则进行步骤206;否则增加所有依赖对象的加载任务T2,并将该请求添加到这些任务的请求列表中,然后执行步骤206。只有加载了依赖对象之后,才能正确地加载并使用该资源对象。
步骤206:在待加载队列中添加该资源的加载任务T3。
步骤207:根据加载任务表进行资源加载。
步骤208:加载任务表中的加载任务处理完毕后,判断待加载队列是否为空,若是,结束本流程,否则,从待加载队列中取出一定数量的任务,添加到加载任务表中,并返回步骤207。
上述操作可以确保在实际进行加载之前,依赖信息和所有依赖项都已经加载完毕。
本申请另一实施例给出了执行具体的加载操作的操作流程,包括:
步骤207-1:判断包缓存表中是否包含了任务所需要加载的依赖信息和/或资源,若是,直接执行步骤207-2;否则加载包文件并加入包缓存表。然后执行步骤207-2。
步骤207-2:根据任务类型执行相应的处理:
对于依赖信息加载任务T1,从包中加载依赖信息并加入依赖信息表。加载结束之后,依次处理该任务所包含的所有资源加载请求:即将之前请求加载但依赖信息并未到位的资源进行加载。
对于资源加载任务,从包中加载对应资源对象,加入资源对象表并添加引用计数。加载结束后,依次处理该任务所包含的所有资源请求:如果该任务加载的是依赖资源(任务类型T2),则判断请求资源的依赖资源是否全部加载完毕,是则增加请求资源的加载任务T3;如果该任务加载的是客户端请求的资源(任务类型T3),则对客户端返回该资源对象的处理。
在本申请的又一个实施例中,资源集中保存在服务器上,并且在服务器侧对资源进行集中维护和更新,客户端侧保存本机所需要的资源。一个或多个客户端与服务器连接,从服务器获取资源。在这种情况下,在资源加载之前,需要进行客户端与服务器的资源同步。
在服务器侧和客户端侧,分别通过一个包信息列表对本地的资源进行维护。在客户端启动时,比较本地和服务器的包信息列表,判断两者的校验信息是否一致,若一致,说明本地的包与服务器中的包是一致的,不作进一步处理;若不一致,表明有包添加、删除或者修改,则删除不需要的包或者向服务器发送请求下载发生变更的包。当客户端的所有资源更新至与服务器一致时,才能运行客户端逻辑,此时资源加载模块开始正式处理客户端的资源加载请求,根据需求加载已经下载到本地的资源。
在本申请的另一个实施例中,资源加载模块会记录每个包和每个资源的引用计数。每隔一段时间,对包缓存表和资源对象表进行遍历,检查其引用计数是否归0,并判断其是否为常驻内存的类型,对于引用计数为0的非常驻资源,对其进行卸载处理,避免内存浪费。
本申请的又一个实施例还提供了一种Unity资源加载装置,如图3所示,该装置300包括:
打包模块301,用于在资源打包过程中,将需要打包的资源的依赖信息作为包的主资源,所述资源作为辅资源进行打包;
预加载模块302,用于通过预加载目标资源的依赖信息来获取依赖关系;
资源加载模块303,用于根据依赖关系加载目标资源的依赖资源和目标资源。
较佳地,所述预加载模块302包括:第一判断单元、第二判断单元、依赖信息加载任务单元和资源加载任务单元;
第一判断单元,用于判断依赖信息表中是否包含与资源加载请求对应的资源的依赖关系,若是,使能第二判断单元;否则,通知依赖信息加载任务单元在加载任务表中增加一个依赖信息加载的任务T1,并将该资源加载请求添加到任务T1中;
第二判断单元,用于根据依赖信息表判断该资源对象的依赖对象是否已经加载,若是,则通知资源加载任务单元在待加载队列中添加该资源的加载任务T3;否则,通知依赖信息加载任务单元在加载任务表中增加所有依赖对象的加载任务T2,并将该资源加载请求添加到加载任务T2的请求列表中;然后通知资源加载任务单元在待加载队列中添加该资源的加载任务T3;;
依赖关系加载任务单元,用于根据来自第一判断单元的通知,在加载任务表中增加依赖信息加载的任务T1,并将该资源加载请求添加到任务T1中;或者根据来自第二判断单元的通知,在加载任务表中增加所有依赖对象的加载任务T2,并将该资源加载请求添加到加载任务T2的请求列表中;
资源加载任务单元,用于根据来自第二判断单元的通知,在待加载队列中添加该资源的加载任务T3;
资源加载模块包括:加载单元和待加载任务处理单元;
加载单元,用于根据加载任务表进行资源加载;
待加载任务处理单元,用于在加载任务表中的任务处理完毕后,从待加载队列中取出一定数量的任务,添加到加载任务表中。
可选地,该装置300进一步包括:
待加载判断模块304,用于判断待加载队列中是否已经存在与资源加载请求对应的资源的加载任务,是则将该请求添加到待加载队列中的所述加载任务的请求列表中。
可选地,该装置300进一步包括:
加载判断模块305,用于判断加载任务表中面是否已经存在与资源加载请求对应的资源的加载任务,若是,则将该资源加载请求添加到加载任务表中的所述加载任务的请求列表中。
可选地,该装置300进一步包括:
已加载判断模块306,用于判断资源对象表中是否已经存在与资源加载请求对应的加载完毕、可以直接进行使用的资源对象,是则增加资源对象表中该对象的引用计数,并直接返回该资源对象的处理。
可选地,加载单元包括:
任务类型判断子单元,用于判断加载任务的类型,如果为T1,使能第一加载子单元,如果为T2,使能第二加载子单元;如果为T3,使能第三加载子单元;
第一加载子单元,对于依赖信息加载任务T1,从目标资源包中加载依赖信息并将所述依赖信息加入依赖信息表,然后依次处理该任务所包含的所有资源加载请求;
第二加载子单元,对于所有依赖对象的加载任务T2,从依赖资源包中加载该加载任务对应的资源对象,将所述资源对象加入资源对象表并添加引用计数,加载结束后,依次处理该任务所包含的所有资源请求:
第三加载子单元,用于对于资源的加载任务T3,从包中加载该加载任务对应的资源对象,将所述资源对象加入资源对象表并添加引用计数。加载结束后,依次处理该任务所包含的所有资源请求,然后对客户端返回该资源对象的处理结果。
可选地,该装置300进一步包括:
卸载处理模块307,用于每隔一段时间,对资源对象表进行遍历,检查其引用计数是否归0,并判断其是否为常驻内存的类型,对于引用计数为0的非常驻资源,对其进行卸载处理。
本申请实施例还提供了一种Unity资源加载系统,该系统包括客户端和服务器,所述客户端包括之前的实施例公开的Unity资源加载装置;
所述服务器包括:
资源维护模块,用于存储资源,通过一个包信息列表对服务器本地的资源进行维护;
所述客户端还包括:
客户端同步模块,用于通过一个包信息列表对客户端本地的资源进行维护;在客户端启动时,比较本地和服务器的包信息列表,判断两者的校验信息是否一致,若一致,不作进一步处理;若不一致,表明有包添加、删除或者修改,则删除不需要的包或者向服务器发送请求下载发生变更的包。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本领域技术人员将理解,尽管以连续的顺序画出流程图以便理解,但在实际实现中可以并行地执行某些步骤。更进一步,除非另外说明,否则可以在不脱离本发明范围的情况下对方法步骤进行互换。
应当理解,虽然本说明书是按照各个实施方式描述的,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施方式中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请的保护范围,凡在本申请技术方案的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (16)
1.一种三维动画引擎的资源加载方法,其特征在于,在资源打包过程中,将需要打包的资源的依赖信息作为包的主资源,所述资源作为辅资源进行打包,该加载方法包括:先通过预加载目标资源的依赖信息来获取依赖关系,然后再根据依赖关系加载目标资源的依赖资源和目标资源;
其中,所述先通过预加载目标资源的依赖信息来获取依赖关系,然后再根据依赖关系加载目标资源的依赖资源和目标资源包括:
A、对于资源加载请求,判断依赖信息表中是否包含对应资源的依赖关系,若是,则进行步骤B;否则,在加载任务表中增加一个依赖信息加载的任务T1,并将该资源加载请求添加到任务T1中,然后执行步骤C;
B、根据依赖信息表判断该资源的依赖对象是否已经加载,若是,则进行步骤C;否则在加载任务表中增加所有依赖对象的加载任务T2,并将该资源加载请求添加到加载任务T2的请求列表中,然后执行步骤C;
C、在待加载队列中添加该资源的加载任务T3;
D、根据加载任务表进行资源加载;
E、判断待加载队列是否为空,若是,结束本流程;否则,从待加载队列中取出一定数量的任务,添加到加载任务表中,返回步骤D。
2.根据权利要求1所述的方法,其特征在于,步骤A之前进一步包括:
步骤A’、对于资源加载请求,判断待加载队列中是否已经存在对应资源的加载任务,是则将该请求添加到待加载队列中的所述加载任务的请求列表中,然后执行步骤D;否则直接执行步骤A。
3.根据权利要求2所述的方法,其特征在于,步骤A’之前进一步包括:
步骤A”、对于资源加载请求,判断加载任务表中是否已经存在对应资源的加载任务,若是,则将该资源加载请求添加到加载任务表中的所述加载任务的请求列表中,然后执行步骤D;否则进行步骤A’。
4.根据权利要求3所述的方法,其特征在于,步骤A”之前进一步包括:
对于资源加载请求,判断资源对象表中是否已经存在对应的加载完毕、可以直接进行使用的资源对象,是则增加资源对象表中该对象的引用计数,并直接返回该资源对象的处理,结束该资源加载请求;否则进行步骤A”。
5.根据权利要求4所述的方法,其特征在于,步骤D包括:
D1、判断加载任务的类型,如果为T1,执行步骤D2,如果为T2,执行步骤D3;如果为T3,执行步骤D4;
D2、对于依赖信息加载任务T1,从目标资源包中加载依赖信息并将所述依赖信息加入依赖信息表,然后依次处理该任务所包含的所有资源加载请求,然后执行步骤D5;
D3、对于所有依赖对象的加载任务T2,从依赖资源包中加载该加载任务对应的资源对象,将所述资源对象加入资源对象表并添加引用计数;加载结束后,依次处理该任务所包含的所有资源请求:当请求资源的依赖资源全部加载完毕后,执行步骤D5;
D4、对于资源的加载任务T3,从包中加载该加载任务对应的资源对象,将所述资源对象加入资源对象表并添加引用计数;加载结束后,依次处理该任务所包含的所有资源请求,然后对客户端返回该资源对象的处理结果;
D5、判断加载任务表中是否还有未处理的任务,若是,返回步骤D1,否则执行步骤E。
6.根据权利要求1至3任一项所述的方法,其特征在于,在服务器侧和客户端侧,分别通过一个包信息列表对本地的资源进行维护;步骤A之前进一步包括:
在客户端启动时,比较本地和服务器的包信息列表,判断两者的校验信息是否一致,若一致,不作进一步处理;若不一致,表明有包添加、删除或者修改,则删除不需要的包或者向服务器发送请求下载发生变更的包。
7.根据权利要求4所述的方法,其特征在于,该方法进一步包括:每隔一段时间,对资源对象表进行遍历,检查其引用计数是否归0,并判断其是否为常驻内存的类型,对于引用计数为0的非常驻资源,对其进行卸载处理。
8.根据权利要求1至3任一项所述的方法,其特征在于,所述三维动画引擎为Unity引擎。
9.一种三维动画引擎的资源加载装置,其特征在于,该装置包括:
打包模块,用于在资源打包过程中,将需要打包的资源的依赖信息作为包的主资源,所述资源作为辅资源进行打包;
预加载模块,用于通过预加载目标资源的依赖信息来获取依赖关系;
资源加载模块,用于根据依赖关系加载目标资源的依赖资源和目标资源;
其中,所述预加载模块包括:第一判断单元、第二判断单元、依赖信息加载任务单元和资源加载任务单元;
第一判断单元,用于判断依赖信息表中是否包含与资源加载请求对应的资源的依赖关系,若是,使能第二判断单元;否则,通知依赖信息加载任务单元在加载任务表中增加一个依赖信息加载的任务T1,并将该资源加载请求添加到任务T1中;
第二判断单元,用于根据依赖信息表判断该资源的依赖对象是否已经加载,若是,则通知资源加载任务单元在待加载队列中添加该资源的加载任务T3;否则,通知依赖信息加载任务单元在加载任务表中增加所有依赖对象的加载任务T2,并将该资源加载请求添加到加载任务T2的请求列表中;然后通知资源加载任务单元在待加载队列中添加该资源的加载任务T3;
依赖关系加载任务单元,用于根据来自第一判断单元的通知,在加载任务表中增加依赖信息加载的任务T1,并将该资源加载请求添加到任务T1中;或者根据来自第二判断单元的通知,在加载任务表中增加所有依赖对象的加载任务T2,并将该资源加载请求添加到加载任务T2的请求列表中;
资源加载任务单元,用于根据来自第二判断单元的通知,在待加载队列中添加该资源的加载任务T3;
资源加载模块包括:加载单元和待加载任务处理单元;
加载单元,用于根据加载任务表进行资源加载;
待加载任务处理单元,用于在加载任务表中的任务处理完毕后,从待加载队列中取出一定数量的任务,添加到加载任务表中。
10.根据权利要求9所述的装置,其特征在于,该装置进一步包括:
待加载判断模块,用于判断待加载队列中是否已经存在与资源加载请求对应的资源的加载任务,是则将该请求添加到待加载队列中的所述加载任务的请求列表中。
11.根据权利要求9所述的装置,其特征在于,该装置进一步包括:
加载判断模块,用于判断加载任务表中面是否已经存在与资源加载请求对应的资源的加载任务,若是,则将该资源加载请求添加到加载任务表中的所述加载任务的请求列表中。
12.根据权利要求9至11任一项所述的装置,其特征在于,该装置进一步包括:
已加载判断模块,用于判断资源对象表中是否已经存在与资源加载请求对应的加载完毕、可以直接进行使用的资源对象,是则增加资源对象表中该对象的引用计数,并直接返回该资源对象的处理。
13.根据权利要求12所述的装置,其特征在于,加载单元包括:
任务类型判断子单元,用于判断加载任务的类型,如果为T1,使能第一加载子单元,如果为T2,使能第二加载子单元;如果为T3,使能第三加载子单元;
第一加载子单元,对于依赖信息加载任务T1,从目标资源包中加载依赖信息并将所述依赖信息加入依赖信息表,然后依次处理该任务所包含的所有资源加载请求;
第二加载子单元,对于所有依赖对象的加载任务T2,从依赖资源包中加载该加载任务对应的资源对象,将所述资源对象加入资源对象表并添加引用计数,加载结束后,依次处理该任务所包含的所有资源请求:
第三加载子单元,用于对于资源的加载任务T3,从包中加载该加载任务对应的资源对象,将所述资源对象加入资源对象表并添加引用计数;加载结束后,依次处理该任务所包含的所有资源请求,然后对客户端返回该资源对象的处理结果。
14.根据权利要求12所述的装置,其特征在于,该装置进一步包括:
卸载处理模块,用于每隔一段时间,对资源对象表进行遍历,检查其引用计数是否归0,并判断其是否为常驻内存的类型,对于引用计数为0的非常驻资源,对其进行卸载处理。
15.根据权利要求9至11任一项所述的装置,其特征在于,所述三维动画引擎为Unity引擎。
16.一种三维动画引擎的资源加载系统,其特征在于,该系统包括客户端和服务器,所述客户端包括如权利要求9至11任一项所述的三维动画引擎的资源加载装置;
所述服务器包括:
资源维护模块,用于存储资源,通过一个包信息列表对服务器本地的资源进行维护;
所述客户端还包括:
客户端同步模块,用于通过一个包信息列表对客户端本地的资源进行维护;在客户端启动时,比较本地和服务器的包信息列表,判断两者的校验信息是否一致,若一致,不作进一步处理;若不一致,表明有包添加、删除或者修改,则删除不需要的包或者向服务器发送请求下载发生变更的包。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510632720.4A CN105354049B (zh) | 2015-09-29 | 2015-09-29 | 一种三维动画引擎的资源加载方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510632720.4A CN105354049B (zh) | 2015-09-29 | 2015-09-29 | 一种三维动画引擎的资源加载方法、装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105354049A CN105354049A (zh) | 2016-02-24 |
CN105354049B true CN105354049B (zh) | 2019-03-08 |
Family
ID=55330023
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510632720.4A Active CN105354049B (zh) | 2015-09-29 | 2015-09-29 | 一种三维动画引擎的资源加载方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105354049B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106708623B (zh) * | 2016-11-23 | 2021-04-27 | 腾讯科技(深圳)有限公司 | 一种对象资源处理方法、装置及系统 |
CN106815131B (zh) * | 2016-12-27 | 2019-11-26 | 珠海金山网络游戏科技有限公司 | 一种基于Unity引擎的游戏资源检查方法和系统 |
CN106874394B (zh) * | 2017-01-13 | 2020-12-29 | 百度在线网络技术(北京)有限公司 | 一种文件打包预处理的方法与设备 |
CN108984223B (zh) * | 2018-05-31 | 2021-04-02 | 北京三快在线科技有限公司 | 一种程序调用解耦方法、装置、电子设备及存储介质 |
CN110858240A (zh) * | 2018-08-14 | 2020-03-03 | 北京京东尚科信息技术有限公司 | 一种前端模块加载方法和装置 |
CN110152299B (zh) * | 2018-11-22 | 2022-01-14 | 腾讯科技(深圳)有限公司 | 一种游戏资源的构建方法和装置 |
CN111399931B (zh) * | 2018-12-29 | 2022-12-09 | 福建省天奕网络科技有限公司 | 一种LayaAir引擎导出UI资源的方法及终端 |
CN109981732A (zh) * | 2019-02-18 | 2019-07-05 | 百度在线网络技术(北京)有限公司 | 海量文件传输控制方法及装置 |
CN110109687B (zh) * | 2019-04-26 | 2023-06-30 | 腾讯科技(成都)有限公司 | 应用安装包生成方法及装置 |
CN112788083B (zh) * | 2019-11-11 | 2023-09-01 | 福建天晴数码有限公司 | 一种基于ftp进行引擎资源文件传输管理的方法 |
CN111249744B (zh) * | 2020-01-19 | 2022-04-26 | 腾讯科技(深圳)有限公司 | 资源加载方法和装置、存储介质及电子装置 |
CN112732267A (zh) * | 2021-01-11 | 2021-04-30 | 珠海金山网络游戏科技有限公司 | 减少bundle依赖链冗余的方法、装置及介质 |
CN113181652B (zh) * | 2021-04-23 | 2023-04-14 | 深圳市忒爱玩科技有限公司 | 游戏资源打包方法、系统、设备及存储介质 |
CN114764354B (zh) * | 2022-04-19 | 2024-01-05 | 卡奥斯工业智能研究院(青岛)有限公司 | 基于paas的依赖管理方法、装置、电子设备及介质 |
CN117919724A (zh) * | 2024-03-22 | 2024-04-26 | 深圳市迷你玩科技有限公司 | 游戏资源的管理方法、装置、电子设备及可读介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729224A (zh) * | 2013-12-30 | 2014-04-16 | 广州华多网络科技有限公司 | 基于开放平台的应用加载方法及装置 |
-
2015
- 2015-09-29 CN CN201510632720.4A patent/CN105354049B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729224A (zh) * | 2013-12-30 | 2014-04-16 | 广州华多网络科技有限公司 | 基于开放平台的应用加载方法及装置 |
Non-Patent Citations (2)
Title |
---|
《Unity5 如何做资源管理和增量更新》;悦峰;《http://blog.csdn.net/ring0hx/article/details/46376709》;20150605;正文第1-3页 |
《Unity5的AssetBundle的一点使用心得》;阿赵;《http://liweizhaolili.blog.163.com/blog/static/162307442162307442015/》;20150308;正文第1-4页 |
Also Published As
Publication number | Publication date |
---|---|
CN105354049A (zh) | 2016-02-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105354049B (zh) | 一种三维动画引擎的资源加载方法、装置及系统 | |
US20230176927A1 (en) | Rendering | |
CN103997544B (zh) | 一种资源下载的方法和设备 | |
US9372880B2 (en) | Reclamation of empty pages in database tables | |
CA2824393C (en) | Method and system for providing a session involving a plurality of software applications | |
US8799889B2 (en) | Application downloading | |
US6895575B2 (en) | Generic Java rule engine framework | |
CN111249744B (zh) | 资源加载方法和装置、存储介质及电子装置 | |
CN106656920B (zh) | Http服务的处理方法、装置、存储介质及处理器 | |
CN107229649B (zh) | 数据更新系统及方法 | |
CN108139926A (zh) | 后台作业处理框架 | |
KR20160119070A (ko) | 데이터 처리 애플리케이션의 모드를 동적으로 결정하는 방법 | |
CN110083651A (zh) | 一种数据加载的方法和装置 | |
CN109254804A (zh) | 一种静态资源加载方法、装置、设备及可读存储介质 | |
CN108197160A (zh) | 一种图片加载方法及装置 | |
CN116594717B (zh) | 一种类加载隔离方法、装置、设备及介质 | |
CN106874323A (zh) | 一种数据存储方法和装置 | |
CN107749916A (zh) | 一种手机rom云端实时定制下载的方法及装置 | |
CN102236679A (zh) | 基于浏览器页面的工作流输出方法及装置 | |
CN104580429B (zh) | 一种加载通讯信息的方法、服务器和云盘客户端 | |
CN108008984A (zh) | 一种资源文件下载更新方法及装置 | |
CN108848165A (zh) | 业务请求处理方法、装置、计算机设备和存储介质 | |
WO2018042016A1 (en) | Java card application package used as a library package | |
CN107643959A (zh) | 镜像文件处理方法和装置 | |
CN107145495A (zh) | 动态调整参数规则的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210225 Address after: 100043 507, 5th floor, building 3, South Block, main building, No.65 Bajiao East Street, Shijingshan District, Beijing Patentee after: Beijing Changyou chuangxiang Software Technology Co.,Ltd. Address before: 100043, room 3, building 3, No. 1210, West well road, Badachu hi tech park, Beijing, Shijingshan District Patentee before: BEIJING CHANGYOU TIANXIA NETWORK TECHNOLOGY Co.,Ltd. |
|
TR01 | Transfer of patent right |