public void InitializationFile(string luaScriptFile, uint storeMethodMask, OnStoreMethod storeMethod) { if (Lua != null) { return; } // 创建 Lua 虚拟机 Lua = LuaAPI.NewState(); // 加载基本库 Lua.L_OpenLibs(); // 加载 Lua 脚本文件 ThreadStatus status = Lua.L_DoFile(luaScriptFile); // 捕获错误 if (status != ThreadStatus.LUA_OK) { throw new Exception(Lua.ToString(-1)); } // 确保 framework/main.lua 执行结果是一个 Lua Table if (!Lua.IsTable(-1)) { throw new Exception("framework main's return value is not a table"); } // 从 framework/main.lua 返回的 table 中读取 awake 字段指向的函数 // 并保存到 AwakeRef 中 (可以将 AwakeRef 视为这个函数的句柄) if ((storeMethodMask & LuaScriptDefine.StoreMethodMask_Awake) == LuaScriptDefine.StoreMethodMask_Awake) { AwakeRef = StoreMethod("awake"); } if ((storeMethodMask & LuaScriptDefine.StoreMethodMask_Start) == LuaScriptDefine.StoreMethodMask_Start) { StartRef = StoreMethod("start"); } if ((storeMethodMask & LuaScriptDefine.StoreMethodMask_Update) == LuaScriptDefine.StoreMethodMask_Update) { UpdateRef = StoreMethod("update"); } if ((storeMethodMask & LuaScriptDefine.StoreMethodMask_LateUpdate) == LuaScriptDefine.StoreMethodMask_LateUpdate) { LateUpdateRef = StoreMethod("late_update"); } if ((storeMethodMask & LuaScriptDefine.StoreMethodMask_FixedUpdate) == LuaScriptDefine.StoreMethodMask_FixedUpdate) { FixedUpdateRef = StoreMethod("fixed_update"); } if (storeMethod != null) { storeMethod(); } // 不再需要 framework/main.lua 返回的 table 了,将其从栈上弹出 Lua.Pop(1); }
public void InitializationName(string luaScriptName, uint storeMethodMask, OnStoreMethod storeMethod) { try { if (UniGameResources.currentUniGameResources == null) { throw new Exception("UniGameResources.currentUniGameResources == null!"); } FTLibrary.Resources.GameResourcesNode data = new FTLibrary.Resources.GameResourcesNode(); if (!UniGameResources.currentUniGameResources.FindResources(UniGameResourcesDefine.ResourcesTypeIndex_LuaScript, luaScriptName, ref data)) { throw new Exception(string.Format("cant find lua script!name={0}", luaScriptName)); } if (UniGameResources.gameResourcesWorkMode == UniGameResources.GameResourcesWorkMode.Mode_AloneSecurity) { try { InitializationFile(data.path, storeMethodMask, storeMethod); } catch (System.Exception ex) { Debug.LogError(ex.ToString()); } } else if (UniGameResources.gameResourcesWorkMode == UniGameResources.GameResourcesWorkMode.Mode_Mobile) { UniGameResourcesPackage package = (UniGameResourcesPackage)data.package; package.LockPackage(); try { InitializationFile(data.path, storeMethodMask, storeMethod); } catch (System.Exception ex) { Debug.LogError(ex.ToString()); } package.UnLockPackage(); } } catch (System.Exception ex) { Debug.LogError(ex.ToString()); } }
public void InitializationName(string luaScriptName, OnStoreMethod storeMethod) { InitializationName(luaScriptName, 0xFFFFFFFF, storeMethod); }
public void Initialization(byte[] scriptBytes, string scriptName, OnStoreMethod storeMethod) { Initialization(scriptBytes, scriptName, 0xFFFFFFFF, storeMethod); }
public void Initialization(string luaScriptString, OnStoreMethod storeMethod) { Initialization(luaScriptString, 0xFFFFFFFF, storeMethod); }