Unity3D|-XLua熱更新用法的大致流程


xlua是由騰訊維護的一個開源項目,我們可以在github上下載這個開源項目並查看一些相關文檔

官網https://github.com/Tencent/xLua

配置文檔https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/hotfix.md

常見問題解答https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/faq.md


接下來我們來走一遍使用xlua的大致流程:

第一步:下載xlua:進入官網並下載整個xlua項目

第二步:將xlua導入項目:將下載后的xLua-master文件夾下的Assets文件夾拷貝到項目文件夾下,將Tools文件夾拷貝到項目文件夾Assets的同級目錄下並刪除其中的System.Core.dll文件

  這一步完成后unity編輯器的工具欄會多出一個Xlua的選項,其中里面會有兩個子選項(Gennerate Code生成腳本、Clear Gennerate Code清除腳本)

  

第三步:開啟熱更新:打開playersettings,開啟腳本宏命令標志輸入HOTFIX_ENABLE並按ENTER(即找到othersetins中的ScriptsingDefineSymbols輸入HOTFIX_ENABLE並按ENTER)敲完按回車才會進行編譯

  

  編譯完成后Xlua選項中多了一項(Hofix Inject In Editor

  C#腳本發生了任何更改都需要按選項1來生成代碼,有問題就選項2清楚腳本再重新生成,生成代碼結束后會debug一個finished出來,此時再選項3進行注入

  

  圖片來源:https://blog.csdn.net/ChinarCSDN/article/details/81124973

第四步:打開unity安裝目錄中的Editor\Data\Managed\Unity.Cecil.Pdb.cll、Mdb.dll、.cll三個文件拷貝到工程目錄下的xula文件夾下的srceditor文件夾下


 

 關於XLua的使用:

xlua在項目中的啟動、調用、結束等全過程:

我們使用一個腳本來管理xlua的流程  HotfixScript

腳本中創建一個唯一的解釋器 new LuaEnv()

加載自定義loader AddLoader()

搜尋並執行lua文件 Dostring(" require 'lua文件名' ")

    private LuaEnv luaEnv;

    void Awake()
    {
        luaEnv = new LuaEnv();//創建解釋器
        luaEnv.AddLoader(MyLoader);//加載自定義loader
        luaEnv.DoString("require 'fish'");//搜尋lua腳本
    }

自定義Loader需要傳入一個文件路徑再返回讀取到的文件的byte數組

    private byte[] MyLoader(ref string filePath)
    {
        string absPath = @"E:\app\unity2018\products\FishXlua\" + filePath+".lua.txt"; return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(absPath)); }

最后的釋放資源分兩部分,一個是釋放方法委托,一個是解釋器,前者在OnDisable中調用lua代碼來執行,后者在OnDestroy中來釋放

    void OnDisable()
    {
        luaEnv.DoString("require 'fishDispose'");
    }

    void OnDestroy()
    {
        luaEnv.Dispose();
    }

 

如何使用lua代碼對游戲內容進行更改?

在原來的可能出問題的C#類上打上hotfix標簽,在方法上打上luacallcsharp標簽

之后便可在lua腳本中進行更改

修改格式如下:

xlua.hotfix(CS.類名,'方法名',function(self)

  具體實現的方法體

end)

 

 PS:當在lua腳本中可能需要用到某個c#類中的私有訪問屬性字段時,可以使用以下格式來獲取訪問權限

xlua.private_accessible(CS.類名)

 

調用C#中的一些自帶的類、方法

CS.UnityEngine、CS.類名.方法……

 

通過自身對象調用自身方法:self:方法名()   或者   self.方法名(self)  前者使用冒號的方式是為了簡寫傳入self參數的過程

 

解綁委托:專門用一個lua腳本來負責解綁所有lua調用重寫過的方法

例如:xlua.hotfix(CS.類名,'方法名',nill)

與改寫方法類型,只是在最后一個參數將function改成了nill表示置空

 

 


 

總結一下使用xlua熱更新的開發過程:

  • 首先開發業務代碼
  • 在所有可能出現問題的類上打上hotfix標簽,在所有lua調用C#的方法上打上luacallcsharp標簽,在所有csharp調用lua的方法上打上csharpcalllua標簽
  • 打包發布
  • 修改bug時只需要更新lua文件,修改資源時只需要更新AB包,用戶只需要去下載AB包和lua文件就可以了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM