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); } }
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()); } }
private void OnDestroy() { luaOnDestroy?.Invoke(); luaAwake = null; luaStart = null; luaUpdate = null; luaOnDestroy = null; }
private void OnDestroy() { if (luaOnDestroy != null) { luaOnDestroy(); } luaAwake = null; luaOnDestroy = null; luaUpdate = null; luaStart = null; }
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); } }