SceneChangeHelper.cs 1.3 KB

12345678910111213141516171819202122232425262728
  1. namespace ET.Client
  2. {
  3. public static class SceneChangeHelper
  4. {
  5. // 场景切换协程
  6. public static async ETTask SceneChangeTo(Scene clientScene, string sceneName, long sceneInstanceId)
  7. {
  8. clientScene.RemoveComponent<AIComponent>();
  9. CurrentScenesComponent currentScenesComponent = clientScene.GetComponent<CurrentScenesComponent>();
  10. currentScenesComponent.Scene?.Dispose(); // 删除之前的CurrentScene,创建新的
  11. Scene currentScene = SceneFactory.CreateCurrentScene(sceneInstanceId, clientScene.Zone, sceneName, currentScenesComponent);
  12. // 可以订阅这个事件中创建Loading界面
  13. EventSystem.Instance.Publish(clientScene, new EventType.SceneChangeStart());
  14. // 等待CreateMyUnit的消息
  15. Wait_CreateMyUnit waitCreateMyUnit = await clientScene.GetComponent<ObjectWait>().Wait<Wait_CreateMyUnit>();
  16. clientScene.RemoveComponent<AIComponent>();
  17. EventSystem.Instance.Publish(currentScene, new EventType.SceneChangeFinish());
  18. // 通知等待场景切换的协程
  19. clientScene.GetComponent<ObjectWait>().Notify(new Wait_SceneChangeFinish());
  20. }
  21. }
  22. }