private void DoStart() { System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch(); stopWatch.Start(); lobbyLuaEnv = new XLua.LuaEnv(); gameLuaEnv = new XLua.LuaEnv(); LuaEnvInit.AddBasicBuiltin(lobbyLuaEnv); LuaEnvInit.AddBasicBuiltin(gameLuaEnv); // 启动lobby大厅模块 lobby = new ModuleHub("lobby", null, this, lobbyLuaEnv); floader = new FairyGUILoader(lobby); lobby.Launch(); stopWatch.Stop(); Debug.Log($"Boot.Start total time:{stopWatch.Elapsed.TotalMilliseconds} milliseconds"); }
/// <summary> /// 新建一个游戏模块 /// </summary> /// <param name="gameModName">游戏模块名字</param> public void LaunchGameModule(string gameModName, string jsonString) { // 只有大厅模块的parent才不为null,其他所有游戏模块的parent必须是null if (parent != null) { // 如果parent不等于null,表示模块是游戏模块,游戏模块不能创建新的游戏模块 throw new System.Exception($"LaunchGameModule {gameModName} failed, module {modName} not lobby"); } // 检查是否新建重复的游戏模块 if (subModules.ContainsKey(gameModName)) { throw new System.Exception($"LaunchGameModule {gameModName} failed, duplicate module"); } // 检查是否启动多于一个游戏模块,目前仅允许一个游戏在运行 if (subModules.Count > 0) { throw new System.Exception($"LaunchGameModule {gameModName} failed, only support 1 game module on running"); } // 界面必须清空后才能进入子游戏 var guiChildrenCount = FairyGUI.GRoot.inst._children.Count; if (guiChildrenCount > 0) { throw new System.Exception($"GRoot.inst's children count should be zero, but now it is {guiChildrenCount}"); } // 新建子模块,并添加到子模块列表 var m = new ModuleHub(gameModName, this, monoBehaviour, Boot.instance.gameLuaEnv); subModules.Add(gameModName, m); var envString = launchSubModuleLuaCode; m.Launch(envString, jsonString); }