Когда игрок выходит из лобби с помощью кнопки выхода из лобби, он удаляется из лобби, и к нему могут присоединиться новые игроки. но когда игрок уходит с помощью alt f4, лобби все равно думает, что лобби заполнено. Как я могу это исправить?
Сервер может видеть, когда игрок отключается, и я пытаюсь удалить его.
public void StartHost()
{
NetworkManager.Singleton.ConnectionApprovalCallback += NetworkManager_ConnectionApprovalCallback;
NetworkManager.Singleton.OnClientDisconnectCallback += NetworkManager_Server_OnClientDisconnectCallback; ;
NetworkManager.Singleton.StartHost();
}
private void NetworkManager_Server_OnClientDisconnectCallback(ulong clientId)
{
if (IsServer)
{
// Log the disconnection
Debug.Log($"ONMUILTIPLAYERMANAGER Client {clientId} disconnected.");
// Update the lobby by removing the player
GameLobby.Instance?.DisconnectPlayer(clientId.ToString());
// Optionally handle any cleanup like respawning or managing game state.
}
}
private void NetworkManager_ConnectionApprovalCallback(NetworkManager.ConnectionApprovalRequest connectionApprovalRequest, NetworkManager.ConnectionApprovalResponse connectionApprovalResponse)
{
connectionApprovalResponse.Approved = true;
}
Я также пробовал обновить слоты в лобби, но ничего не помогло.
public async void DisconnectPlayer(string playerId)
{
try
{
if (joinedLobby != null)
{
// First, check if the player exists in the lobby
var player = joinedLobby.Players.Find(p => p.Id == playerId);
if (player != null)
{
// Attempt to remove the player from the lobby
await LobbyService.Instance.RemovePlayerAsync(joinedLobby.Id, playerId);
Debug.Log($"Player {playerId} successfully removed from lobby.");
}
else
{
Debug.Log($"Player {playerId} not found in the lobby.");
}
// Force update the lobby slots after the player leaves
await UpdateLobbySlots();
// Optionally, refresh the lobby state
joinedLobby = await LobbyService.Instance.GetLobbyAsync(joinedLobby.Id);
Debug.Log("Lobby slots updated after player disconnection.");
}
}
catch (LobbyServiceException e)
{
Debug.LogError($"Failed to remove player {playerId}: {e.Message}");
}
}
private async Task UpdateLobbySlots()
{
try
{
// Force update lobby data to reflect the correct available slots
await LobbyService.Instance.UpdateLobbyAsync(joinedLobby.Id, new UpdateLobbyOptions
{
Data = new Dictionary
{
{ "availableSlots", new DataObject(DataObject.VisibilityOptions.Public, (MultiplayerManager.MAX_PLAYER_AMOUNT - joinedLobby.Players.Count).ToString()) }
}
});
Debug.Log("Lobby slots successfully updated.");
Debug.Log(joinedLobby.Players.Count);
}
catch (LobbyServiceException e)
{
Debug.LogError($"Failed to update lobby slots: {e.Message}");
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ith-alt-f4
Unity Player не удаляется из лобби при выходе с помощью alt f4 ⇐ C#
Место общения программистов C#
-
Anonymous
1727616144
Anonymous
Когда игрок выходит из лобби с помощью кнопки выхода из лобби, он удаляется из лобби, и к нему могут присоединиться новые игроки. но когда игрок уходит с помощью alt f4, лобби все равно думает, что лобби заполнено. Как я могу это исправить?
Сервер может видеть, когда игрок отключается, и я пытаюсь удалить его.
public void StartHost()
{
NetworkManager.Singleton.ConnectionApprovalCallback += NetworkManager_ConnectionApprovalCallback;
NetworkManager.Singleton.OnClientDisconnectCallback += NetworkManager_Server_OnClientDisconnectCallback; ;
NetworkManager.Singleton.StartHost();
}
private void NetworkManager_Server_OnClientDisconnectCallback(ulong clientId)
{
if (IsServer)
{
// Log the disconnection
Debug.Log($"ONMUILTIPLAYERMANAGER Client {clientId} disconnected.");
// Update the lobby by removing the player
GameLobby.Instance?.DisconnectPlayer(clientId.ToString());
// Optionally handle any cleanup like respawning or managing game state.
}
}
private void NetworkManager_ConnectionApprovalCallback(NetworkManager.ConnectionApprovalRequest connectionApprovalRequest, NetworkManager.ConnectionApprovalResponse connectionApprovalResponse)
{
connectionApprovalResponse.Approved = true;
}
Я также пробовал обновить слоты в лобби, но ничего не помогло.
public async void DisconnectPlayer(string playerId)
{
try
{
if (joinedLobby != null)
{
// First, check if the player exists in the lobby
var player = joinedLobby.Players.Find(p => p.Id == playerId);
if (player != null)
{
// Attempt to remove the player from the lobby
await LobbyService.Instance.RemovePlayerAsync(joinedLobby.Id, playerId);
Debug.Log($"Player {playerId} successfully removed from lobby.");
}
else
{
Debug.Log($"Player {playerId} not found in the lobby.");
}
// Force update the lobby slots after the player leaves
await UpdateLobbySlots();
// Optionally, refresh the lobby state
joinedLobby = await LobbyService.Instance.GetLobbyAsync(joinedLobby.Id);
Debug.Log("Lobby slots updated after player disconnection.");
}
}
catch (LobbyServiceException e)
{
Debug.LogError($"Failed to remove player {playerId}: {e.Message}");
}
}
private async Task UpdateLobbySlots()
{
try
{
// Force update lobby data to reflect the correct available slots
await LobbyService.Instance.UpdateLobbyAsync(joinedLobby.Id, new UpdateLobbyOptions
{
Data = new Dictionary
{
{ "availableSlots", new DataObject(DataObject.VisibilityOptions.Public, (MultiplayerManager.MAX_PLAYER_AMOUNT - joinedLobby.Players.Count).ToString()) }
}
});
Debug.Log("Lobby slots successfully updated.");
Debug.Log(joinedLobby.Players.Count);
}
catch (LobbyServiceException e)
{
Debug.LogError($"Failed to update lobby slots: {e.Message}");
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79036484/unity-player-isnt-removed-from-lobby-when-exiting-with-alt-f4[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия