转载请标明出处:http://www.cnblogs.com/zblade/

0x01 目的

在实际的游戏开发中,对于游戏都需要进行打补丁的操作,毕竟,测试是有限的,而bug是无法预估的。那么在手游中,unity对于打补丁的方式就是提供热更新。本文主要针对assetbundle的热更新流程进行设计探讨,抛砖引玉,希望有更优的解决方案。

0x02 基本流程

在实际的游戏开发中,常常会被assetbundle的热更新折腾的无法入眠,每次在进行热更新的时候都需要反复测试,因为这牵涉着实际的上线游戏运行。

为了提高热更新的鲁棒性,优秀的做法,就是将热更新放在平时的开发中,伴随着开发中进行每天的热更新校验,让开发人员,策划人员,测试人员,甚至美术人员,都参与到实际的热更新中,这样可以在平时就测试出可能出现的Bug,从而避免在游戏需要热更新时候的紧急测试。

为了实现即时开发即时热更新的机制,我们就需要设计好热更新流程,明晰的设计方案,可以指导实际的开发工作。对于流程设计,我主要分为两个部分进行分别探讨:

1、如何快速打出assetbunle包

要实现ab的热更新,那么unity打ab就是一个关键点。在以前的项目开发中,打ab包,是一个很头疼的事情,特别是在资源量迭代增大之后,在后期的开发中,打ab包就是一个极为费时的步骤。

分析其费时的原因,是由于在每次打ab包的时候,如果每次都是重新打ab包,那么自然每次都是极为费时的。Unity提供了一种增量打包的方式,具体可以查看相关API,只要在固定的输出路径中进行增量打包,那么每次打ab包的时候,只会对变化(增删)和新增的ab进行重新打ab,所以只要分析好资源的依赖关系,然后设置好ab对应的name,剩下的增量打包操作只需要交给unity去执行即可。

2、基于快速打ab包,快速在真机上验证资源的更新

完成快速的ab打包后,只需要上传到资源机/cdn上,在手机上即可实现实时的ab更新,那么日常开发中如果对于美术资源在手机上的效果需要即刻测试,那么只需要提交资源,然后执行打ab操作,上传到资源机/cdn等上,然后更新到手机上快速验证效果。

3、基于快速打ab包,实现小包的打包方式

在日常开发中,每次打游戏包,都会带来安装包包体较大,特别是在游戏后期,资源量大,对应的游戏包包体极大,每次测试在安装的时候,下载包体就很费时。而快速打ab包,可以将这部分工作进行优化。每次打游戏包的时候,可以区分是否携带ab资源。如果不携带ab资源,那么整体的游戏包只需要进行代码编译和相关打包,而游戏中使用的资源,可以通过ab更新的方式,实时更新,每次有资源替换就更新ab资源,这样测试每天开启测试工作的时候,只需要少量更新,即可快速测试。

这样的小包模式,适合版本功能测试的分支开发中,如果Lua文件也用热更新的方式,那么一个小包可以较为持续的测试对应功能,当功能测试完成后,即可合并到主分支。

既然有小包,那么对应的就会有大包。这儿所谓的大包,就是将该版本的ab资源一起打入在游戏安装包中。在平时的资源提交中,都会触发对应的ab资源打包,所以当执行打打包的时候,耗费在ab中的实际不会很长,这样可以整体优化打安装包的时间。

0x03 如何利用jenkins来执行日常资源打ab包

说完快速打ab的优点后,说说怎么利用jenkins来实现快速打ab包。

日常简单的build工作,可以分配一台单独的资源打包机执行打资源ab包即可。利用开源的jenkins,可以较为快速的实现打ab操作。

jenkins可以配合Git/SVN实现相关的hook,在每次Git/SVN的服务器中,有push tag/post-commit操作的时候,都可以调用jenkins的API来执行相关的job。在相关job中调用unity的命令行来实现打ab操作。

如果存储空间允许,可以将工程切分为不同平台,利用Jenkins的pipeline实现并发打ab操作,实现高效的打ab包操作。

简易的效果图如下:

0x04 整体示意图

综上所述,可以画出整体示意图,懒得画了,就随手拍一张手绘吧 (忽略我的灵魂画法):D

