unity游戏框架学习-登录模块

之前的框架概述我们大概描述了登录模块的职责,今天我们在深入讨论一遍 ,今天主要学习下应用的更新:扩展包下载,热更

概述链接:https://www.cnblogs.com/wang-jin-fu/p/10975660.html

1.建立网络连接,如果没有网络弹出提示框,否则跳转到步骤2

unity判断网络连接:Application.internetReachability,返回值定义:
NetworkReachability.NotReachable:网络不可用
NetworkReachability.ReachableViaCarrierDataNetwork:运营商数据网络可用、
NetworkReachability.ReachableViaLocalAreaNetwork:wifi或有线网络是可用的

2.扩展包更新。android端需要先检查扩展包是否需要更新,如果要更新,检查内存是否足够,内存不足弹出提示框,否则跳转步骤3

对android扩展包有兴趣的童鞋可以参考官方文档:https://developer.android.com/google/play/expansion-files

在下载扩展包前记得判断下硬盘空间是否足够

android获取可用磁盘空间如下,也可以参考博客:https://blog.csdn.net/xiangruyimo122/article/details/73734159,里面说的更详细

static long GetSpace(File path) {
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getAvailableBlocks();
return totalBlocks * blockSize;
}

ios端获取可用磁盘空间可以参考博客:https://blog.csdn.net/xiangruyimo122/article/details/73734159

3.解压扩展包。如果要解压,检查内存是否足够,内存不足弹出提示框,否则跳转4

  我们当前的项目压缩策略采用的是:扩展包使用lzma压缩,ab包使用lz4压缩,为了减少热更包下载体积,热更包会把所有的ab包在打包一层lzma压缩,lz4的ab包unity可以直接读取,所以这边的解压指的是解压lzma的包

  lzma压缩、解压缩可以下载liblzma的库,也可以使用7zip插件进行解压缩

  7zip解压缩可以参考雨松大神的:https://www.xuanyusong.com/archives/3095

4.热更。

  (1)获取服务端版本号文件,如果需要强更,跳转到应用商店,如果需要更新,跳转下一步,否则跳转步骤5

    跳转应用商店直接用Application.OpenURL接口打开商店链接就好了

  (2)获取服务端md5文件,对比本地md5,获取需要更新的ab包列表

    md5文件:文件的MD5值是独一无二的,只有文件发生改变了MD5值才会改变,当热更的时候我们需要知道那些AssetBundle发生了改变,就需要用到这个md5文件,下面是md5的生成:

static string CalcMd5StringFromHash(byte[] bytes)
{
string ret = "";
foreach (byte b in bytes) {
ret += Convert.ToString (b, 16);
}

return ret;
}

public static string GetFileMd5 (string path)
{
if (!File.Exists (path)) {
return "";
}

FileStream stream = File.OpenRead (path);

MD5 md5 = new MD5CryptoServiceProvider ();
byte[] result = md5.ComputeHash (stream);
stream.Close ();

return CalcMd5StringFromHash (result);
}

  (3)下载并解压需要更新的ab包,这边需要检查内存是否足够,内存不足弹出提示框

    unity AssetBundle有三种压缩模式,第一种是不压缩,这种压缩方式包体最大,但下载完成后的加载速度也是最快的,第二种是lzma压缩,也是默认的压缩格式,这种压缩格式压缩率最高,包体最小,但是加载速度最慢,因为要加载整包,第三种是lz4,包体大小和加载速度都还可以(推荐方式),后面资源管理会详细解说AssetBundle的打包方式,也可以自行参考unity API:https://docs.unity3d.com/530/Documentation/Manual/AssetBundleCompression.html

    ab包的下载可以unity的UnityWebRequest接口类,可以参考https://www.jianshu.com/p/dbd0c1e53600   

m_request = UnityWebRequest.Get(m_strUrl);
if (!string.IsNullOrEmpty (m_strPath)) {
  // 是写到文件的情况开启断点续传
  m_downloadHandler = new DownloaderHandler(m_strPath, OnProgress, OnCompleted);

  m_request.chunkedTransfer = true;
  m_request.disposeDownloadHandlerOnDispose = true;
  m_request.SetRequestHeader("Range", "bytes=" + m_downloadHandler.DownedLength + "-");
  m_request.downloadHandler = m_downloadHandler;
}

m_request.Send();

5.更新结束。登录sdk如腾讯账号,获取账号状态,如封号,弹出提示,否则跳转步骤6

这块会在后面SDKModule模块详细解说

6.登录游戏服务器(简称游服),获取游戏状态,如在维护状态,弹出提示,否则跳转步骤7

这块会在网络模块解说

7.新手引导(顺序跟步骤8可以对换。看情况)

8.预加载资源(可无,看情况),预加载结束跳转步骤9

9.请求服务端初始化数据(如main场景要显示内容需要的数据、小红点等),初始数据都接收完毕跳转步骤10

10.切换到mian场景,打开主界面

 

详细的流程如下图:

 

posted @ 2019-07-11 17:55  柯腾_wjf  阅读(3939)  评论(0编辑  收藏  举报