太阳城集团

  • / 17
  • 下载费用:30 金币  

一种三维动画引擎的资源打包方法及装置.pdf

关 键 词:
一种 三维动画 引擎 资源 打包 方法 装置
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
摘要
申请专利号:

太阳城集团CN201510632736.5

申请日:

2015.09.29

公开号:

太阳城集团CN105224323A

公开日:

2016.01.06

当前法律状态:

实审

有效性:

审中

法律详情: 实质审查的生效IPC(主分类):G06F 9/44申请日:20150929|||公开
IPC分类号: G06F9/44 主分类号: G06F9/44
申请人: 北京畅游天下网络技术有限公司
发明人: 屠倩溪; 张精卫
地址: 100043 北京市石景山区八大处高科技园区西井路3号3号楼1210室
优先权:
专利代理机构: 北京德琦知识产权代理有限公司 11018 代理人: 王民盛;王丽琴
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

太阳城集团CN201510632736.5

授权太阳城集团号:

|||

法律状态太阳城集团日:

太阳城集团2016.02.03|||2016.01.06

法律状态类型:

太阳城集团实质审查的生效|||公开

摘要

本申请公开了一种三维动画引擎的资源打包方法,读取上次打包结束时保存的资源数据和打包太阳城集团,生成历史资源数据列表和历史打包太阳城集团列表;对资源目录进行遍历,记录所有的原始游戏资源并收集本次的资源数据和打包太阳城集团;比较本次的资源数据与历史资源数据列表,以及比较本次的打包太阳城集团和历史打包太阳城集团列表,分析哪些资源需要重新打包,生成重打包资源列表;遍历重打包资源列表,判断其子资源是否已被打包,若是,则对该资源进行打包,将该资源从重打包资源列表中删除,并加入已打包列表,否则先跳过;如此循环遍历直到重打包资源列表为空;保存本次的资源数据和打包太阳城集团。本申请还公开了一种用于实现三维动画引擎的资源打包的装置。

权利要求书

权利要求书
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引擎。

说明书

说明书一种三维动画引擎的资源打包方法及装置
技术领域
本申请涉及计算机视频游戏开发技术,尤其涉及一种三维动画引擎的资源打包方法及装置。
背景技术
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、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
太阳城集团以上所述仅为本申请的较佳实施例而已,并不用以限制本申请的保护范围,凡在本申请技术方案的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

太阳城集团本文
本文标题:一种三维动画引擎的资源打包方法及装置.pdf
链接地址:http://zh228.com/p-6397723.html
太阳城集团我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - - 联系我们

copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
葡京赌场|welcome document.write ('');