免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Unity手游之路<十三>手游代碼更新策略探討

這幾個月公司項目非常忙,加上家里事情也多,所以blog更新一直擱置了。最近在項目開發(fā)上線過程中遇到了一些新問題,接下來的時間和大家多多探討學習。大家在工作中遇到技術問題,或者有什么想分享的,歡迎多多探討 ken@iamcoding.com.

-------------------------------------------------------------------------------------------------------------------------------------------------------------

之前我們已經學過手機游戲的資源熱更新策略了。在實際手游的開發(fā)運營中,我們需要經常修復bug,增加新玩法。這些通常都涉及到代碼的更新。unity游戲代碼的更新比較復雜,也存在不同的更新策略,各有優(yōu)缺點,在不同的平臺上做法也不盡相同。這里主要談一些比較常用的策略和各大手機平臺上的策略。大家有更好的思路,歡迎探討。

(轉載請注明出處 http://blog.csdn.net/janeky/article/details/25923151

  • 反射

大部分編程語言都是支持反射的,利用反射,可以動態(tài)去加載所需的程序。C#也是同樣可以用反射來實現。要實現代碼的更新,我們在項目初期就要做好規(guī)劃,將一些容易變更的業(yè)務邏輯代碼獨立劃分。每次更新時,將代碼打包成dll,再打包成資源文件。程序啟動時,檢查更新到客戶端,客戶端通過反射重新加載代碼運行。下面通過一個簡單的demo來演示。

1.在vs中新建一個代碼庫工程,命名為test
2.添加幾個類Scirpt,Scirpt2,Data
3.將這個項目生成DLL,test.dll
4.新建一個unity項目,將DLL倒入到Asset,改名為test.bytes,不然可能會報錯
5.利用我們之前實現過的打包腳本,將test.bytes打包成test.assetbundle。
6.創(chuàng)建CodeUpdate.cs腳本,用于加載代碼資源,反射調用。
7.為了驗證代碼更新后,可以直接加載使用,我們可以更改一下Data.cs的代碼,重復以上過程,可以看到,更新了代碼打包后,我們重新運行游戲,就可以看到效果

Data.cs

  1. public class Data  
  2. {  
  3.     private int attr;  
  4.   
  5.     public Data()  
  6.     {  
  7.         attr = 2;  
  8.     }  
  9.   
  10.     public override string ToString()  
  11.     {  
  12.         return attr.ToString();  
  13.     }  
  14. }  

Script.cs

  1. public class Script: MonoBehaviour  
  2. {  
  3.     void Start()  
  4.     {  
  5.         Debug.Log("------------------I am script 1");  
  6.         Data data = new Data();  
  7.         Debug.Log("-------------" + data.ToString());  
  8.     }  
  9. }  

CodeUpdate.cs

  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System;  
  4.   
  5. public class CodeUpdate : MonoBehaviour {  
  6.       
  7.     private static readonly string DLL_URL = "file:///c:/test.assetbundle";  
  8.   
  9.     void Start () {  
  10.         StartCoroutine(loadDllScript());  
  11.     }  
  12.       
  13.     private IEnumerator loadDllScript()  
  14.     {  
  15.         WWW www = new WWW(DLL_URL);  
  16.         yield return www;  
  17.         AssetBundle bundle = www.assetBundle;  
  18.         TextAsset asset = bundle.Load("test",typeof(TextAsset)) as TextAsset;  
  19.           
  20.         System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(asset.bytes);  
  21.         Type script1 = assembly.GetType("Script");  
  22.         GameObject obj = new GameObject();  
  23.         obj.AddComponent(script1);  
  24.           
  25.         Type script2 = assembly.GetType("Script2");  
  26.         obj.AddComponent(script2);  
  27.     }  
  28. }  

  • 完整安裝包更新

大部分的app更新都是采用完整包更新。在程序啟動的時候,檢查服務器的最新版本,如果比本地的版本要新,就下載服務器的版本,重新安裝替換本地的程序。在IOS平臺上,是由App Store來統一管理的??蛻舳顺绦蛑恍铏z查版本,跳轉到app store頁面即可。android 平臺的更新更靈活,略微復雜。在判斷版本號,確定要更新后,直接就可以下載服務器的最新的apk文件,安裝替換本地的。這里就不演示代碼了。大家先理清楚思路,流程,就容易實現了。

  • LUA腳本更新
LUA一直是一種很神奇的腳本語言,無處不在,服務端,客戶端,大型機,嵌入式設備都能看到它的蹤影。雖然Unity3d官方不支持Lua腳本,但是已經有人寫了c#版本的lua解析器了。我們可以將業(yè)務代碼用Lua來實現。每次要更新代碼的時候,只要將lua當做資源文件更新到客戶端,運行即可。

C#版 Lua,有很多個版本,這里選擇云風他們公司開源的UniLua,大家可以去Githunb下載

https://github.com/xebecnan/UniLua/wiki

  • IOS平臺

比較遺憾,IOS是一個封閉的平臺,所以它對app程序監(jiān)管比較嚴格,一般情況下不運行熱更新,每次版本更新都需要提交審核。所以涉及到手游代碼的更新,都是采用完整包更新。LUA腳本更新的方式,有朋友試過說可以(他們一般是在程序上線一段時間后才使用Lua更新)。但是也存在風險的,如果被蘋果發(fā)現,是屬于違規(guī)的。這里不建議使用。

  • Android平臺

目前比較通用的方式是用代碼dll反射更新機制。我們在實際過程中,將穩(wěn)定不變的底層代碼單獨規(guī)劃,用作游戲的主程序。全部業(yè)務邏輯代碼發(fā)布時候,打包成dll,制成資源文件??蛻舳讼螺d后,反射加載。只有當底層主程序要更新是,才單獨下載主程序的apk文件,重新安裝替換。平時的代碼更新,可以隨意更新代碼dll

  • 總結

上面說的幾種方式,各有優(yōu)缺點。在不同的平臺上策略也不盡相同。說一下我的經驗:一般是優(yōu)先發(fā)布android版本,有問題隨時熱更新代碼調試。待版本穩(wěn)定后,發(fā)布ios越獄版本。全部穩(wěn)定后,最后才發(fā)布app store。眾所周知,app store的審查周期比較長,有可能他們員工去休個假,幾個星期才審核通過:)。每次審核不通過,又得重新修改提交審查,又是漫長的等待。在游戲界,時間就是生命。我們盡量在android平臺上調試版本。

ps.大家有什么好的Unity3d技術點想討論的,歡迎告知,我今后將會多多寫一下大家比較感興趣的實戰(zhàn)內容。

最后祝大家工作順利,項目大賣~。

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android平臺的代碼熱更新
Unity 熱更新技術 | (一) 熱更新的基本概念原理及主流熱更新方案介紹
我使用的 unity 熱更新方案 JSB(求小編 推薦一下)
騰訊開源手游熱更新方案,Unity3D 下的 Lua 編程
Unity3D 熱更新方案(集合各位專家的匯總)
騰訊桌游客戶端開發(fā)實戰(zhàn)總結
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服