Exemple #1
0
        //游戏过程中切换场景 向服务器请求场景切换
        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 ");
            }
        }
Exemple #2
0
        /// <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());
        }
Exemple #3
0
        //游戏过程中切换场景 向服务器请求场景切换
        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 ");
             *          }
             */
        }
Exemple #4
0
        //执行进入场景的代码逻辑
        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());
        }