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場景,打開主界面

 

詳細的流程以下圖:

相關文章
相關標籤/搜索