资源更新其实可以细分为两种,一种就是小版本迭代之间差异包的资源更新;另外一种比较特殊是分包下载更新,分包是国内安卓市场为了节约推广成本,更有效的推广而形成的一种策略,通常把Apk做成150M以内的小包拿去推广,然后游戏运行时再去下载剩余的资源,即 整包 = 小包 + 分包;这种策略有点类似Google Play使用的Obb方式,Google Play因为限制了上传包体的大小100M,所以需要把应用剩余资源文件打包成Obb,Apk运行时候从Obb扩展文件中去加载资源,Unity本身也支持Apk+Obb模式,做海外安卓市场都是用这种方式上Google Play。而我们做的分包资源是放在我们自己的资源服务器,为了提高用户的体验,需要游戏运行时另开一个线程在后台去静默下载我们的分包资源。

资源下载更新每个项目做法基本都大同小异,设计过程主要考虑下面几个问题:

  1. 支持大版本更新(最简单做法是提示玩家点击跳转链接下载安装最新的安装包)
  2. 支持资源下载断点续传
  3. 小版本迭代之间差异包的资源一般都是启动游戏明面更新;而分包资源下载是设计成可配置的,支持前后台下载,因为有些分包资源在进游戏时必须要先下载完,而后台静默下载都是启动线程池去下载,由于Unity本身就一个主线程,不能在其他线程调用Unity控件组件会报错
  4. 分包启动线程池后台去下载会有个问题就是会占用大部分网络资源,造成主线程与服务器通信卡顿,所以要对下载线程限制网络资源,可以通过Thread.Sleep(time)来暂时挂起线程
  5. 注意分包资源的优先级是比小版本迭代之间差异包的资源优先级低
  6. 配合后台服务做好白名单功能用于对外更新测试,根据用户 IP 和 IMEI 来做白名单