首页 > 游戏 > Unity手游的客户端启动流程总结

Unity手游的客户端启动流程总结

每个游戏都有自己的启动流程框架,有简有繁,但是抽象出来总归就是那么几个步骤,今天我们聊一聊这些步骤。

第1步:启动

第2步:判断当前设备所处环境是内网还是外网环境

原因:一般来说内网环境和外网环境在最终的服务器列表展示是不一样的,外网是正式的服务器列表,内网则是一些测试的服务器列表

实现:www请求一个内网的url,如果请求成功则说明在内网环境

第3步:根据包体内固定的设备平台的url【可能安卓/ios/Editor的url不一样】以及内外网标识等信息去获取对应的公告url,AssetBundleUrl,AppUrl,AppVersion,ServerList等

第4步:比对LocalAppVersion和RemoteAppVersion,如果不一致,则弹框提示去AppUrl下载新的App.否则继续后面流程

第5步:初始化SDK环境【例如 此时初始化360的SDK】

第6步:检测本地AssetBundle文件的变更,更新LocalAssetBundleList

原因:懂技术的同行们或者刚带代码离职的开发者可能会打开AssetBundle所在的目录去修改某些AssetBundle内容,从而达到修改游戏逻辑,或者游戏数据的目的。

实现:客户端自己试加载所有在LocalAssetBundleList中的AssetBundle文件,使用LocalAssetBundleList中AssetBundle文件对应的crc校验码去校验这个加载的过程,如果校验失败,说明这个AssetBundle文件被修改过,或者被破坏了。那么就从LocalAssetBundleList中删除。当然如果LocalAssetBundleList这个文件也被破坏了导致程序识别不了格式,那么就粗暴认为这个列表为空,需要全量下载所有的AssetBundle文件。

【LocalAssetBundList是客户端本地存储的一个加过密的文件 主要内容是一个字典,key为AssetBundle,Value为AssetBundle相关的信息,比如大小,位置,crc等,web服务器也有一份叫做RemoteAssetBundleList】

第6步:根据AssetBundleUrl下载对应的RemoteAssetBundleList文件,也就是下载web端最新的AssetBundle列表

第7步:将RemoteAssetBundleList和LocalAssetBundList进行比对差异,查找crc发生变化的,客户端多余的或者缺少的AssetBundle文件,然后更新到LocalAssetBundList

实现:高效实用Hash比对,得到差异列表DownloadAssetBundleList

第8步:下载DownloadAssetBundleList中标识的AssetBundle文件, 界面展示一个下载进度展示。

第9步:进入选服登陆界面,等待玩家选服登陆。

QA:

1:为什么不使用LocalAssetBundleVersion和RemoteAssetBundleVersion去比对,如果两者一致就不执行后续的AssetBundle流程的这个方式呢?

答:因为两者一致的情况下,可能客户端本地的一些AssetBundle文件已经被修改了,所以两者一致其实严格意义上来说,是不能说明所有的AssetBundle也是一致的。

2:AssetBundle文件过多,下载耗时过长有没有什么优化方法?

答:

(1)想办法减少AssetBundle的文件个数

(2)将多个AssetBundle文件挤压成一个文件【挤压格式自己设计】这样可以较少与web通信的次数,从而节省耗时

(3)多线程下载

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/yx/67918.html