Lua FramWrok 框架启动

用的PureMvc设计模式

GlobalGenerator上挂的脚本

GameManager物体下挂

GlobalGenerator全局生成器

  public class GlobalGenerator : MonoBehaviour 
    {

        void Awake() {
            InitGameMangager();
        }

        /// <summary>
        /// 实例化游戏管理器
        /// </summary>
        public void InitGameMangager() {
            string name = "GameManager";
            gameObject.AddComponent<AppView>();

            GameObject manager = GameObject.Find(name);
            if (manager == null) {
                manager = new GameObject(name);
                manager.name = name;
                //添加上了各种管理类
                AppFacade.Instance.StartUp();   //启动MVC框架
            }
        }
    }

AppFacade类

 override protected void InitializeController()
    {
        base.InitializeController();
        //从括号中的类中添加的各种管理类
        RegisterCommand(NotiConst.START_UP, typeof(StartUpCommand));//注册监听消息
    }

    /// <summary>
    /// 启动框架
    /// </summary>
    public void StartUp() {
        SendNotification(NotiConst.START_UP);//发消息出去
        RemoveMultiCommand(NotiConst.START_UP);
    }

StartUpCommand类

public class StartUpCommand : MacroCommand {

    protected override void InitializeMacroCommand() {
        base.InitializeMacroCommand();

        if (!Util.CheckEnvironment()) return;

        //数据层的,用来网络交互的
        AddSubCommand(typeof(BootstrapModels));

        //添加管理层的
        AddSubCommand(typeof(BootstrapCommands));

        //添加view脚本,用来更新界面的
        AddSubCommand(typeof(BootstrapViewMediators));
    }
}

BootstrapCommands类

 public override void Execute(INotification notification) 
    {
        //-----------------关联命令-----------------------
        Facade.RegisterCommand(NotiConst.DISPATCH_MESSAGE, typeof(SocketCommand));

        //-----------------初始化管理器-----------------------
        Facade.AddManager(ManagerName.Lua, new LuaScriptMgr());

        Facade.AddManager<PanelManager>(ManagerName.Panel);
        Facade.AddManager<MusicManager>(ManagerName.Music);
        Facade.AddManager<TimerManager>(ManagerName.Timer);
        Facade.AddManager<NetworkManager>(ManagerName.Network);
        Facade.AddManager<ResourceManager>(ManagerName.Resource);
        Facade.AddManager<ThreadManager>(ManagerName.Thread);

        Facade.AddManager<GameManager>(ManagerName.Game);
        Debug.Log("SimpleFramework StartUp-------->>>>>");
    }

Facade类

扫描二维码关注公众号,回复: 2584018 查看本文章
static GameObject m_GameManager;
        static Dictionary<string, object> m_Managers = new Dictionary<string, object>();

        GameObject AppGameManager {
            get {
                if (m_GameManager == null) {
                    m_GameManager = GameObject.Find("GameManager");
                }
                return m_GameManager;
            }
        }

        // 添加管理器
        public void AddManager(string typeName, object obj) 
        {
            if (!m_Managers.ContainsKey(typeName)) {
                m_Managers.Add(typeName, obj);
            }
        }

        // 添加Unity对象
        public T AddManager<T>(string typeName) where T : Component {
            object result = null;
            m_Managers.TryGetValue(typeName, out result);
            if (result != null) {
                return (T)result;
            }
            Component c = AppGameManager.AddComponent<T>();
            m_Managers.Add(typeName, c);
            return default(T);
        }
        // 获取系统管理器
        public T GetManager<T>(string typeName) where T : class {
            if (!m_Managers.ContainsKey(typeName)) {
                return default(T);
            }
            object manager = null;
            m_Managers.TryGetValue(typeName, out manager);
            return (T)manager;
        }

        /// <summary>
        /// 删除管理器
        /// </summary>
        /// <param name="typeName"></param>
        public void RemoveManager(string typeName) 
        {
            if (!m_Managers.ContainsKey(typeName)) {
                return;
            }
            object manager = null;
            m_Managers.TryGetValue(typeName, out manager);
            Type type = manager.GetType();
            if (type.IsSubclassOf(typeof(MonoBehaviour))) 
            {
                GameObject.Destroy((Component)manager);
            }
            m_Managers.Remove(typeName);
        }
 /// <summary>
        /// 对游戏进行初始化
        /// </summary>
        public void OnResourceInited() 
        {
            LuaManager.Start();
            //加载网络
            LuaManager.DoFile("Logic/Network");
            //加载游戏
            LuaManager.DoFile("Logic/GameManager");  
            initialize = true;  

            NetManager.OnInit();    //初始化网络

            object[] panels = CallMethod("LuaScriptPanel");
            //---------------------Lua面板---------------------------
            foreach (object o in panels) 
            {
                string name = o.ToString().Trim();
                if (string.IsNullOrEmpty(name)) continue;
                name += "Panel";    //添加

                LuaManager.DoFile("View/" + name);
                Debug.LogWarning("LoadLua---->>>>" + name + ".lua");
            }
            //------------------------------------------------------------
            CallMethod("OnInitOK");   //初始化完成
        }

LuaManager.DoFile("Logic/Network");

  LuaScriptMgr类,启动的时候把所有的Lua脚本添加到字典中

 public object[] DoFile(string fileName)
    {        
        if (!fileList.Contains(fileName))
        {                            
            return lua.DoFile(fileName, null);                  
        }

        return null;
    }

LS中新建we文件夹为工程下的Lua名,然后再添加现有Lua文件

GameManager类继承自LuaBehaciour类

  LuaBehaciour类中

  protected object[] CallMethod(string func, params object[] args) {
            if (!initialize) return null;
            return Util.CallMethod(name, func, args);
        }
        public static object[] CallMethod(string module, string func, params object[] args) {
            LuaScriptMgr luaMgr = AppFacade.Instance.GetManager<LuaScriptMgr>(ManagerName.Lua);
            if (luaMgr == null) return null;
            string funcName = module + "." + func;
            funcName = funcName.Replace("(Clone)", "");
            return luaMgr.CallLuaFunction(funcName, args);
        }

猜你喜欢

转载自blog.csdn.net/qq_35647121/article/details/81194876
LUA
今日推荐