示例#1
0
        public void Reload()
        {
            if (Valid)
            {
                table.Dispose();
                table = null;
            }

            ClearCachedLuaFile(luaFilename);
            LoadLua(false);
        }
示例#2
0
    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;
    }
示例#4
0
 void OnDestroy()
 {
     if (mLuaOnDestroy != null)
     {
         mLuaOnDestroy(mLuaModule, mLuaObject);
     }
     if (mLuaObject != null)
     {
         mLuaObject.Dispose();
         mLuaObject = null;
     }
     mLuaModule    = null;
     mLuaUpdate    = null;
     mLuaOnDestroy = null;
     mLuaStart     = null;
 }
示例#5
0
        /// <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);
        }
示例#6
0
    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();
        }
    }