Я разрабатываю игру только с двумя сценами: Menu и Main. Когда пользователь нажимает кнопку «Play», я загружаю основную сцену и запускаю лобби (если уже существует какое-либо другое лобби, я пытаюсь присоединиться). Но если пользователь вернется в меню, я хочу вообще уничтожить лобби, а игрок на другой стороне должен обработать OnClientDisconnectCallback.
Сейчас ситуация такова - если игрок вернется в меню, ничего не происходит. Если какой-либо из игроков вообще выключит игру, то OnClientDisconnectCallback будет обрабатываться. Как правильно "сбросить лобби" при уходе со сцены Main?
Для мультиплеера использую UGS: Relay и Lobby
Это мой код для инициализации моего LobbyManager:
Синтаксис:
Используется csharp
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();
}
{
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();
}