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

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

概述连接:http://www.javashuo.com/article/p-nggymcxb-bw.htmlandroid

1.创建网络链接,若是没有网络弹出提示框,不然跳转到步骤2ios

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,里面说的更详细ide

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.解压扩展包。若是要解压,检查内存是否足够,内存不足弹出提示框,不然跳转4google

  咱们当前的项目压缩策略采用的是:扩展包使用lzma压缩,ab包使用lz4压缩,为了减小热更包下载体积,热更包会把全部的ab包在打包一层lzma压缩,lz4的ab包unity能够直接读取,因此这边的解压指的是解压lzma的包spa

  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场景,打开主界面

 

详细的流程以下图:

相关文章
相关标签/搜索