LSSceneChangeHelper.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. namespace ET.Client
  2. {
  3. public static class LSSceneChangeHelper
  4. {
  5. // 场景切换协程
  6. public static async ETTask SceneChangeTo(Scene clientScene, string sceneName, long sceneInstanceId)
  7. {
  8. clientScene.RemoveComponent<Room>();
  9. Room room = clientScene.AddComponent<Room>();
  10. room.Name = sceneName;
  11. // 等待表现层订阅的事件完成
  12. await EventSystem.Instance.PublishAsync(clientScene, new EventType.LockStepSceneChangeStart());
  13. clientScene.GetComponent<SessionComponent>().Session.Send(new C2Room_ChangeSceneFinish());
  14. // 等待Room2C_EnterMap消息
  15. WaitType.Wait_Room2C_Start waitRoom2CStart = await clientScene.GetComponent<ObjectWait>().Wait<WaitType.Wait_Room2C_Start>();
  16. LSWorld lsWorld = new(SceneType.LockStepClient);
  17. room.AddComponent(lsWorld);
  18. room.Init(waitRoom2CStart.Message);
  19. room.AddComponent<RoomClientUpdater>();
  20. // 这个事件中可以订阅取消loading
  21. EventSystem.Instance.Publish(clientScene, new EventType.LockStepSceneInitFinish());
  22. }
  23. }
  24. }