@YakutD

Как сбросить лобби при загрузке другой сцены?

Здравствуйте, я работаю над своей первой многопользовательской игрой, так что я совсем новичок в этой теме.

Я разрабатываю игру только с двумя сценами: Menu и Main. Когда пользователь нажимает кнопку «Play», я загружаю основную сцену и запускаю лобби (если уже существует какое-либо другое лобби, я пытаюсь присоединиться). Но если пользователь вернется в меню, я хочу вообще уничтожить лобби, а игрок на другой стороне должен обработать OnClientDisconnectCallback.

Сейчас ситуация такова - если игрок вернется в меню, ничего не происходит. Если какой-либо из игроков вообще выключит игру, то OnClientDisconnectCallback будет обрабатываться. Как правильно "сбросить лобби" при уходе со сцены Main?

Для мультиплеера использую UGS: Relay и Lobby

Это мой код для инициализации моего LobbyManager:

private void Awake()
        {
            if (SceneManager.currentScene == SceneHelper.MENU)
            {
 
                if (NetworkManager.Singleton != null)
                {
                    NetworkManager.Singleton.Shutdown();
                    Destroy(NetworkManager.Singleton.gameObject);
                }
 
                return;
            }
         
            LobbyManager._instance = this;      
        }
        private async void Start()
        {
            if (SceneManager.currentScene != SceneHelper.MAIN)
                return;
 
            // Initialize unity services
            await UnityServices.InitializeAsync();
 
            // Setup events listeners
            this.SetupEvents();
 
            // Unity Login
            await SignInAnonymouslyAsync();
 
            // Subscribe to NetworkManager events
            NetworkManager.Singleton.OnClientConnectedCallback += this.ClientConnected;
            NetworkManager.Singleton.OnClientDisconnectCallback += this.ClientDisconnected;
 
            this.FindMatch();
        }


А это мой код который вызывается когда LobbyManager уничтожается:
private async void OnDestroy()
        {
            // We need to delete the lobby when we're not using it
            Debug.Log("Destroying");
            
            NetworkManager.Singleton.Shutdown();
            
            string playerId = AuthenticationService.Instance.PlayerId;
            await LobbyService.Instance.RemovePlayerAsync(_lobbyId, playerId);
            await Lobbies.Instance.DeleteLobbyAsync(_lobbyId);

            AuthenticationService.Instance.SignOut();
        }


Еще заметил что если быстро выйти в меню и снова нажать кнопку Play то происходит присоединение к лобби от которого только что отключился (хотя оно должно удалиться через await Lobbies.Instance.DeleteLobbyAsync(_lobbyId); )
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы