UH2S2L22——多函数替换和构造函数与析构函数替换
本章代码关键字
多函数替换
我们可以使用另外一种写法,执行一次xlua.hotfix,即可对多个方法进行热补丁操作
假设我们要对下面三个方法进行热补丁替换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class HotfixMain : MonoBehaviour { void Update () { } public int Add (int a, int b ) { return 0 ; } public static void Speak (string s ) { Debug.Log("C# Speak" ); } }
我们通过固定写法:xlua.hotfix(类, {函数名 = 函数, 函数名 = 函数....}),即可对多个方法进行热补丁替换
1 2 3 4 5 6 7 8 9 10 11 xlua.hotfix(CS.HotfixMain, { Update = function (self) print (os .time ()) end , Add = function (self, a, b) return a + b end , Speak = function (a) print (a) end })
构造函数替换
构造函数不能直接替换,原有的C#构造函数逻辑还是会执行,不过会在原有逻辑基础上执行Lua脚本代码
假设我们要对下面的类的各个方法进行热补丁替换
1 2 3 4 5 6 7 8 9 10 11 12 13 [Hotfix ] public class HotfixTest { public HotfixTest () { Debug.Log("HotfixTest构造函数" ); } public void Speak (string str ) { Debug.Log(str); } }
对于类的构造函数的热补丁替换,其索引为固定写法[".ctor"]
1 2 3 4 5 6 7 8 9 xlua.hotfix(CS.HotfixTest, { [".ctor" ] = function () print ("Lua热补丁构造函数!" ) end , Speak = function (self, a) print ("唐老狮说" .. a) end , })
在这里可以发现,原来的构造函数方法并没有被替换,lua代码逻辑是在原构造函数的基础上添加的!
析构函数替换
析构函数同样不能直接替换,原有的C#构造函数逻辑还是会执行,不过会在原有逻辑基础上执行Lua脚本代码
对于类的构造函数的热补丁替换,其索引为固定写法Finalize
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [Hotfix ] public class HotfixTest { public HotfixTest () { Debug.Log("HotfixTest构造函数" ); } public void Speak (string str ) { Debug.Log(str); } ~HotfixTest() { } }
1 2 3 4 5 6 7 8 9 10 11 12 13 xlua.hotfix(CS.HotfixTest, { [".ctor" ] = function () print ("Lua热补丁构造函数!" ) end , Speak = function (self, a) print ("唐老狮说" .. a) end , Finalize = function () print ("对象销毁" ) end })