SceneChangeHelper.cs 1.5 KB

12345678910111213141516171819202122232425262728293031
  1. using GFGGame;
  2. using static UnityEngine.UI.CanvasScaler;
  3. namespace ET
  4. {
  5. public static class SceneChangeHelper
  6. {
  7. // 场景切换协程
  8. public static async ETTask SceneChangeTo(Scene zoneScene, string sceneName, long sceneInstanceId)
  9. {
  10. CurrentScenesComponent currentScenesComponent = zoneScene.GetComponent<CurrentScenesComponent>();
  11. currentScenesComponent.Scene?.Dispose(); // 删除之前的CurrentScene,创建新的
  12. Scene currentScene = SceneFactory.CreateCurrentScene(sceneInstanceId, zoneScene.Zone, sceneName, currentScenesComponent);
  13. UnitComponent unitComponent = currentScene.AddComponent<UnitComponent>();
  14. // 可以订阅这个事件中创建Loading界面
  15. //Game.EventSystem.Publish(new EventType.SceneChangeStart() { ZoneScene = zoneScene });
  16. // 等待CreateMyUnit的消息
  17. WaitType.Wait_CreateMyUnit waitCreateMyUnit = await zoneScene.GetComponent<ObjectWait>().Wait<WaitType.Wait_CreateMyUnit>();
  18. M2C_CreateMyUnit m2CCreateMyUnit = waitCreateMyUnit.Message;
  19. Unit unit = UnitFactory.Create(currentScene, m2CCreateMyUnit.Unit);
  20. unitComponent.Add(unit);
  21. GameGlobal.myUnit = unit;
  22. GameGlobal.myNumericComponent = unit.GetComponent<NumericComponent>();
  23. // 通知等待场景切换的协程
  24. zoneScene.GetComponent<ObjectWait>().Notify(new WaitType.Wait_SceneChangeFinish());
  25. }
  26. }
  27. }