Пример #1
0
    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);
    }
Пример #2
0
    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());
        }
    }
Пример #3
0
 public void InitializationName(string luaScriptName, OnStoreMethod storeMethod)
 {
     InitializationName(luaScriptName, 0xFFFFFFFF, storeMethod);
 }
Пример #4
0
 public void Initialization(byte[] scriptBytes, string scriptName, OnStoreMethod storeMethod)
 {
     Initialization(scriptBytes, scriptName, 0xFFFFFFFF, storeMethod);
 }
Пример #5
0
 public void Initialization(string luaScriptString, OnStoreMethod storeMethod)
 {
     Initialization(luaScriptString, 0xFFFFFFFF, storeMethod);
 }