1.因为需要热更新的缘故,需要研究一波XLUA,这个系列主要是讲XLUA,看得懂就看吧(建议由UNITY基础再看,没有的一般看不懂)
XLUA是腾讯推出的开源lua框架
源码地址:
https://github.com/Tencent/xLua
2.实现一个HelloWorld
void Start()
{
LuaEnv luaenv = new LuaEnv();
luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')");
luaenv.Dispose();
}
我们可以看到,将一个原本直接调用的Debug函数,通过字符串的方式进行调用。
这就是LUA的基本策略-代码的动态配置。
因为字符串是可以自动生成的(c#不支持代码生成,支持代码生成的例子可以参考js,html,而现在,你可以加一个lua)
lua的这种操作,让我想起了sql语法,比如JDBC里面call sql语句,就是这种策略。
2.1 我们的习惯是Debug.Log()
那么是否支持呢?
测试代码:
LuaEnv luaenv2 = new LuaEnv();
luaenv2.DoString("Debug.Log('是否支持Debug!')");
luaenv2.Dispose();
测试结果:
显然不行。
这样就可以了。所以,标准很重要。
其实原理很容易想得到,如果你学过反射的话,我的C#编程技巧里面讲过反射的基本原理,你就会知道,定位一个对象,需要知道它的包的位置。所以!你需要加上CS.UnityEngine.xxx
就是为了从命名空间去定位到这个对象!
3.封装
所以,为了便于Debug,我们一般就会封装一个Tool
public void Log(object value) {
LuaEnv luaenv = new LuaEnv();
luaenv.DoString("CS.UnityEngine.Debug.Log('"+value.ToString()+"')");
luaenv.Dispose();
}