Unity资源打包学习笔记(二)、如何实现高效的unity AssetBundle热更新的更多相关文章

  1. Unity资源打包学习笔记(一)、详解AssetBundle的流程

    转载请标明出处:http://www.cnblogs.com/zblade/ 本文参照unity官网上对于assetBundle的一系列讲解,主要针对assetbundle的知识点做一个梳理笔记,也为 ...

  2. Unity基础知识学习笔记二

    1,object Instantiate(object original,Vector3 position,Quaternion rotation)       克隆原始物体,并返回克隆物体.     ...

  3. 【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型

    [Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698. ...

  4. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  5. 【Unity Shaders】学习笔记——SurfaceShader(八)生成立方图

    [Unity Shaders]学习笔记——SurfaceShader(八)生成立方图 转载请注明出处:http://www.cnblogs.com/-867259206/p/5630261.html ...

  6. 【Unity Shaders】学习笔记——渲染管线

    [Unity Shaders]学习笔记——Shader和渲染管线 转载请注明出处:http://www.cnblogs.com/-867259206/p/5595924.html 写作本系列文章时使用 ...

  7. 【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头

    摄像机切换镜头 在游戏中常常会切换摄像机来观察某一个游戏对象,能够说.在3D游戏开发中,摄像头的切换是不可或缺的. 这次我们学习总结下摄像机怎么切换镜头. 代码: private var Camera ...

  8. Linux内核学习笔记二——进程

    Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...

  9. Unity资源打包之Assetbundle

    转  Unity资源打包之Assetbundle 本文原创版权归 csdn janeky 所有,转载请详细注明原创作者及出处,以示尊重! 作者:janeky 原文:http://blog.csdn.n ...

随机推荐

  1. 【BZOJ 3561】 DZY Loves Math VI

    题目: 给定正整数n,m.求   题解: 水题有益身心健康.(博客园的辣鸡数学公式) 其实到这我想强上伯努利数,然后发现$n^2$的伯努利数,emmmmmm 发现这个式子可以算时间复杂度,emmmmm ...

  2. SQL 中如何删除重复(每列数据都重复)的记录,只保留一行?

    如果数据表没有做好约束,那么数据库中难免会遇到数据重复的情况.今天就遇到这么个看起来简单却又费神的问题---如何去重. ------期间感谢微信公众号"有关SQL"的博主大牛提供的 ...

  3. linux系统版本查看

    Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等等,整个CPU信息一目了然. 1.# uname -a   (Linux查看版本当前操作系统内核信息)   Lin ...

  4. Python3字符串替换replace(),translate(),re.sub()

    Python3的字符串替换,这里总结了三个函数,replace()和translate()和re.sub() replace() replace() 方法把字符串中的 old(旧字符串) 替换成 ne ...

  5. 死磕 java集合之DelayQueue源码分析

    问题 (1)DelayQueue是阻塞队列吗? (2)DelayQueue的实现方式? (3)DelayQueue主要用于什么场景? 简介 DelayQueue是java并发包下的延时阻塞队列,常用于 ...

  6. Python练习:九九乘法表

    打印 n * n 的乘法表 #打印 9*9 乘法表 def Multiplication(n): # n - 定义打印的行数 max_len = len(str((n)**2)) #计算最大值的占位( ...

  7. 再遇angular(angular4项目实战指南)

    这两天看了看angular4的文档,发现他和angular1.X的差别真的是太大了,官方给出的那个管理英雄的Demo是一个非常好的入门项目,这里给出一个管理个人计划的小项目,从头至尾一步一步讲解如何去 ...

  8. 『性能』ServiceStack.Redis 和 StackExchange.Redis 性能比较

    背景 近来,需要用到 Redis 这类缓存技术 —— MongoDB 和 Redis 没有进行过比较. 我也懒得在这些细节上 纠结那么多 —— 按照网友给出的文章,听从网友建议,选择 Redis. R ...

  9. Python调用ansible API系列(三)带有callback的执行adhoc和playbook

    在第二篇文章中虽然可以执行adhoc和playbook但是执行结果的输出并不是特别直观,虽然没有报错但是到底什么结果其实你是不知道的尤其是在执行adhoc的时候,这时候我们要利用callback来设置 ...

  10. LeetCode刷题专栏第一篇--思维导图&时间安排

    昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...