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) "); } } }