公开/公告号CN112732268A
专利类型发明专利
公开/公告日2021-04-30
原文格式PDF
申请/专利权人 珠海金山网络游戏科技有限公司;
申请/专利号CN202110033986.2
申请日2021-01-11
分类号G06F8/41(20180101);G06F8/71(20180101);A63F13/77(20140101);
代理机构44205 广州嘉权专利商标事务所有限公司;
代理人张志辉
地址 519080 广东省珠海市高新区唐家湾镇前岛环路325号102室、202室、302室、402室327号102室、202室329号302室
入库时间 2023-06-19 10:48:02
技术领域
本发明涉及计算机领域,具体涉及了一种快速拆分无引用关系资源的方法、装置及介质。
背景技术
在Unity 3D游戏中,打包非常的慢,想要验证修改bug的效果,如果工程很大,那么打包就需要很长的时间,通常2个小时是非常常见的,加快打包速度,就是一个很关键的问题,由于Unity 3D在打包时,一个工程只能有一个进程在打bundle包,如果可以快速将全部资源拆分为相互无引用关系的几部分,多进程进行打bundle包,则可以大大提升打包速度,但是资源之前有很强的引用关系,如果处理不好,则会造成大量的冗余,造成包体增大,运行时内存占用较高。
发明内容
本发明的目的在于至少解决现有技术中存在的技术问题之一,提供了一种减少bundle依赖链冗余的方法、装置及介质,减少bundle依赖链的冗余,减少内存占用及加载耗时,提高游戏运行效率。
本发明的技术方案包括一种快速拆分无引用关系资源的方法,其特征在于,该方法包括:S100,获取基于Unity 3D的工程资源列表,在每个资源中设置标识位,同时创建一动态标识;S200,每次从工程中取出资源时,生成对应资源的递归引用资源列表,并将对应的资源标志位写入递归引用资源列表;S300,遍历递归引用资源列表,根据资源的引用关系,在资源标识位进行修改,并动态调整动态标识;S400,重复步骤S200~S300直至资源列表中资源被标记;S500,根据所有资源的标识位数量,确定资源相互无引用关系的数量,根据资源相互无引用关系的数量使用对应的多个线程对工程资源进行打包。
根据所述的快速拆分无引用关系资源的方法,其中S100包括:遍历工程内所有资源,获取全部资源列表,每个资源设置一个标识位,标识位且默认为0,同时设置一动态标识,动态标识位默认为1。
根据所述的快速拆分无引用关系资源的方法,其中S300包括:S310,取出资源,查找资源所有的递归引用资源列表,同时将资源自身信息也加入递归引用资源列表内;S320,再经过S310处理的递归引用资源列表,对每个取出资源,判断标识位为是否为0,则直接将该资源标识位设置为当前的动态标识的值,标识位进行自增;若资源的标识位不为0,根据资源的标识位值,查找资源列表对应的资源,并将所查找的资源的标识位修改为动态标识的值,同时动态标识进行自增。
根据所述的快速拆分无引用关系资源的方法,其中从工程资源列表的方式为:根据工程资源列表进行顺序读取。
根据所述的快速拆分无引用关系资源的方法,其中S500包括:获取经过所述S400得到的所有资源的标志位,根据资源的标识位的值及动态标识的值,确定相互无引用关系的数量,使用对应数量的线程对对应资源进行打包处理。
本发明的技术方案还包括一种快速拆分无引用关系资源的装置,该装置包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现任一所述的方法步骤。
本发明的技术方案还包括一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如任一所述的方法步骤。
本发明的有益效果为:增加bundle冗余的情况下,加快打Bundle包速度,方便项目快速出包验证效果。
附图说明
下面结合附图和实施例对本发明进一步地说明;
图1所示为根据本发明实施方式的总体流程图;
图2所示为根据本发明实施方式的拆分无引用关系资源的流程示意图;
图3所示为根据本发明实施方式的装置图。
具体实施方式
本部分将详细描述本发明的具体实施例,本发明之较佳实施例在附图中示出,附图的作用在于用图形补充说明书文字部分的描述,使人能够直观地、形象地理解本发明的每个技术特征和整体技术方案,但其不能理解为对本发明保护范围的限制。
在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。
在本发明的描述中,对方法步骤的连续标号是为了方便审查和理解,结合本发明的整体技术方案以及各个步骤之间的逻辑关系,调整步骤之间的实施顺序并不会影响本发明技术方案所达到的技术效果。
本发明的描述中,除非另有明确的限定,设置等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本发明中的具体含义。
图1所示为根据本发明实施方式的总体流程图,该流程包括:S100,获取基于Unity3D的工程资源列表,在每个资源中设置标识位,同时创建一动态标识;S200,每次从工程中取出资源时,生成对应资源的递归引用资源列表,并将对应的资源标志位写入递归引用资源列表;S300,遍历递归引用资源列表,根据资源的引用关系,在资源标识位进行修改,并动态调整动态标识;S400,重复步骤S200~S300直至资源列表中所有资源被标记;S500,根据所有资源的标识位数量,确定资源相互无引用关系的数量,根据资源相互无引用关系的数量使用对应的多个线程对工程资源进行打包。
图2所示为根据本发明实施方式的拆分无引用关系资源的流程示意图,包括:
(1)首先遍历工程内所有资源,获取全部资源列表,每个资源设置一个标识位AssetFlag,且默认都标记为0,在设置一个动态的标志为BundleFlag(默认为1);
(2)对列表就行挨个遍历,按list顺序取出一个资源Itor_Asset_A;
(3)取出一个资源后,称为Itor_Asset_A,先查找Itor_Aaset_A所有的递归引用资源列表Asset_A_DependecnList,并且Itor_Asset_A也加入Itor_Asset_A递归引用资源列表Asset_A_DependecnList内,Asset_A_DependecnList为Asset_A的所有递归引用资源包含自身;
(4)再遍历Asset_A_DependecnListt,针对取出每个资源Itor_Asset_DependecnList_x,首先判断Itor_Asset_DependecnList_x的标识位AssetFlag为是否为0,为0标识暂时未被其他资源引用到,则直接将该资源标识位设置为当前的BundleFlag,然后BundleFlag进行自增一次(BundleFlag=BundleFlag+1),如果标识位AssetFlag不为0,该资源被其他资源引用过,那么需要将这些资源也划分过来,假设Itor_Asset_DependecnList_x的标识位AssetFlag为N,那么需要将所有标识位位N的资源列表NAssetlist找出来,并将NAssetlist内的所有资源的标识位设置为BundleFlag,然后BundleFlag进行自增一次(BundleFlag=BundleFlag+1);
(5)顺序取出第二个资源,重复上面的(3)-(4)步骤,直到所有资源都标记完成;
(6)获取所有资源的标志位,有多少种,即可分为多少个相互无引用关系的几部分,在分几个进程进行打包,比如仅有0,2,55三种,可分为3部分,分3个进程进行打包。
图3所示为根据本发明实施方式的装置图。装置包括存储器100及处理器200,其中处理器200存储有计算机程序,计算机程序用于执行:获取基于Unity3D的工程资源列表,在每个资源中设置标识位,同时创建一动态标识;每次从工程中取出资源时,生成对应资源的递归引用资源列表,并将对应的资源标志位写入递归引用资源列表;遍历递归引用资源列表,根据资源的引用关系,在资源标识位进行修改,并动态调整动态标识;重复直至资源列表中所有资源被标记;根据所有资源的标识位数量,确定资源相互无引用关系的数量,根据资源相互无引用关系的数量使用对应的多个线程对工程资源进行打包。其中,存储器100用于存储数据。
上面结合附图对本发明实施例作了详细说明,但是本发明不限于上述实施例,在技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。
机译: 用户优先引用类型的检索方法,实现装置的引用,程序的引用和记录介质
机译: 仅在记录介质中记录一次数据的装置和方法,仅从记录介质中再现一次数据并仅一次引用记录介质的装置和方法,
机译: 用于检测程序执行中的非初始化变量引用的装置和方法,以及用于检测程序执行中的非初始化变量引用的存储程序的存储介质