//游戏过程中切换场景 向服务器请求场景切换 public IEnumerator ChangeScene(int sceneId, bool isRelive) { Log.Sys("ChangeEnterNextScene " + sceneId); nextSceneId = sceneId; var sdata = CopyController.copyController.GetLevelInfo(nextSceneId); BackgroundSound.Instance.PlaySound(sdata.background); station = isRelive ? WorldStation.Relive : WorldStation.AskChangeScene; //先显示加载界面,首先加载网络资源接着加载静态资源 loadUI = WindowMng.windowMng.PushView("UI/loading").GetComponent <LoadingUI>(); //再去清理UI 层深度信息 MyEventSystem.myEventSystem.PushEvent(MyEvent.EventType.ChangeScene); Log.Net("EnterScene Process"); CGEnterScene.Builder es = CGEnterScene.CreateBuilder(); es.Id = sceneId; var packet = new KBEngine.PacketHolder(); yield return(StartCoroutine(KBEngine.Bundle.sendSimple(this, es, packet))); if (packet.packet.responseFlag == 0) { station = WorldStation.Entering; yield return(StartCoroutine(EnterScene(packet.packet.protoBody as GCEnterScene))); } else { Debug.LogError("ChangeScene Error "); } }
/// <summary> /// 编辑器测试用的进入场景的初始化流程 /// </summary> public IEnumerator TestInitScene() { var sdata = CopyController.copyController.GetLevelInfo(3); sdata.isCity = false; //activeScene = new CScene(sdata); activeScene = CScene.CreateScene(sdata); if (CameraController.cameraController == null) { Log.Sys("CreateMainCamera"); var mc = Resources.Load <GameObject> ("levelPublic/MainCamera"); //var m = Instantiate(mc); // as GameObject; //var lightMapCamera = Instantiate(Resources.Load <GameObject> ("LightCamera")); // as GameObject; } Log.Sys("MainCamera"); MyEventSystem.myEventSystem.PushEvent(MyEvent.EventType.EnterScene); yield return(null); var g = new GameObject("StreamLoadLevel"); var loader = g.AddComponent <StreamLoadLevel>(); var water = g.AddComponent <WaterEnvLoader>(); yield return(loader.StartCoroutine(loader.LoadFirstRoom())); var start = GameObject.Find("PlayerStart"); CameraController.cameraController.TracePositon(start.transform.position); CreateMyPlayer(); //Start Generate Monster station = WorldStation.Enter; NetDebug.netDebug.AddConsole("Init Player Over Next"); CreateUI(); //场景其它初始化交给LevelInit NetDebug.netDebug.AddConsole("WorldManager:: InitLevel"); CreateLevelInit(); NetDebug.netDebug.AddConsole("Init World Finish"); loader.StartCoroutine(loader.LoadRoomNeibor()); }
//游戏过程中切换场景 向服务器请求场景切换 public IEnumerator ChangeScene(int sceneId, bool isRelive) { Log.Sys("ChangeEnterNextScene " + sceneId); nextSceneId = sceneId; var sdata = CopyController.copyController.GetLevelInfo(nextSceneId); Log.Sys("backSound: " + sdata.background); BackgroundSound.Instance.PlaySound(sdata.background, sdata.volume / 100.0f); GameObject.Destroy(audios); if (!string.IsNullOrEmpty(sdata.noise)) { audios = BackgroundSound.Instance.PlayEffectLoop(sdata.noise, sdata.noiseVolume / 100.0f); audios.Play(); } station = isRelive ? WorldStation.Relive : WorldStation.AskChangeScene; //先显示加载界面,首先加载网络资源接着加载静态资源 loadUI = WindowMng.windowMng.PushView("UI/loading").GetComponent <LoadingUI>(); //再去清理UI 层深度信息 MyEventSystem.myEventSystem.PushEvent(MyEvent.EventType.ChangeScene); Log.Net("EnterScene Process"); /* * CGEnterScene.Builder es = CGEnterScene.CreateBuilder (); * es.Id = sceneId; * var packet = new KBEngine.PacketHolder (); * yield return StartCoroutine (KBEngine.Bundle.sendSimple(this, es, packet)); */ yield return(null); station = WorldStation.Entering; //yield return StartCoroutine(EnterScene(packet.packet.protoBody as GCEnterScene)); yield return(StartCoroutine(EnterScene(null))); /* * if (packet.packet.responseFlag == 0) { * } else { * Debug.LogError("ChangeScene Error "); * } */ }
//执行进入场景的代码逻辑 IEnumerator EnterScene(GCEnterScene sceneData) { Log.Sys("EnterNextScene is " + nextSceneId); var sdata = CopyController.copyController.GetLevelInfo(nextSceneId); //删除旧的场景中的玩家数据 if (activeScene != null) { activeScene.LeaveScene(); GameObject.Destroy(activeScene.gameObject); } activeScene = CScene.CreateScene(sdata); activeScene.Init(); activeScene.EnterScene(); //Init Camera NetDebug.netDebug.AddConsole("初始化照相机需要等待一frame"); NetDebug.netDebug.AddConsole("Load Scene Name is " + sdata.SceneName); //等待加载静态场景资源 AsyncOperation async = Application.LoadLevelAsync(sdata.SceneName); loadUI.async = async; loadUI.ShowLoad(sdata.SceneName); while (!async.isDone) { yield return(null); } //InitCamera After Load Scene //Scene Load Finish Then Load MainCamera if (CameraController.cameraController == null) { Log.Sys("CreateMainCamera"); var mc = Resources.Load <GameObject> ("levelPublic/MainCamera"); //var m = Instantiate(mc); // as GameObject; //var lightMapCamera = Instantiate (Resources.Load<GameObject> ("levelPublic/lightMapCamera")) as GameObject; //var lightMapCamera = Instantiate(Resources.Load <GameObject> ("LightCamera"));// as GameObject; } if (BattleManager.battleManager == null) { var g = new GameObject("BattleManager"); g.AddComponent <BattleManager>(); } { var g = new GameObject("NpcManager"); g.AddComponent <NpcManager>(); } activeScene.ManagerInitOver(); Log.Sys("Cameramain " + Camera.main); MyEventSystem.myEventSystem.PushEvent(MyEvent.EventType.EnterScene); //正在进入一个场景 yield return(null); var g1 = new GameObject("StreamLoadLevel"); var loader = g1.AddComponent <StreamLoadLevel>(); var water = g1.AddComponent <WaterEnvLoader>(); yield return(StartCoroutine(loader.LoadFirstRoom())); var start = GameObject.Find("PlayerStart"); CameraController.cameraController.TracePositon(start.transform.position); NetDebug.netDebug.AddConsole("LoadScene Finish start Init UI"); CreateUI(); NetDebug.netDebug.AddConsole("CreateMyPlayer"); //场景传送点 CreateMyPlayer(); //load Success //loadUI.Hide (null); NetDebug.netDebug.AddConsole("Init Player Over Next"); station = WorldStation.Enter; //场景其它初始化交给LevelInit NetDebug.netDebug.AddConsole("WorldManager:: InitLevel"); CreateLevelInit(); //初始化缓存的场景玩家 ObjectManager.objectManager.InitCache(); NetDebug.netDebug.AddConsole("Init World Finish"); StartCoroutine(loader.LoadRoomNeibor()); }