SceneChangeHelper.cs 1.6 KB

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