CN105224323A - 一种三维动画引擎的资源打包方法及装置 - Google Patents
一种三维动画引擎的资源打包方法及装置 Download PDFInfo
- Publication number
- CN105224323A CN105224323A CN201510632736.5A CN201510632736A CN105224323A CN 105224323 A CN105224323 A CN 105224323A CN 201510632736 A CN201510632736 A CN 201510632736A CN 105224323 A CN105224323 A CN 105224323A
- Authority
- CN
- China
- Prior art keywords
- resource
- bag
- list
- packing
- rule
- 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.)
- Pending
Links
Abstract
本申请公开了一种三维动画引擎的资源打包方法,读取上次打包结束时保存的资源数据和打包信息,生成历史资源数据列表和历史打包信息列表;对资源目录进行遍历,记录所有的原始游戏资源并收集本次的资源数据和打包信息;比较本次的资源数据与历史资源数据列表,以及比较本次的打包信息和历史打包信息列表,分析哪些资源需要重新打包,生成重打包资源列表;遍历重打包资源列表,判断其子资源是否已被打包,若是,则对该资源进行打包,将该资源从重打包资源列表中删除,并加入已打包列表,否则先跳过;如此循环遍历直到重打包资源列表为空;保存本次的资源数据和打包信息。本申请还公开了一种用于实现三维动画引擎的资源打包的装置。
Description
技术领域
本申请涉及计算机视频游戏开发技术,尤其涉及一种三维动画引擎的资源打包方法及装置。
背景技术
Unity是由UnityTechnologies开发的一个用于创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。
鉴于操作平台和Unity自身的限制,Unity资源一般都通过打包为资源包(AssetBundle)的方式进行动态更新与加载。Unity资源指的是用于生成场景及场景中各种物体的元素,例如模型贴图素材、场景源文件、插件等。Assetbundle是UnityPro提供的功能,它可以把多个游戏对象或者资源二进制文件封装到Assetbundle中,提供了封装与解包的方法。
对于资源庞大的游戏来说,资源之间的各种依赖关系处理以及打包的时间消耗是个较大的难题,严重影响开发效率。
发明内容
本申请提供了一种三维动画引擎的资源打包方法,可以避免重复的资源打包,缩短打包所需的时间。
本申请实施例提供的一种三维动画引擎的资源打包方法,包括:
A、读取上次打包结束时保存的资源数据和打包信息,生成历史资源数据列表和历史打包信息列表;
B、对资源目录进行遍历,记录所有的原始游戏资源并收集本次的资源数据和打包信息;
C、比较本次的资源数据与历史资源数据列表,以及比较本次的打包信息和历史打包信息列表,分析哪些资源需要重新打包,生成重打包资源列表;
D、遍历重打包资源列表,判断其子资源是否已被打包,若是,则对该资源进行打包,将该资源从重打包资源列表中删除,并加入已打包列表,否则先跳过;如此循环遍历直到重打包资源列表为空;
E、保存本次的资源数据和打包信息。
较佳地,步骤A中,若不存在上次打包结束时保存的资源数据和打包信息,则生成两个对应的空表。
较佳地,所述原始游戏资源包括:渲染器、贴图、材质、模型、动画、网格、预制件、场景或以上内容的任意组合。
较佳地,所述资源数据包括:资源路径、文件大小与MD5值、对应的元数据文件大小和MD5值、父资源列表、子资源列表、打包的包名称。
较佳地,所述打包信息包括每个包的名称以及其所包含的资源名称。
较佳地,该方法进一步包括:增加强制打包的设置选项,对于某些非公共的可以被打入父资源包的子资源,强制令它们单独打成一个包。
较佳地,打包命名规则包括:
规则一:如果某一资源被指定强制打包,则其包名称为该资源名称。
较佳地,打包命名规则进一步包括:
规则二:非强制打包资源,如果父资源列表为空,则其包名称为资源名称,规则二的优先级低于规则一。
较佳地,打包命名规则进一步包括:
规则三:如果父资源只有一个,则其包名称为父资源的包名称,同时将与该资源同名的包内所有的资源所对应的包名称改为父资源包名称;规则三的优先级低于规则二。
较佳地,打包命名规则进一步包括:
规则四:如果有多个父资源,则其包名称为资源名称;规则四的优先级低于规则三。
较佳地,令历史资源数据列表中的历史资源数据为TA1,历史打包信息列表中的历史打包数据为TB1,本次收集的资源数据和打包信息为TA2和TB2;步骤C包括:
C1、若任一资源的本次的资源数据与历史资源数据列表中的对应记录不一致,将该资源的脏标记设置为True,否则将该资源的脏标记设置为false;
C2、若任一资源满足如下条件之一,设置该资源的重打包标记为True,否则设置该资源的重打包标记为false:
该资源在TA2中不存在对应的包名称;
该资源位于TB2中的一个包,且该包在TB1和TB2中包含的资源列表不一致;
该资源在TA1中的脏标记和强制打包属性均为True;
该资源的任一子资源的脏标记为True,且强制打包标记为False;
该资源的任一直接或间接父资源的重打包标记为True;
在资源位于TB2的一个包中,该包的资源列表中存在需要重新打包的资源;
C3、生成包含所有重打包标记为True的资源的重打包资源列表。
较佳地,步骤C1包括:
如果任一资源满足如下条件之一,设置该资源的脏标记为True,若都不满足设置该资源的脏标记为false:
该资源包含在TA2中,但不包含在TA1;
该资源在TA1和TA2中的文件和元数据的大小和MD5值不一致;
该资源在TA1和TA2中的强制打包标记和包名称不一致;
该资源在TA1和TA2中的子资源列表不一致。
可选地,所述三维动画引擎为Unity引擎。
本申请实施例还提供了一种用于实现三维动画引擎的资源打包的装置,包括:
历史信息模块,用于读取上次打包结束时保存的资源数据和打包信息,生成历史资源数据列表和历史打包信息列表;
当前信息模块,用于对资源目录进行遍历,记录所有的原始游戏资源,收集并保存本次的资源数据和打包信息;
比较模块,用于比较本次的资源数据与历史资源数据列表,以及比较本次的打包信息和历史打包信息列表,分析哪些资源需要重新打包,生成重打包资源列表;
打包模块,用于遍历重打包资源列表,判断其子资源是否已被打包,若是,则对该资源进行打包,将该资源从重打包资源列表中删除,并加入已打包列表,否则先跳过;如此循环遍历直到重打包资源列表为空。
较佳地,若不存在上次打包结束时保存的资源数据和打包信息,则历史信息模块生成两个对应的空表。
较佳地,所述原始游戏资源包括:渲染器、贴图、材质、模型、动画、网格、预制件、场景或以上内容的任意组合。
较佳地,所述资源数据包括:资源路径、文件大小与MD5值、对应的元数据文件大小和MD5值、父资源列表、子资源列表、打包的包名称。
较佳地,所述打包信息包括每个包的名称以及其所包含的资源名称。
较佳地,所述比较模块进一步包括:
强制打包单元,用于根据强制打包的设置选项,对于某些非公共的可以被打入父资源包的子资源,强制令它们单独打成一个包。
较佳地,打包模块的打包命名规则包括:
规则一:如果某一资源被指定强制打包,则其包名称为该资源名称。
较佳地,打包命名规则进一步包括:
规则二:非强制打包资源,如果父资源列表为空,则其包名称为资源名称,规则二的优先级低于规则一。
较佳地,打包命名规则进一步包括:
规则三:如果父资源只有一个,则其包名称为父资源的包名称,同时将与该资源同名的包内所有的资源所对应的包名称改为父资源包名称;规则三的优先级低于规则二。
较佳地,打包命名规则进一步包括:
规则四:如果有多个父资源,则其包名称为资源名称;规则四的优先级低于规则三。
较佳地,令历史资源数据列表中的历史资源数据为TA1,历史打包信息列表中的历史打包数据为TB1,本次收集的资源数据和打包信息为TA2和TB2;比较模块包括:
脏标记设置单元,用于当任一资源的本次的资源数据与历史资源数据列表中的对应记录不一致时,将该资源的脏标记设置为True,否则将该资源的脏标记设置为false;
重打包标记设置单元,用于当任一资源满足如下条件之一时,设置该资源的重打包标记为True,否则设置该资源的重打包标记为false:
该资源在TA2中不存在对应的包名称;
该资源位于TB2中的一个包,且该包在TB1和TB2中包含的资源列表不一致;
该资源在TA1中的脏标记和强制打包属性均为True;
该资源的任一子资源的脏标记为True,且强制打包标记为False;
该资源的任一直接或间接父资源的重打包标记为True;
在资源位于TB2的一个包中,该包的资源列表中存在需要重新打包的资源;
重打包资源列表生成单元,用于生成包含所有重打包标记为True的资源的重打包资源列表。
较佳地,脏标记设置单元用于当任一资源满足如下条件之一时,设置该资源的脏标记为True,若都不满足设置该资源的脏标记为false:
该资源包含在TA2中,但不包含在TA1;
该资源在TA1和TA2中的文件和元数据的大小和MD5值不一致;
该资源在TA1和TA2中的强制打包标记和包名称不一致;
该资源在TA1和TA2中的子资源列表不一致。
可选地,所述三维动画引擎为Unity引擎。
从以上技术方案可以看出,通过分析每次打包时资源的信息、依赖关系和打包需求,分析资源依赖和复用的情况,自动生成打包规则,并将当次的数据与上次打包所记录的数据按照一定的规则进行对比分析,最终根据这些数据得到需要重新打包的资源信息并进行打包。该方案可以避免重复的资源打包,缩短打包所需的时间。
附图说明
图1为本申请实施例提供的Unity资源打包方法流程示意图;
图2为资源依赖关系示意图;
图3a为第一种资源打包方式原理示意图;
图3b为第二种资源打包方式原理示意图;
图3c为第三种资源打包方式原理示意图;
图4为本申请的一个实施例给出的步骤103的一种具体实现方式流程示意图。
图5为本申请的一个实施例提供的一种用于实现Unity资源打包的装置示意图。
具体实施方式
为使本申请技术方案的技术原理、特点以及技术效果更加清楚,以下结合具体实施例对本申请技术方案进行详细阐述。
为便于说明,以下实施例中以Unity引擎为例进行阐述,本领域技术人员根据说明书的记载,可以将本申请方案应用到其它不具备资源依赖信息管理功能的三维动画引擎。
本申请实施例提供的Unity资源打包方法流程如图1所示,包括如下步骤:
步骤101:读取上次打包结束时保存的资源数据和打包信息,生成历史资源数据列表和历史打包信息列表。如果不存在对应的资源数据文件,则生成两个对应的空表。
所述资源数据包括但不限于:资源路径、文件大小与MD5值、对应的元数据(meta)文件大小和MD5值、父资源列表(父资源为依赖该资源的资源)、子资源列表(子资源为被该资源依赖的资源)、打包的包名称等等,通过比较上述两次打包中的资源元数据是否发生变化可以得知有哪些资源被修改。
打包信息包含每个包的名称以及其所包含的资源名称。通过比较历史打包信息列表,可以得知当某个资源被修改时,有哪些资源与它同处于一个包,需要进行重新打包。
步骤102:对资源目录进行遍历,记录所有的原始游戏资源并收集本次的资源数据和打包信息。
步骤103:比较本次的资源数据与历史资源数据列表,以及比较本次的打包信息和历史打包信息列表,分析哪些资源需要重新打包,生成重打包资源列表。
步骤104:遍历重打包资源列表,判断其子资源是否已被打包,若是,则对该资源进行打包,将该资源从重打包资源列表中删除,并加入已打包列表,否则先跳过;如此循环遍历直到重打包资源列表为空。
步骤105:保存此次的资源数据和打包信息。
原始游戏资源主要包括渲染器(Shader)、贴图(Texture)、材质(Material)、模型(Model)、动画(Animation)、网格(Mesh)、预制件(Prefab)、场景(Scene)等常用资源中的部分或全部。通常情况下,这些原始资源虽然单个文件所占用的存储空间不大,但是数量庞大,具有复杂的多重依赖关系和不稳定的使用频率。
在使用某一个资源之前必须将额外的一个或多个资源预先进行加载,即构成了依赖关系。一个资源可以直接或间接依赖于多个资源,也可以被多个不同的资源依赖,如图2所示,渲染器1不依赖任何资源,被材质1所依赖,而预制件2则依赖于材质2、网格2(直接依赖)以及渲染器2、贴图1、贴图2和动画1(间接依赖),同时被场景1和场景2两者所依赖。
由图2可知,这种多对多的关系组成了多样化的游戏资源结构,同时增加了游戏资源在打包和管理上的困难度。
AssetBundles是Unity提供的打包资源格式,具有资源压缩、动态更新与流式加载的功能。一个包可包含一个或多个资源,通过将资源及其依赖项打入一个包内可以减少资源加载的复杂度。但是不同的资源可能包含一系列公共资源。
假设有资源A1、A2、A3、B1和B2,其中B1依赖A1和A2,B2依赖A2和A3。
对此通常有三种打包方式:
如图3a所示,将B1和B2分别打成单独的包301和302,每个包中均包含这两个资源依赖的资源,其中共用资源A2会在这两个包中均有一个拷贝。这种处理方式会浪费部分硬盘和内存空间;
如图3b所示,将公用资源A2打到一个包中(303),依赖该公共资源的所有资源(B1和B2)也均在该高中。这种处理方式会导致单个包过大,而且在实际载入游戏时会同时加载不必要的资源,浪费内存。
如图3c所示,通过Unity的依赖引用功能,将公共资源A2打成单独包(306),将其余资源各自打包并共享公用资源:该方案需要自行维护依赖关系,手动加载依赖包。
本申请实施例方案使用第三种方法进行打包。然而,由于在使用依赖引用功能进行打包时,必须预先打包其所有的依赖项并将其推入打包堆栈,增加了打包过程的复杂度和时长,因此在打包之前必须收集并分析资源元数据,剔除无需再次打包的资源。
另外,为了满足项目动态加载的打包需求,本申请实施例中增加了强制打包的设置选项,对于某些非公共的可以被打入父资源包的子资源,可以强制令它们单独打成一个包。
本申请实施例方案根据以下规则来决定资源将被打入什么包,生成资源的打包信息,规则的优先度依次递减:
规则一:如果某一资源被指定强制打包,则其包名称为该资源名称。
规则二:非强制打包资源,如果父资源列表为空,则其包名称为资源名称。
规则三:如果父资源只有一个,则其包名称为父资源的包名称(即该资源将被打入父资源的包内),同时将与该资源同名的包内所有的资源所对应的包名称改为父资源包名称(即将原本要打入该资源包的资源一并打入父资源包)。
规则四:如果有多个父资源,则其包名称为资源名称。
本申请的一个实施例给出了步骤103的一种具体实现方式,令历史资源数据列表中的历史资源数据为TA1,历史打包信息列表中的历史打包数据为TB1,本次收集的资源数据和打包信息为TA2和TB2,步骤103包括:
步骤103-1:如果任一资源满足如下条件之一,设置该资源的脏标记为True,若都不满足设置该资源的脏标记为false:
该资源包含在TA2中,但不包含在TA1;
该资源在TA1和TA2中的文件和元数据的大小和MD5值不一致;
该资源在TA1和TA2中的强制打包标记和包名称不一致;
该资源在TA1和TA2中的子资源列表不一致;
步骤103-2:若任一资源满足如下条件之一,设置该资源的重打包标记为True,否则设置该资源的重打包标记为false:
该资源在TA2中不存在对应的包名称;
该资源位于TB2中的一个包,且该包在在TB1和TB2中包含的资源列表不一致;
该资源在TA1中的脏标记和强制打包属性均为True;
该资源的任一子资源的脏标记为True,且强制打包标记为False;
该资源的任一直接或间接父资源的重打包标记为True;
在资源位于TB2的一个包中,该包的资源列表中存在需要重新打包的资源;
步骤103-3:生成包含所有重打包标记为True的资源的重打包资源列表。
图4给出了步骤103的一种具体实现方式流程,包括:
步骤401:初始化每个资源的脏标记和重打包标记为false:
步骤402:如果TA1中不包含TA2中的资源,说明该资源为新增加的资源,设置脏标记为True。
步骤403:比较同一资源在TA1和TA2中的文件和元数据的大小和MD5值,如果不一致则说明资源文件及其元数据被修改过,脏标记为True。
步骤404:比较资源在TA1和TA2中的强制打包标记和包名称是否一致,不一致说明打包需求或者资源依赖被修改过,脏标记为True。
步骤405:比较资源在TA1和TA2中的子资源列表是否一致,不一致说明资源依赖被修改过,脏标记为True。
步骤406:在TA2中获取资源的包名称,判断该包是否存在,不存在则说明需要重新打包,重打包标记为True。
步骤407:TB2不包含TB1中的包名称,则将该包加入删除列表。
步骤408:比较同一包在TB1和TB2中包含的资源列表,如果列表不一致则说明该包需要重新打包,需要将该包在TB2中所包含的所有资源的重打包标记设为True。比如包X在TB1中包含资源A、B、C,而在TB2中只有A、B,则A、B的重打包标记都设为True。
步骤409:判断TA1中每个资源的脏标记和强制打包属性,如果两者均为True,则设置该资源的重打包标记为True;如果该资源脏标记为True但是强制打包标记为False,则说明需要打包的是其父资源,将其父资源的重打包标记设为True。
步骤410:循环检查TA1中的每个资源(父资源需要重新打包的话,子资源必须也重新打包):如果该资源的重打包标记为True,则将其所有子资源的重打包标记设为True;遍历所有父资源,如果存在一个父资源为True,则将该资源也设为True。
步骤411:判断TB2中每个包的资源列表中是否存在需要重新打包的资源,是则设置该包内其他所有资源的重打包标记为True。
步骤412:完成以上操作后,所有重打包标记为True的资源就是最终需要打包的资源,将这些资源加入重打包资源列表中。
本申请的一个实施例还提供了一种用于实现Unity资源打包的装置500,如图5所示,包括:
历史信息模块501,用于读取上次打包结束时保存的资源数据和打包信息,生成历史资源数据列表和历史打包信息列表;
当前信息模块502,用于对资源目录进行遍历,记录所有的原始游戏资源,收集并保存本次的资源数据和打包信息;
比较模块503,用于比较本次的资源数据与历史资源数据列表,以及比较本次的打包信息和历史打包信息列表,分析哪些资源需要重新打包,生成重打包资源列表;
打包模块504,用于遍历重打包资源列表,判断其子资源是否已被打包,若是,则对该资源进行打包,将该资源从重打包资源列表中删除,并加入已打包列表,否则先跳过;如此循环遍历直到重打包资源列表为空。
根据本申请的另一实施例,若不存在上次打包结束时保存的资源数据和打包信息,则历史信息模块生成两个对应的空表。
根据本申请的另一实施例,所述原始游戏资源包括:渲染器、贴图、材质、模型、动画、网格、预制件、场景或以上内容的任意组合。
根据本申请的另一实施例,所述资源数据包括:资源路径、文件大小与MD5值、对应的元数据文件大小和MD5值、父资源列表、子资源列表、打包的包名称。
根据本申请的另一实施例,所述打包信息包括每个包的名称以及其所包含的资源名称。
根据本申请的另一实施例,所述比较模块503进一步包括:
强制打包单元,用于根据强制打包的设置选项,对于某些非公共的可以被打入父资源包的子资源,强制令它们单独打成一个包。
根据本申请的另一实施例,打包模块504的打包命名规则包括:
规则一:如果某一资源被指定强制打包,则其包名称为该资源名称。
根据本申请的另一实施例,打包命名规则进一步包括:
规则二:非强制打包资源,如果父资源列表为空,则其包名称为资源名称,规则二的优先级低于规则一。
根据本申请的另一实施例,打包命名规则进一步包括:
规则三:如果父资源只有一个,则其包名称为父资源的包名称,同时将与该资源同名的包内所有的资源所对应的包名称改为父资源包名称;规则三的优先级低于规则二。
根据本申请的另一实施例,打包命名规则进一步包括:
规则四:如果有多个父资源,则其包名称为资源名称;规则四的优先级低于规则三。
根据本申请的另一实施例,令历史资源数据列表中的历史资源数据为TA1,历史打包信息列表中的历史打包数据为TB1,本次收集的资源数据和打包信息为TA2和TB2;比较模块503包括:
脏标记设置单元,用于当任一资源的本次的资源数据与历史资源数据列表中的对应记录不一致时,将该资源的脏标记设置为True,否则将该资源的脏标记设置为false;
重打包标记设置单元,用于当任一资源满足如下条件之一时,设置该资源的重打包标记为True,否则设置该资源的重打包标记为false:
该资源在TA2中不存在对应的包名称;
该资源位于TB2中的一个包,且该包在TB1和TB2中包含的资源列表不一致;
该资源在TA1中的脏标记和强制打包属性均为True;
该资源的任一子资源的脏标记为True,且强制打包标记为False;
该资源的任一直接或间接父资源的重打包标记为True;
在资源位于TB2的一个包中,该包的资源列表中存在需要重新打包的资源;
重打包资源列表生成单元,用于生成包含所有重打包标记为True的资源的重打包资源列表。
根据本申请的另一实施例,脏标记设置单元用于当任一资源满足如下条件之一时,设置该资源的脏标记为True,若都不满足设置该资源的脏标记为false:
该资源包含在TA2中,但不包含在TA1;
该资源在TA1和TA2中的文件和元数据的大小和MD5值不一致;
该资源在TA1和TA2中的强制打包标记和包名称不一致;
该资源在TA1和TA2中的子资源列表不一致。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请的保护范围,凡在本申请技术方案的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (26)
1.一种三维动画引擎的资源打包方法,其特征在于,包括:
A、读取上次打包结束时保存的资源数据和打包信息,生成历史资源数据列表和历史打包信息列表;
B、对资源目录进行遍历,记录所有的原始游戏资源并收集本次的资源数据和打包信息;
C、比较本次的资源数据与历史资源数据列表,以及比较本次的打包信息和历史打包信息列表,分析哪些资源需要重新打包,生成重打包资源列表;
D、遍历重打包资源列表,判断其子资源是否已被打包,若是,则对该资源进行打包,将该资源从重打包资源列表中删除,并加入已打包列表,否则先跳过;如此循环遍历直到重打包资源列表为空;
E、保存本次的资源数据和打包信息。
2.根据权利要求1所述的方法,其特征在于,步骤A中,若不存在上次打包结束时保存的资源数据和打包信息,则生成两个对应的空表。
3.根据权利要求1所述的方法,其特征在于,所述原始游戏资源包括:渲染器、贴图、材质、模型、动画、网格、预制件、场景或以上内容的任意组合。
4.根据权利要求1所述的方法,其特征在于,所述资源数据包括:资源路径、文件大小与MD5值、对应的元数据文件大小和MD5值、父资源列表、子资源列表、打包的包名称。
5.根据权利要求4所述的方法,其特征在于,所述打包信息包括每个包的名称以及其所包含的资源名称。
6.根据权利要求5所述的方法,其特征在于,该方法进一步包括:增加强制打包的设置选项,对于某些非公共的可以被打入父资源包的子资源,强制令它们单独打成一个包。
7.根据权利要求6所述的方法,其特征在于,打包命名规则包括:
规则一:如果某一资源被指定强制打包,则其包名称为该资源名称。
8.根据权利要求7所述的方法,其特征在于,打包命名规则进一步包括:
规则二:非强制打包资源,如果父资源列表为空,则其包名称为资源名称,规则二的优先级低于规则一。
9.根据权利要求8所述的方法,其特征在于,打包命名规则进一步包括:
规则三:如果父资源只有一个,则其包名称为父资源的包名称,同时将与该资源同名的包内所有的资源所对应的包名称改为父资源包名称;规则三的优先级低于规则二。
10.根据权利要求9所述的方法,其特征在于,打包命名规则进一步包括:
规则四:如果有多个父资源,则其包名称为资源名称;规则四的优先级低于规则三。
11.根据权利要求6所述的方法,其特征在于,令历史资源数据列表中的历史资源数据为TA1,历史打包信息列表中的历史打包数据为TB1,本次收集的资源数据和打包信息为TA2和TB2;步骤C包括:
C1、若任一资源的本次的资源数据与历史资源数据列表中的对应记录不一致,将该资源的脏标记设置为True,否则将该资源的脏标记设置为false;
C2、若任一资源满足如下条件之一,设置该资源的重打包标记为True,否则设置该资源的重打包标记为false:
该资源在TA2中不存在对应的包名称;
该资源位于TB2中的一个包,且该包在TB1和TB2中包含的资源列表不一致;
该资源在TA1中的脏标记和强制打包属性均为True;
该资源的任一子资源的脏标记为True,且强制打包标记为False;
该资源的任一直接或间接父资源的重打包标记为True;
在资源位于TB2的一个包中,该包的资源列表中存在需要重新打包的资源;
C3、生成包含所有重打包标记为True的资源的重打包资源列表。
12.根据权利要求11所述的方法,其特征在于,步骤C1包括:
如果任一资源满足如下条件之一,设置该资源的脏标记为True,若都不满足设置该资源的脏标记为false:
该资源包含在TA2中,但不包含在TA1;
该资源在TA1和TA2中的文件和元数据的大小和MD5值不一致;
该资源在TA1和TA2中的强制打包标记和包名称不一致;
该资源在TA1和TA2中的子资源列表不一致。
13.根据权利要求1至12任一项所述的方法,其特征在于,所述三维动画引擎为Unity引擎。
14.一种用于实现三维动画引擎的资源打包的装置,其特征在于,包括:
历史信息模块,用于读取上次打包结束时保存的资源数据和打包信息,生成历史资源数据列表和历史打包信息列表;
当前信息模块,用于对资源目录进行遍历,记录所有的原始游戏资源,收集并保存本次的资源数据和打包信息;
比较模块,用于比较本次的资源数据与历史资源数据列表,以及比较本次的打包信息和历史打包信息列表,分析哪些资源需要重新打包,生成重打包资源列表;
打包模块,用于遍历重打包资源列表,判断其子资源是否已被打包,若是,则对该资源进行打包,将该资源从重打包资源列表中删除,并加入已打包列表,否则先跳过;如此循环遍历直到重打包资源列表为空。
15.根据权利要求14所述的装置,其特征在于,若不存在上次打包结束时保存的资源数据和打包信息,则历史信息模块生成两个对应的空表。
16.根据权利要求14所述的装置,其特征在于,所述原始游戏资源包括:渲染器、贴图、材质、模型、动画、网格、预制件、场景或以上内容的任意组合。
17.根据权利要求14所述的装置,其特征在于,所述资源数据包括:资源路径、文件大小与MD5值、对应的元数据文件大小和MD5值、父资源列表、子资源列表、打包的包名称。
18.根据权利要求17所述的装置,其特征在于,所述打包信息包括每个包的名称以及其所包含的资源名称。
19.根据权利要求18所述的装置,其特征在于,所述比较模块进一步包括:
强制打包单元,用于根据强制打包的设置选项,对于某些非公共的可以被打入父资源包的子资源,强制令它们单独打成一个包。
20.根据权利要求19所述的装置,其特征在于,打包模块的打包命名规则包括:
规则一:如果某一资源被指定强制打包,则其包名称为该资源名称。
21.根据权利要求20所述的装置,其特征在于,打包命名规则进一步包括:
规则二:非强制打包资源,如果父资源列表为空,则其包名称为资源名称,规则二的优先级低于规则一。
22.根据权利要求21所述的装置,其特征在于,打包命名规则进一步包括:
规则三:如果父资源只有一个,则其包名称为父资源的包名称,同时将与该资源同名的包内所有的资源所对应的包名称改为父资源包名称;规则三的优先级低于规则二。
23.根据权利要求22所述的装置,其特征在于,打包命名规则进一步包括:
规则四:如果有多个父资源,则其包名称为资源名称;规则四的优先级低于规则三。
24.根据权利要求19所述的装置,其特征在于,令历史资源数据列表中的历史资源数据为TA1,历史打包信息列表中的历史打包数据为TB1,本次收集的资源数据和打包信息为TA2和TB2;比较模块包括:
脏标记设置单元,用于当任一资源的本次的资源数据与历史资源数据列表中的对应记录不一致时,将该资源的脏标记设置为True,否则将该资源的脏标记设置为false;
重打包标记设置单元,用于当任一资源满足如下条件之一时,设置该资源的重打包标记为True,否则设置该资源的重打包标记为false:
该资源在TA2中不存在对应的包名称;
该资源位于TB2中的一个包,且该包在TB1和TB2中包含的资源列表不一致;
该资源在TA1中的脏标记和强制打包属性均为True;
该资源的任一子资源的脏标记为True,且强制打包标记为False;
该资源的任一直接或间接父资源的重打包标记为True;
在资源位于TB2的一个包中,该包的资源列表中存在需要重新打包的资源;
重打包资源列表生成单元,用于生成包含所有重打包标记为True的资源的重打包资源列表。
25.根据权利要求24所述的装置,其特征在于,脏标记设置单元用于当任一资源满足如下条件之一时,设置该资源的脏标记为True,若都不满足设置该资源的脏标记为false:
该资源包含在TA2中,但不包含在TA1;
该资源在TA1和TA2中的文件和元数据的大小和MD5值不一致;
该资源在TA1和TA2中的强制打包标记和包名称不一致;
该资源在TA1和TA2中的子资源列表不一致。
26.根据权利要求14至25任一项所述的方法,其特征在于,所述三维动画引擎为Unity引擎。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510632736.5A CN105224323A (zh) | 2015-09-29 | 2015-09-29 | 一种三维动画引擎的资源打包方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510632736.5A CN105224323A (zh) | 2015-09-29 | 2015-09-29 | 一种三维动画引擎的资源打包方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105224323A true CN105224323A (zh) | 2016-01-06 |
Family
ID=54993320
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510632736.5A Pending CN105224323A (zh) | 2015-09-29 | 2015-09-29 | 一种三维动画引擎的资源打包方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105224323A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106708623A (zh) * | 2016-11-23 | 2017-05-24 | 腾讯科技(深圳)有限公司 | 一种对象资源处理方法、装置及系统 |
CN106776012A (zh) * | 2016-11-28 | 2017-05-31 | 武汉秀宝软件有限公司 | 一种虚拟资源的管理方法及系统 |
CN107038044A (zh) * | 2017-03-27 | 2017-08-11 | 长沙趣动文化科技有限公司 | 基于Unity3D的游戏资源离散加载方法及系统 |
CN108334368A (zh) * | 2017-09-04 | 2018-07-27 | 祖龙(天津)科技有限公司 | 一种基于Unity引擎的更新文件打包方法及打包工具 |
CN108345470A (zh) * | 2017-01-24 | 2018-07-31 | 阿里巴巴集团控股有限公司 | 一种数据处理、存储的方法、装置及电子设备 |
CN108897554A (zh) * | 2018-06-26 | 2018-11-27 | 苏州蜗牛数字科技股份有限公司 | 一种unity3D打包系统优化方法 |
CN109821240A (zh) * | 2018-12-05 | 2019-05-31 | 广州西山居世游网络科技有限公司 | 一种基于Unity实现资源LOD分级的方法及其装置 |
CN110652728A (zh) * | 2019-09-24 | 2020-01-07 | 北京金山安全软件有限公司 | 一种游戏资源管理方法、装置、电子设备及存储介质 |
CN111064712A (zh) * | 2019-11-29 | 2020-04-24 | 珠海金山网络游戏科技有限公司 | 一种游戏资源打包方法及系统 |
CN111651193A (zh) * | 2020-06-03 | 2020-09-11 | 上海米哈游天命科技有限公司 | 一种信息打包方法、装置、设备及介质 |
CN112925559A (zh) * | 2021-04-09 | 2021-06-08 | 网易(杭州)网络有限公司 | 资源打包方法、装置、介质及电子设备 |
CN115391058A (zh) * | 2022-08-05 | 2022-11-25 | 江苏安超云软件有限公司 | 一种基于sdn的资源事件处理方法、资源创建方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831204A (zh) * | 2012-08-09 | 2012-12-19 | 珠海金山网络游戏科技有限公司 | 一种具备版本控制能力的文件打包格式 |
CN104252364A (zh) * | 2013-06-25 | 2014-12-31 | 腾讯科技(深圳)有限公司 | 增量更新的方法、设备及系统 |
-
2015
- 2015-09-29 CN CN201510632736.5A patent/CN105224323A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831204A (zh) * | 2012-08-09 | 2012-12-19 | 珠海金山网络游戏科技有限公司 | 一种具备版本控制能力的文件打包格式 |
CN104252364A (zh) * | 2013-06-25 | 2014-12-31 | 腾讯科技(深圳)有限公司 | 增量更新的方法、设备及系统 |
Non-Patent Citations (1)
Title |
---|
悦峰: "《Unity5 如何做资源管理和增量更新》", 《HTTP://BLOG.CSDN.NET/RING0HX/ARTICLE/DETAILS/46376709》 * |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106708623A (zh) * | 2016-11-23 | 2017-05-24 | 腾讯科技(深圳)有限公司 | 一种对象资源处理方法、装置及系统 |
CN106776012A (zh) * | 2016-11-28 | 2017-05-31 | 武汉秀宝软件有限公司 | 一种虚拟资源的管理方法及系统 |
CN106776012B (zh) * | 2016-11-28 | 2020-06-23 | 武汉秀宝软件有限公司 | 一种虚拟资源的管理方法及系统 |
CN108345470B (zh) * | 2017-01-24 | 2021-10-08 | 阿里巴巴集团控股有限公司 | 一种数据处理、存储的方法、装置及电子设备 |
CN108345470A (zh) * | 2017-01-24 | 2018-07-31 | 阿里巴巴集团控股有限公司 | 一种数据处理、存储的方法、装置及电子设备 |
CN107038044A (zh) * | 2017-03-27 | 2017-08-11 | 长沙趣动文化科技有限公司 | 基于Unity3D的游戏资源离散加载方法及系统 |
CN108334368A (zh) * | 2017-09-04 | 2018-07-27 | 祖龙(天津)科技有限公司 | 一种基于Unity引擎的更新文件打包方法及打包工具 |
CN108334368B (zh) * | 2017-09-04 | 2021-06-08 | 祖龙(天津)科技股份有限公司 | 一种基于Unity引擎的更新文件打包方法及打包工具 |
CN108897554A (zh) * | 2018-06-26 | 2018-11-27 | 苏州蜗牛数字科技股份有限公司 | 一种unity3D打包系统优化方法 |
CN109821240A (zh) * | 2018-12-05 | 2019-05-31 | 广州西山居世游网络科技有限公司 | 一种基于Unity实现资源LOD分级的方法及其装置 |
CN109821240B (zh) * | 2018-12-05 | 2022-08-30 | 广州西山居世游网络科技有限公司 | 一种基于Unity实现资源LOD分级的方法及其装置 |
CN110652728A (zh) * | 2019-09-24 | 2020-01-07 | 北京金山安全软件有限公司 | 一种游戏资源管理方法、装置、电子设备及存储介质 |
CN110652728B (zh) * | 2019-09-24 | 2023-06-27 | 北京金山安全软件有限公司 | 一种游戏资源管理方法、装置、电子设备及存储介质 |
CN111064712A (zh) * | 2019-11-29 | 2020-04-24 | 珠海金山网络游戏科技有限公司 | 一种游戏资源打包方法及系统 |
CN111064712B (zh) * | 2019-11-29 | 2022-03-18 | 珠海金山网络游戏科技有限公司 | 一种游戏资源打包方法及系统 |
CN111651193A (zh) * | 2020-06-03 | 2020-09-11 | 上海米哈游天命科技有限公司 | 一种信息打包方法、装置、设备及介质 |
CN112925559A (zh) * | 2021-04-09 | 2021-06-08 | 网易(杭州)网络有限公司 | 资源打包方法、装置、介质及电子设备 |
CN112925559B (zh) * | 2021-04-09 | 2023-10-20 | 网易(杭州)网络有限公司 | 资源打包方法、装置、介质及电子设备 |
CN115391058A (zh) * | 2022-08-05 | 2022-11-25 | 江苏安超云软件有限公司 | 一种基于sdn的资源事件处理方法、资源创建方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105224323A (zh) | 一种三维动画引擎的资源打包方法及装置 | |
CN104102545B (zh) | 移动增强现实浏览器三维资源配置与加载的优化方法 | |
KR101569765B1 (ko) | 중간 포맷을 이용한 swf와 html의 크로스-컴파일링 | |
CN102768662B (zh) | 一种加载图片的方法和装置 | |
CN107170050A (zh) | 物联图元的3d场景建立方法及系统 | |
CN104360884A (zh) | 一种基于安卓系统的插件资源包加载方法 | |
CN109658484A (zh) | 一种动画自动生成方法及动画自动生成系统 | |
CN108021590A (zh) | 一种目标对象属性确定方法、属性更新方法及装置 | |
US20130067237A1 (en) | Providing random access to archives with block maps | |
CN106897103A (zh) | 一种移动端网络游戏版本快速热更新的方法 | |
CN102520967A (zh) | 一种创建与使用移动平台插件的方法、系统和移动终端 | |
KR101143673B1 (ko) | 메타데이터를 핸들링하는 방법 및 장치 | |
CN107886560A (zh) | 动画资源的处理方法及装置 | |
CN106919370A (zh) | 一种对象属性值的获取方法及装置 | |
KR102061466B1 (ko) | 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법 | |
CN107817946A (zh) | 用于混合存储设备读写数据的方法以及装置 | |
CN107291673A (zh) | 一种文档的处理方法、系统、可读存储介质及计算机设备 | |
CN111359219B (zh) | 虚幻引擎的文件处理方法、装置、设备及存储介质 | |
CN101189594B (zh) | 用于在打包模型的组件与包的物理表示的特征之间进行映射的方法和系统 | |
CN104091367B (zh) | 基于ogre的三维场景存储方法及装置 | |
CN107767486A (zh) | 一种基于视频格式的端到端自动驾驶数据的存储方法及装置 | |
CN107485855B (zh) | 一种超大地图场景资源的存储方法及存储装置 | |
CN104951482B (zh) | 一种操作Sparse格式的镜像文件的方法及装置 | |
CN105069046B (zh) | 一种导航数据的更新方法、加载方法及装置 | |
CN110489387A (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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160106 |
|
WD01 | Invention patent application deemed withdrawn after publication |