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

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

Я разрабатываю игру только с двумя сценами: 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))


Ответы (0 шт):