luaEnv.DoString("require 'xxxx'");
Action act1 = luaEnv.Global.Get<Action>("add");
act1();
act1 = null;
luaEnv.Dispose();
为什么act1=null了
还是会报这个错误
luaEnv.DoString("require 'xxxx'");
Action act1 = luaEnv.Global.Get<Action>("add");
act1();
act1 = null;
luaEnv.Dispose();
为什么act1=null了
还是会报这个错误
我已经找到答案了,是因为C#的GC回收机制导致的,因为实在同一帧,所以即使写了act1 = null;但是并不是真的被释放了,你可以这样写:
[XLua.CSharpCallLua]
public delegate double LuaMax(double a, double b);
private XLua.LuaEnv luaEnv = null;
void Start()
{
luaEnv = new XLua.LuaEnv();
luaEnv.DoString("CS.UnityEngine.Debug.Log('hello world')");
//luaenv.dispose(); 不要写在这里
LuaMax max = luaEnv.Global.GetInPath<LuaMax>("math.max");
Debug.Log("max:" + max(32, 12));
max = null;
}
private void OnDisable()
{
if (luaEnv != null)
{
luaEnv.Dispose();
luaEnv = null;
}
}