【天天飞车】版本更新机制
天天飞车具有版本兼容的特性,游戏内不支持强制升级。那么,为什么选择版本兼容?如何支持版本兼容?版本兼容的优缺点有哪些?如何进行整个客户端版本的更新?安装包大小如何控制?一些常规的配置文件如何更新?下面简单介绍下天飞如何实现以上几点问题,以求抛砖引玉,敬请大伙拍砖。
一、版本兼容
1、选择版本兼容的考虑
天飞是相对轻度的手机游戏,并且考虑到强制升级可能造成玩家流失,所以游戏内不支持强制升级。这样就要求天飞支持版本兼容,即保证旧的客户端可以登录最新的服务器。
2、优缺点
天飞选择版本兼容的优点显而易见。但也存在明显的缺点,有些客户端bug,比如逻辑性问题,只能通过重新发布版本修复。
二、整个客户端的更新
玩家在天飞官网下载新的客户端,然后手动安装。
1、更新策略
不同情况更新等级有不同要求。有些情况要求玩家必须进行升级才能继续游戏;有些情况提示玩家可以进行升级,不进行升级也可以继续游戏。
2、引导玩家更新客户端的时机
登录游戏服务器时,由后台根据版本号决定客户端是否需要进行升级,通常强制要求升级;游戏提示版本兼容时,比如赛车技能最大ID较低、商城物品配置较低,提示玩家进行升级,通常不要求玩家强制升级。
三、安装包大小
1、音频文件采用ogg格式
音频文件打包时采用ogg格式,在游戏运行时转为wav格式。以背景音乐为例,采用ogg只有5.14M,wav格式有24.6M,压缩率接近80%。
2、贴图采用TinyPng
美术首先利用工具进行png贴图的合并,然后再进行压缩,最终一个像素点占用8bits,减小了贴图的大小。
3、IOS字库文件采用ios系统字库
天飞开发初期,Unity不支持中文字体的渲染,所以项目组采用FreeType封装了一套中文字体渲染插件。并为Android系统定制了一套字库,字库文件约7.4M。而IOS系统字库STHeitiTC-Light满足中文字库的要求,同时为了减少安装包大小,所以IOS下直接采用了IOS系统字库STHeitiTC-Light。
四、常规配置文件的更新
配置文件的拉取有两种方式,较小的配置通过CS协议拉取,较大的配置通过CDN下载。
1、通过CDN下载
(1)下载机制
登录游戏时,客户端上报文件版本号,后台根据上报的版本号确定需要更新的文件列表, 前端根据列表去CDN下载文件。CDN下载只在登录游戏时进行。
(2)如何响应更新
因为CDN下载只在登录游戏时进行,玩家在游戏内不能实时拉取更新的文件,目前引导玩家重新登录游戏。
(3)CDN下载存在问题
优化之前天飞在登录时需要从CDN服务器下载commodity.bytes、VehicleParam.bytes、Chinese.txt、AndroidAdaptCfg.bytes、RacerLevel.bytes等30余个bytes文件,耗时较长且下载消耗的流量较多,弱网络下易拉取失败,影响玩家体验。
(4)优化
采用大文件机制,将需要从CDN下载的所有文件(>= 3.4M)压缩打包成一个bytes文件(< 200k),下载后解压缩,并存在相应的小文件中。
(5)CDN大文件打包优缺点分析
l 优点
Ø 减少游戏登录时下载CDN文件的时间;
Ø 减少游戏玩家每次更新CDN文件所需的流量;
Ø 大文件版本号由服务器统一管理,并且可在大文件内部管理小文件的版本号。
Ø 每个bytes小文件需要更新时都需要重新打包大文件。
2、通过CS协议拉取
(1)拉取时机
全局配置在进入大厅时拉取;逻辑模块内配置在进入该游戏模块时拉取;
(2)如何响应更新
玩家登录游戏后若配置进行了更新,全局配置会在玩家退出单局进入大厅时重新拉取;模块内配置会根据不同的业务需求,决定是否在进入该模块时重新拉取;
单局开局时如果后台检查到配置更新,会告知客户端配置更新导致开局失败,客户端会进行配置拉取或者引导玩家重新登录游戏。
(3)存在的问题
全局配置通过任务的方式依次拉取,如果拉取失败会重新进行拉取,弱网络下常出现重新拉取,网络很差时甚至一直卡在某个拉取环节,影响玩家体验。
(4)优化
将全局配置通任务的方式通过一个全局的CS协议拉取下来,减少了拉取次数,减小了弱网络下出问题的可能性。