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

    详细的流程如下图:

  • 相关阅读:
    字母运算
    7.5 字典序全排列
    5
    4 c#
    c# 贪吃蛇源码
    【Django】django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required;
    redis 存储验证码 基本使用
    Git 的基本使用
    docker(专业版) 安装过程报错
    router.push query 路由 跳转 传参使用
  • 原文地址:https://www.cnblogs.com/wang-jin-fu/p/10979719.html
Copyright © 2020-2023  润新知