public Text text = null;
[Hotfix]
public void Show()
{
text = transform.Find("Text").GetComponent();
text.text = "我在C#里面";
}
要热更这个show方法。在lua代码里怎么写。
m_luaEnv = new LuaEnv();
m_luaEnv.DoString(@"
xlua.hotfix(CS.MenuUI, 'Show', function(self)
填充内容(希望text.text的值变动一下)
end)
");
或者大佬们有用到xlua热补丁的项目可以联系我。
https://www.jianshu.com/p/dc4de5612d9e
1、因为你使用的是xlua.hotfix替换了CS.MenuUI的整个Show方法,你要在填充内容处先把Show方法翻译成Lua代码,在Lua不能直接用text=transform.Find()....
而是先用CS.命名空间.类名.方法名来调用静态方法,而你这个transform 其实是this.transform 也就是成员,transform.Find()其实是调用transform对象的成员方法,那么Lua规定必须传递一个
调用方法的对象进去,也就是self.transform.Find(this,"Text"),同理Find出这个名为Text的物体的transform之后同样也是调用成员方法,故也是要传递相应的变量进去
即self.transform.Find(this,"Text").GetComponent(transform.Find(this,"Text"),组件名);简单地写就是self.transform:Find("Text"):GetComponent泛型如何在lua指定忘了- -。你可以试试
self于this,然后再修改你的text 即 self.text.text="我在lua修改了";如果不成功就是获取text的时候出错了错误,我真的忘了怎么在lua怎么获取泛型
2.使用 util.lua.txt库的方法:util.hotfix_ex(CS.MyClass,'MethodName',function(self)
self.MethodName() --这样可以直接用self.MethodName()来调用自身方法
... ... --其他的一些lua代码,也就是说在原本方法的基础上对该方法进行补充,(建议少用)
end)
根据xlua原理+ILRuntime制作的XIL可以了解下,集xlua与ILRuntime优点于一身,不多说,请看源码:
github地址:https://github.com/wuxiongbin/XIL