Beispiel #1
0
        private void Awake()
        {
            luaEnv    = LuaManager.LuaEnv;
            scriptEnv = luaEnv.NewTable();
            var meta = luaEnv.NewTable();

            meta.Set("__index", luaEnv.Global);
            scriptEnv.SetMetaTable(meta);
            meta.Dispose();

            scriptEnv.Set("self", this);
            foreach (var injection in injections)
            {
                scriptEnv.Set(injection.name, injection.value);
            }

            var prefabName = name;

            if (prefabName.Contains("(Clone)"))
            {
                prefabName = prefabName.Split(new[] { "(Clone)" }, StringSplitOptions.RemoveEmptyEntries)[0];
            }

            prefabName = prefabName.Replace("Panel", "");

            luaAwake     = scriptEnv.GetInPath <delLuaAwake>(prefabName + ".awake");
            luaStart     = scriptEnv.GetInPath <delLuaStart>(prefabName + ".start");
            luaUpdate    = scriptEnv.GetInPath <delLuaUpdate>(prefabName + ".update");
            luaOnDestroy = scriptEnv.GetInPath <delLuaOnDestroy>(prefabName + ".ondestroy");

            _myClass = luaEnv.Global.Get <MyClass>("MyClass");
            Debug.Log(_myClass == null);
            luaAwake?.Invoke(gameObject);
        }
    protected override void OnAwake()
    {
        base.OnAwake();
        luaEnv = LuaManager.luaEnv; //此处要从LuaManager上获取 全局只有一个

        scriptEnv = luaEnv.NewTable();

        LuaTable meta = luaEnv.NewTable();

        meta.Set("__index", luaEnv.Global);
        scriptEnv.SetMetaTable(meta);
        meta.Dispose();

        string prefabName = name;

        if (prefabName.Contains("(Clone)"))
        {
            prefabName = prefabName.Split(new string[] { "(Clone)" }, StringSplitOptions.RemoveEmptyEntries)[0];
        }

        prefabName = prefabName.Replace("pan_", "");

        Debug.Log(prefabName);
        luaAwake     = scriptEnv.GetInPath <delLuaAwake>(prefabName + ".awake");
        luaStart     = scriptEnv.GetInPath <delLuaStart>(prefabName + ".start");
        luaUpdate    = scriptEnv.GetInPath <delLuaUpdate>(prefabName + ".update");
        luaOnDestroy = scriptEnv.GetInPath <delLuaOnDestroy>(prefabName + ".ondestroy");

        scriptEnv.Set("self", this);
        if (luaAwake != null)
        {
            luaAwake(gameObject);
        }
    }
Beispiel #3
0
        public void Init(string name)
        {
            prefabName = name;

            try
            {
                LuaTable meta      = LuaManager.NewTable();
                LuaTable scriptEnv = LuaManager.NewTable();
                scriptEnv.SetMetaTable(meta);
                meta.Set("__index", LuaManager.Global);
                LuaManager.DoString(string.Format("require '{0}'", name), prefabName, scriptEnv);
                luaAwake     = scriptEnv.GetInPath <delLuaAwake>(prefabName + ".awake");
                luaStart     = scriptEnv.GetInPath <delLuaStart>(prefabName + ".start");
                luaUpdate    = scriptEnv.GetInPath <delLuaUpdate>(prefabName + ".update");
                luaOnDestroy = scriptEnv.GetInPath <delLuaOnDestroy>(prefabName + ".ondestroy");

                if (luaAwake != null)
                {
                    luaAwake(gameObject);
                }
            }
            catch (Exception ex)
            {
                Debug.LogErrorFormat(ex.ToString());
            }
        }
Beispiel #4
0
        private void OnDestroy()
        {
            luaOnDestroy?.Invoke();

            luaAwake     = null;
            luaStart     = null;
            luaUpdate    = null;
            luaOnDestroy = null;
        }
Beispiel #5
0
 private void OnDestroy()
 {
     if (luaOnDestroy != null)
     {
         luaOnDestroy();
     }
     luaAwake     = null;
     luaOnDestroy = null;
     luaUpdate    = null;
     luaStart     = null;
 }
    protected override void BeforeOnDestroy()
    {
        base.BeforeOnDestroy();

        //备注 调用销毁的话,经常会造成Unity崩溃
        if (luaOnDestroy != null)
        {
            luaOnDestroy();
        }
        luaOnDestroy = null;
        luaUpdate    = null;
        luaStart     = null;
    }
Beispiel #7
0
    private void Awake()
    {
        Debug.LogError("awake");
        //获取全局的Lua环境变量
        luaEnv = LuaManager.luaEnv;

        scriptEnv = luaEnv.NewTable();

        LuaTable meta = luaEnv.NewTable();

        meta.Set("__index", luaEnv.Global);
        scriptEnv.SetMetaTable(meta);
        meta.Dispose();

        string prefabName = name;

        //去掉克隆的关键字
        if (prefabName.Contains("(Clone)"))
        {
            prefabName = prefabName.Split(new string[] { "(Clone)" }, StringSplitOptions.RemoveEmptyEntries)[0];
        }

        prefabName = prefabName.Replace("pan_", "");
        name       = prefabName;

        //  prefabName + ".awake"  要对应Lua脚本中View的方法
        luaAwake     = scriptEnv.GetInPath <LuaViewBehaviour.delLuaAwake>(prefabName + ".Awake");
        luaStart     = scriptEnv.GetInPath <LuaViewBehaviour.delLuaStart>(prefabName + ".Start");
        luaUpdate    = scriptEnv.GetInPath <LuaViewBehaviour.delLuaUpdate>(prefabName + ".Update");
        luaOnDestroy = scriptEnv.GetInPath <LuaViewBehaviour.delLuaOnDestroy>(prefabName + ".OnDestroy");

        scriptEnv.Set("self", this);
        if (luaAwake != null)
        {
            luaAwake(this.gameObject);
        }
    }