使用基於 UGUI 、 toLua 的 LuaFramework進行熱更新總結

怎麼做到熱更新的

開始遊戲時對比本地和服務器的files.txt,其中包含了每個AssetBundle的名字和MD5碼,如果有文件不存在過MD5碼不同則進行更新下載,進而實現更新內容。

個人理解

luaframework的好處:

  1. 不需要在Unity內考慮如何調用lua腳本
  2. 只需要完善相應panel界面以及Ctrl和Panel腳本即可

使用過程:

  1. Unity項目標題欄LuaFramework根據項目平臺進行Build
    會有錯誤出現,無關緊要的錯誤註釋即可
  2. 安裝資源管理服務器,將StreamingAssets文件夾放入其中
  3. 配置AppConst.cs內容
    UpdateMode(更新模式-默認關閉)、GameFrameRate(遊戲幀頻)、WebUrl(測試更新地址)
  4. 打開Sences/main場景,正常顯示測試場景內容即可
  5. 將場景打包發佈對應平臺
  6. 在Unity中更改main場景中對應的panel
  7. Unity標題欄LuaFramework選項根據對應項目平臺重新進行Build
  8. 將StreamingAssets文件夾重新放入資源管理服務器
  9. 在模擬器中打開相應app查看場景內容是否改變
建議:
  1. 發佈windows平臺exe應用無法進行內容的更新顯示,始終是打包時的內容,建議打包成 Android apk
  2. 打包安卓 apk 時會報錯,需要把Plugins文件加下的ios,x86,x64文件夾刪除即可正常打包

添加Panel流程:

如果你想要添加一個Panel,你需要一下幾個東西:

  1. 在unity中的Panel預製體
  2. 需要有兩個lua腳本,
    一個panel.lua,用來控制該界面元素的顯隱操作
    一個ctrl.lua,用來編寫該界面的邏輯內容
    類似於PromptPanel和PromptCtrl
  3. 把panel.lua放進define腳本中的PanelNames中
  4. 把ctrl.lua放進define腳本中的CtrlNames中
  5. 在CtrlManager中require所有的lua的Ctrl腳本
  6. 在CtrlManager的Init方法中添加相應的數據
注意點:
  1. 在CustomSetting.cs中的customTypeList可添加要導出註冊到lua的類型列表
  2. 如果有新的資源需要打包,需要在Packager的HandleExampleBundle()方法中添加,每一行就是一個包

在lua中調用unity的靜態類

  1. 在CustomSetting.cs中的customTypeList、staticClassTypes註冊類
  2. 在LuaFramework/ToLua/Lua中的tolua.lua中reqire要註冊的類
  3. 點擊Lua/Generate All Lua
  4. 即可在Lua腳本中直接調用靜態類中的方法
注意點:
  1. lua中調用Unity的靜態類的屬性和方法都只需要一個點
    例如PlayerPrefs.GetString(username)

在lua中調用unity的非靜態類

  1. 在CustomSetting.cs中的customTypeList中註冊類
  2. 類似lua中Ctrl腳本的panelMgr:CreatePanel(‘Login’, this.OnCreate);回調OnCreate把unity中的對象傳到lua中,所以OnCreate有一個obj參數,function LoginCtrl.OnCreate(obj)
注意點:
  1. 在lua中調用unity中的非靜態類的屬性時用一個點,調用方法時用冒號
    例如:transform = obj.transform;
    panel = transform:GetComponent(‘UIPanel’);

常見錯誤

  1. OnStreamingAssets—>>xxxxxx
    解決方法:未成功生成相應平臺資源包,重新點擊Unity標題欄LuaFramework選項根據對應項目平臺重新進行Build

  2. 打開一個panel後關閉它,然後再重新打開,可能會出現背景圖片消失的情況
    解決方法:將預製物打一個包即可,背景圖片無需另外打一個包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章