一种基于差异的AssetBundle更新方法及装置与流程

文档序号:14175032阅读:371来源:国知局
一种基于差异的AssetBundle更新方法及装置与流程

本发明涉及游戏开发技术领域,尤其涉及基于差异的assetbundle更新方法及装置。



背景技术:

随着媒体互联网的迅速发展,数字互动娱乐延伸到新的领域,网络游戏是近年来得到广泛关注并且发展极为迅速的一个产业,如今我国网络游戏业的巨大市场使得游戏从业人员不断发展软件技术以提升玩家的游戏体验。

在网络游戏开发中,assetbundle是unitypro提供的一种用来存储资源的文件格式,它可以存储任意一种unity引擎能够识别的资源,如scene、mesh、material、texture、audio、noxss等等,同时,assetbundle也可以包含开发者自定义的二进制文件,只需要将自定义文件的扩展名改为.bytes,unity就可以把它识别为textasset,进而就可以被打包到assetbundle中。unity引擎所能识别的资源我们称为asset,assetbundle就是asset的一个集合。例如在发明专利申请cn201710188887.5中,对游戏资源进行处理,得到多个预制件,每个预制件对应生成一个版本号,每个版本号对应一个下载地址;将多个预制件生成一个assetbundle资源包,在游戏进程启动成功后,推算出距离当前时刻一定时间间隔内所需的游戏资源,得到所需的游戏资源对应的版本号及对应下载地址。

现有的游戏客户端通常包括游戏运行时所需的所有游戏资源,例如,图片、音频和视频等资源。这些资源通常采用打assetbundle包方式存储,从而获得传输方便、资源保密、以及更加快速访问速度等优点。但由于assetbundle没有提供差异更新的方式,用户通常使用大量assetbundle包的方式解决更新包体积问题,大量的assetbundle包会导致包内文件冗余,访问时间慢,资源无法进行绘制合并等问题。因此,需要提供实现assetbundle更新的方法使降低更新包体积,减少包内冗余文件。



技术实现要素:

本发明的目的是解决现有技术的不足,提供一种基于差异的assetbundle更新方法及装置,旨在解决更新过程中assetbundle中产生冗余资源及大幅度减少更新包体积问题。

为了实现上述目的,本发明提出一种基于差异的assetbundle更新方法,包括如下步骤:

s100,对新版本和旧版本的assetbundle进行解包,获取包内资源;

s200,对包内资源进行assetbundle差异分析,获取新版本中资源与旧版本资源差异结果,生成差异指令文件并发送;

s300,客户端接收差异指令文件,根据不同的差异指令接收新版本中的相应资源或者保留旧版本中的相应资源并填充进资源数据,生成新版本assetbundle资源包。

在本发明的上述方法中,步骤s100和步骤s200在服务器上进行,服务器向客户端获取旧assetbundle的版本号并查找相应版本的assetbundle文件。

进一步地,查找到相应版本的assetbundle文件之后,通过差异比较并且遍历新版本assetbundle包中资源检测新版本中的资源与旧版本资源差异情况。

进一步地,通过所述差异比较将新assetbundle资源包中的资源分成三类:未变更的资源,在旧版本中存在且内容相同;新增的资源,在旧版本中不存在;变更的资源,在旧版本中存在但内容不同。

进一步地,在服务器中生成差异指令的输出文件,其中对于未变更的资源,其差异指令为资源所在旧版本中的文件名及偏移值、及偏移值和资源大小;对于新增的资源和变更的资源,其差异指令为资源所在新版本中的文件名及偏移值、资源内容和资源大小。

本发明还提出一种基于差异的assetbundle更新装置,其包括assetbundle差异分析模块、assetbundle差异合并模块,其中差异分析模块用于assetbundle差异分析,检测新版本中的资源与旧版本资源差异情况,生成差异指令的输出文件;assetbundle差异合并模块,用于接收差异指令文件,根据不同的差异指令接收新版本中的相应资源或者保留旧版本中的相应资源并填充进资源数据,生成新版本assetbundle资源包。

进一步地,差异分析模块在服务端模块上运行,其中服务端模块储存有多个不同版本的assetbundle文件。

