Hi,
I followed the series until now and everything worked great. But if a host creates a new lobby, a client can join him with a code (so the lobby is there), but you cant see it in the lobbies tab. The prefab and the parent is assigned, but there is no lobby in lobbies. I also dont get an error and everything seems fine. Can someone help me? Here are the scripts:
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.Services.Lobbies;
using Unity.Services.Lobbies.Models;
using UnityEngine;
public class LobbiesList : MonoBehaviour
{
[SerializeField]
private Transform lobbyItemParent;
[SerializeField]
private LobbyItem lobbyItemPrefab;
private bool isJoining;
private bool isRefreshing;
private void OnEnable()
{
RefreshList();
}
public async void RefreshList()
{
if (isRefreshing) { return; }
isRefreshing = true;
try
{
QueryLobbiesOptions options = new QueryLobbiesOptions();
options.Count = 25; // Number of max lobbies shown
options.Filters = new List<QueryFilter>()
{
new QueryFilter(
field: QueryFilter.FieldOptions.AvailableSlots,
op: QueryFilter.OpOptions.GT,
value: "0"),
new QueryFilter(
field: QueryFilter.FieldOptions.IsLocked,
op: QueryFilter.OpOptions.EQ,
value: "0")
};
QueryResponse lobbies = await Lobbies.Instance.QueryLobbiesAsync(options);
foreach(Transform child in lobbyItemParent)
{
Destroy(child.gameObject);
}
foreach(Lobby lobby in lobbies.Results)
{
LobbyItem lobbyItem = Instantiate(lobbyItemPrefab, lobbyItemParent);
lobbyItem.Initialize(this, lobby);
}
Debug.Log("Succesfully refreshed list");
}
catch (LobbyServiceException ex)
{
Debug.LogError(ex);
}
isRefreshing = false;
}
public async void JoinAsync(Lobby lobby)
{
if (isJoining) { return; }
isJoining = true;
try
{
Lobby joiningLobby = await Lobbies.Instance.JoinLobbyByIdAsync(lobby.Id);
string joinCode = joiningLobby.Data["JoinCode"].Value;
await ClientSingleton.Instance.GameManager.StartClientAsync(joinCode);
}
catch (Exception ex)
{
Debug.LogError(ex);
}
isJoining = false;
}
}
/
public class LobbyItem : MonoBehaviour
{
[SerializeField]
private TMP_Text lobbyNameText;
[SerializeField]
private TMP_Text lobbyPlayersText;
private LobbiesList lobbiesList;
private Lobby lobby;
public void Initialize(LobbiesList lobbiesList, Lobby lobby)
{
this.lobbiesList = lobbiesList;
this.lobby = lobby;
lobbyNameText.text = lobby.Name;
lobbyPlayersText.text = $"{lobby.Players.Count}/{lobby.MaxPlayers}";
}
public void Join()
{
lobbiesList.JoinAsync(lobby);
}
}
/
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using Unity.Services.Core;
using UnityEngine.SceneManagement;
using UnityEngine;
using System;
using Unity.Services.Relay.Models;
using Unity.Services.Relay;
using Unity.Netcode.Transports.UTP;
using Unity.Netcode;
using Unity.Networking.Transport.Relay;
public class ClientGameManager
{
private JoinAllocation allocation;
private const string MenuSceneName = "MainMenu";
public async Task<bool> InitAsync()
{
await UnityServices.InitializeAsync();
AuthState authState = await AuthenticationWrapper.DoAuth();
if (authState == AuthState.Authenticated)
{
return true;
}
return false;
}
public void GoToMenu()
{
SceneManager.LoadScene(MenuSceneName);
}
public async Task StartClientAsync(string joinCode)
{
try
{
allocation = await Relay.Instance.JoinAllocationAsync(joinCode);
}
catch (Exception ex)
{
Debug.LogError(ex);
return;
}
UnityTransport transport = NetworkManager.Singleton.GetComponent<UnityTransport>();
RelayServerData relayServerData = new RelayServerData(allocation, "dtls");
transport.SetRelayServerData(relayServerData);
NetworkManager.Singleton.StartClient();
}
}
/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using Unity.Services.Relay;
using Unity.Services.Relay.Models;
using Unity.Netcode;
using Unity.Netcode.Transports.UTP;
using Unity.Networking.Transport.Relay;
using UnityEngine;
using UnityEngine.SceneManagement;
public class HostGameManager
{
private Allocation allocation;
private string joinCode;
private const int MaxConnections = 4;
private const string gameSceneName = "SampleScene";
public async Task StartHostAsync()
{
try
{
allocation = await Relay.Instance.CreateAllocationAsync(MaxConnections);
}
catch (Exception ex)
{
Debug.LogError(ex);
return;
}
try
{
joinCode = await Relay.Instance.GetJoinCodeAsync(allocation.AllocationId);
Debug.Log(joinCode);
}
catch (Exception ex)
{
Debug.LogError(ex);
return;
}
UnityTransport transport = NetworkManager.Singleton.GetComponent<UnityTransport>();
RelayServerData relayServerData = new RelayServerData(allocation, "dtls");
transport.SetRelayServerData(relayServerData);
NetworkManager.Singleton.StartHost();
NetworkManager.Singleton.SceneManager.LoadScene(gameSceneName, LoadSceneMode.Single);
Debug.Log("Sucessfully created lobby");
}
}
/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class MainMenu : MonoBehaviour
{
[SerializeField]
private TMP_InputField joinCodeField;
public async void StartHost()
{
await HostSingleton.Instance.GameManager.StartHostAsync();
}
public async void StartCient()
{
await ClientSingleton.Instance.GameManager.StartClientAsync(joinCodeField.text);
}
}