怎麼做到熱更新的
開始遊戲時對比本地和服務器的files.txt,其中包含了每個AssetBundle的名字和MD5碼,如果有文件不存在過MD5碼不同則進行更新下載,進而實現更新內容。
個人理解
luaframework的好處:
- 不需要在Unity內考慮如何調用lua腳本
- 只需要完善相應panel界面以及Ctrl和Panel腳本即可
使用過程:
- Unity項目標題欄LuaFramework根據項目平臺進行Build
會有錯誤出現,無關緊要的錯誤註釋即可 - 安裝資源管理服務器,將StreamingAssets文件夾放入其中
- 配置AppConst.cs內容
UpdateMode(更新模式-默認關閉)、GameFrameRate(遊戲幀頻)、WebUrl(測試更新地址) - 打開Sences/main場景,正常顯示測試場景內容即可
- 將場景打包發佈對應平臺
- 在Unity中更改main場景中對應的panel
- Unity標題欄LuaFramework選項根據對應項目平臺重新進行Build
- 將StreamingAssets文件夾重新放入資源管理服務器
- 在模擬器中打開相應app查看場景內容是否改變
建議:
- 發佈windows平臺exe應用無法進行內容的更新顯示,始終是打包時的內容,建議打包成 Android apk
- 打包安卓 apk 時會報錯,需要把Plugins文件加下的ios,x86,x64文件夾刪除即可正常打包
添加Panel流程:
如果你想要添加一個Panel,你需要一下幾個東西:
- 在unity中的Panel預製體
- 需要有兩個lua腳本,
一個panel.lua,用來控制該界面元素的顯隱操作
一個ctrl.lua,用來編寫該界面的邏輯內容
類似於PromptPanel和PromptCtrl - 把panel.lua放進define腳本中的PanelNames中
- 把ctrl.lua放進define腳本中的CtrlNames中
- 在CtrlManager中require所有的lua的Ctrl腳本
- 在CtrlManager的Init方法中添加相應的數據
注意點:
- 在CustomSetting.cs中的customTypeList可添加要導出註冊到lua的類型列表
- 如果有新的資源需要打包,需要在Packager的HandleExampleBundle()方法中添加,每一行就是一個包
在lua中調用unity的靜態類
- 在CustomSetting.cs中的customTypeList、staticClassTypes註冊類
- 在LuaFramework/ToLua/Lua中的tolua.lua中reqire要註冊的類
- 點擊Lua/Generate All Lua
- 即可在Lua腳本中直接調用靜態類中的方法
注意點:
- lua中調用Unity的靜態類的屬性和方法都只需要一個點
例如PlayerPrefs.GetString(username)
在lua中調用unity的非靜態類
- 在CustomSetting.cs中的customTypeList中註冊類
- 類似lua中Ctrl腳本的panelMgr:CreatePanel(‘Login’, this.OnCreate);回調OnCreate把unity中的對象傳到lua中,所以OnCreate有一個obj參數,function LoginCtrl.OnCreate(obj)
注意點:
- 在lua中調用unity中的非靜態類的屬性時用一個點,調用方法時用冒號
例如:transform = obj.transform;
panel = transform:GetComponent(‘UIPanel’);
常見錯誤
-
OnStreamingAssets—>>xxxxxx
解決方法:未成功生成相應平臺資源包,重新點擊Unity標題欄LuaFramework選項根據對應項目平臺重新進行Build -
打開一個panel後關閉它,然後再重新打開,可能會出現背景圖片消失的情況
解決方法:將預製物打一個包即可,背景圖片無需另外打一個包