xlua中hotfix簡單實用


tolua每次修改C#代碼,tolua都需要生成代碼,xlua無需生成,但是在最后實際發布時,xlua需要生成代碼

這章主要是寫一下hotfix實用

這個特性默認是關閉的,實用時需要在UNITY中添加HOTFIX_ENABLE宏,打開步驟(在Unity3D的File->Build Setting->Scripting Define Symbols下添加)

這個熱補丁還依賴Cecil,添加HOTFIX_ENABLE宏之后,可能會報找不到Cecil。這時你需要到Unity安裝目錄下找到Mono.Cecil.dll,拷貝到項目里頭。而HOTFIX_DEBUG_SYMBOLS則依賴Mono.Cecil.Pdb.dll,Mono.Cecil.Mdb.dll。

熱補丁需要執行XLua/Generate Code才能正常運行。

不支持靜態構造函數。

目前只支持Assets下代碼的熱補丁,不支持引擎,c#系統庫的熱補丁。

注意:要等打印了hotfix inject finish!后才運行例子,否則會類似xlua.access, no field __Hitfix0_Update的錯誤

將windows 下UNITY安裝路徑下C:\Unity\Editor\Data\Managed\(Mono.Cecil.DLL等帶有Cecil的dll文件)拷貝到Unity游戲項目文件夾中

using UnityEngine;
using System.Collections;
using XLua;

[Hotfix]
public class HotfixExample : MonoBehaviour {
    LuaEnv luaenv = new LuaEnv();
     public int tick = 0; //如果是private的,在lua設置xlua.private_accessible(CS.HotfixTest)后即可訪問
   
    
    // Use this for initialization
    void Start () 
    {
    }

    // Update is called once per frame
    void Update () 
    {
	    if (++tick % 50 == 0)
        {
            Debug.Log(">>>>>>>>Update in C#, tick = " + tick);
        }
	}

    void OnGUI()
    {
        if (GUI.Button(new Rect(10, 100, 300, 150), "Hotfix"))
        {
            luaenv.DoString(@"
                xlua.hotfix(CS.HotfixTest, 'Update', function(self)
                    self.tick = self.tick + 1
                    if (self.tick % 50) == 0 then
                        print('<<<<<<<<Update in lua, tick = ' .. self.tick)
                    end
                end)
            ");
        }
    }
}

  


免責聲明!

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



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