public void Reload() { if (Valid) { table.Dispose(); table = null; } ClearCachedLuaFile(luaFilename); LoadLua(false); }
public static XLua.LuaTable getSimpleEnvTable() { XLua.LuaTable scriptEnv = LuaManager.LuaEnv.NewTable(); // 为每个脚本设置一个独立的环境,可一定程度上防止脚本间全局变量、函数冲突 XLua.LuaTable meta = LuaManager.LuaEnv.NewTable(); meta.Set("__index", LuaManager.LuaEnv.Global); scriptEnv.SetMetaTable(meta); meta.Dispose(); return(scriptEnv); }
//---------------------------------------------------------------------------- // PlayState.Pausedに変更されたときに呼び出される public override void OnBehaviourPause( UnityEngine.Playables.Playable playable, UnityEngine.Playables.FrameData info ) { luaOnDestroy?.Invoke(); luaOnDestroy = null; scriptEnv?.Dispose(); scriptEnv = null; luaUpdate = null; }
void OnDestroy() { if (mLuaOnDestroy != null) { mLuaOnDestroy(mLuaModule, mLuaObject); } if (mLuaObject != null) { mLuaObject.Dispose(); mLuaObject = null; } mLuaModule = null; mLuaUpdate = null; mLuaOnDestroy = null; mLuaStart = null; }
/// <summary> /// 创建拓展的LuaTable /// </summary> /// <param name="tableName">做key</param> /// <returns></returns> public LuaTable CreateExpandTable(string tableName) { if (_luaTableMap.ContainsKey(tableName)) { Error("CreateExpandTable():the table has existed :{0}", tableName); return(null); } LuaTable luaTable = _luaEnv.NewTable(); LuaTable metaTable = _luaEnv.NewTable(); metaTable.Set("__index", _luaEnv.Global); luaTable.SetMetaTable(metaTable); metaTable.Dispose(); AddTable(tableName, luaTable); return(luaTable); }
public static XLua.LuaTable getInterpreterEnvTable(GameInterpreter interpreter) { XLua.LuaTable scriptEnv = LuaManager.LuaEnv.NewTable(); // 为每个脚本设置一个独立的环境,可一定程度上防止脚本间全局变量、函数冲突 XLua.LuaTable meta = LuaManager.LuaEnv.NewTable(); meta.Set("__index", LuaManager.LuaEnv.Global); scriptEnv.SetMetaTable(meta); meta.Dispose(); scriptEnv.Set("self", interpreter); scriptEnv.Set("gameVariables", GameTemp.gameVariables); scriptEnv.Set("gameSwitches", GameTemp.gameSwitches); scriptEnv.Set("gameSelfSwitches", GameTemp.gameSelfSwitches); scriptEnv.Set("gamePlayer", GameTemp.gamePlayer); scriptEnv.Set("gameMap", GameTemp.gameMap); return(scriptEnv); }
//---------------------------------------------------------------------------- // PlayState.Playingに変更されたときに呼び出される public override void OnBehaviourPlay( UnityEngine.Playables.Playable playable, UnityEngine.Playables.FrameData info ) { if (textAsset != null) { scriptEnv = LuaEngine.LuaEnv.NewTable(); // スクリプトごとに別々の環境を設定すると、スクリプト間でのグローバル変数と関数の競合をある程度防ぐことができます。 XLua.LuaTable meta = LuaEngine.LuaEnv.NewTable(); meta.Set("__index", LuaEngine.LuaEnv.Global); scriptEnv.SetMetaTable(meta); meta.Dispose(); scriptEnv.Set("self", owner); LuaEngine.LuaEnv.DoString(textAsset.text, textAsset.GetHashCode().ToString(), scriptEnv); Action luaAwake = scriptEnv.Get <Action>("awake"); scriptEnv.Get("update", out luaUpdate); scriptEnv.Get("ondestroy", out luaOnDestroy); luaAwake?.Invoke(); } }