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