本发明的有益效果是:每次重新生成新版本的assetbundle资源包,资源中不存在冗余文件,提高了传输效率;客户端无需更新全部资源,减少服务器带宽和用户流量。

附图说明

图1所示为本发明所提出的基于差异的assetbundle更新方法一优选实施例中某版本assetbundle文件包的示意图;

图2所示为本发明所提出的基于差异的assetbundle更新方法一优选实施例中某版本assetbundle文件的示意图;

图3所示为本发明所提出的基于差异的assetbundle更新方法流程图;

图4所示为本发明所提出的基于差异的assetbundle更新方法中差异指令生成方法流程图;

图5所示为本发明所提出的基于差异的assetbundle更新方法中差异合并的流程图;

图6所示为本发明所提出的基于差异的assetbundle更新装置结构示意图。

具体实施方式

以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。

如图1所示为本实施例的一个assetbundle文件包,其中包含多个assetbundle文件。

如图2所示为一个assetbundle文件,其中包含了多个可被unity引擎所能识别的资源。

如图3所示的基于差异的assetbundle更新方法流程图,在本发明的一个优选实施例中,上述基于内部应用的移动设备分配与管理的方法包含以下步骤:

s100,对新版本和旧版本的assetbundle进行解包,获取包内资源;

s200,对包内资源进行assetbundle差异分析,获取新版本中资源与旧版本资源差异结果,生成差异指令文件并发送;

s300,客户端接收差异指令文件,根据不同的差异指令接收新版本中的相应资源或者保留旧版本中的相应资源并填充进资源数据,生成新版本assetbundle资源包。

在本发明的一个优选实施例中,用户使用客户端向服务器发送更新指令,其中指令包括客户端中的assetbundle版本信息,服务器根据版本号查找存储在服务器内部的相应版本assetbundle文件,同时加载新旧版本的assetbundle,服务器中的差异分析工具执行差异比较,在旧版本assetbundle中进行检查,其检查的规则是:遍历新版本assetbundle包中资源,根据旧版本文件内容将新版本中的每个文件分类为:1.未变更的资源,2.新增资源,3.变更的资源。

如图4所示,进一步地,在上述实施例中,根据分类得到的资源类别生成差异指令,针对没有变更的资源,其差异指令为资源所在旧版本中的文件名及偏移值、及偏移值和资源大小;针对新增的资源和变更的资源,其差异指令为资源所在新版本中的文件名及偏移值、资源内容和资源大小。其中,在对比未处理的新版assetbundle文件过程中,当读取到相同的文件是,再进行下一步处理检查文件中的对应资源是否与旧文件中的相同,若相同则生成未变更资源差异指令,若不同则生成变更资源差异指令;当读取到不相同的文件时,生成新增资源差异指令,生成差异指令进程完成。

如图5所示,进一步地,在上述实施例中,服务器在碎片检测过程后立即开始assetbundle差异合并过程。客户端在通过网络或存储设备接收到资源差异指令后开始assetbundle差异合并过程。assetbundle差异合并工具首先加载旧版本的assetbundle和资源差异指令,并逐条取出资源差异指令。对于每一条资源差异指令,assetbundle差异合并工具将其应用为新版本assetbundle中的对应资源。待所有指令执行完成后,客户端生成的新版本assetbundle应与服务端上对应版本的assetbundle完全相同。待所有指令执行完成后,客户端生成的新版本assetbundle应与服务端上对应版本的assetbundle完全相同。服务端和客户端进行完成assetbundle差异合并后整个assetbundle更新方法也完成。

参照图6所示的基于差异的assetbundle更新装置结构示意图,在本发明的一个实施例中,上述基于差异的assetbundle更新装置,包括assetbundle差异分析模块、assetbundle差异合并模块,其中assetbundle差异分析模块用于assetbundle差异分析,检测新版本中的资源与旧版本资源差异情况,生成差异指令的输出文件;assetbundle差异合并模块用于接收差异指令文件,根据不同的差异指令接收新版本中的相应资源或者保留旧版本中的相应资源并填充进资源数据,生成新版本assetbundle资源包。差异分析模块在服务端模块上运行,其中服务端模块储存有多个不同版本的assetbundle文件。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接相合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在二个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在二个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom)、随机存取存储器(ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1