断点调试三部曲(一):xlua环境搭建
- Unity新建工程,工程名不可以是中文,版本无所谓
- 下载Xlua插件,版本无所谓
- 下载Vscode,本教程用的是1.44.2版本,版本过低会不兼容emmylua这个插件
- 开始搭建环境
- HOTFIX_ENABLE
- 新增的Hotfix Inject In Editor,在该教程中其实没用,当C#的类被打上[XLua.Hotfix]标签,并且修改了该类的时候,才需要用该功能,意为标签注入
- 在该教程中,我们只需要用
,生成代码,第一次用xlua的功能才需要点击一下,作用类似关联xlua工具
- 开始测试
- 一个Test_C.cs文件,随便挂载到场景中
- 一个Test_L.lua文件,放在Asset/LuaScripts目录下
- 运行
- 得到输出结果
就是成功了
《Test_C.cs》
using System.IO;
using UnityEngine;
using XLua;
public class Test_C : MonoBehaviour {
void Start ()
{
LuaStart();
}
LuaFunction func;
LuaEnv env;
//启动lua虚拟机并加载lua文件
void LuaStart()
{
Debug.Log("启动lua");
float t = Time.realtimeSinceStartup;//用于计算lua虚拟机耗时
env = new LuaEnv();//启动lua虚拟机
env.AddLoader(CustomLoader);//AddLoader()修改默认路径,参数是路径
env.DoString(@"require 'Test_L'");//加载"Test_L.lua"文件
func = env.Global.Get<LuaFunction>("OnStart");//获取到OnStart方法
func.Call(gameObject);//调用OnStart方法,传入参数
Debug.Log("lua虚拟机加载完毕 耗时:" + (Time.realtimeSinceStartup - t) + " s");
}
//修改lua文件的默认路径
private static byte[] CustomLoader(ref string filename)
{
filename = "LuaScripts/" + filename.Replace('.', '/');
filename = "Assets/" + filename + ".lua";
return File.ReadAllBytes(filename);
}
void OnApplicationQuit()
{
env.Dispose();//关闭虚拟机
}
}
《Test_L.lua》
function OnStart(gObj)
print("测试OnStart函数执行")
end