- Home /
Question by
xVishera · Aug 22, 2018 at 03:29 PM ·
matchmaking
UNet MatchMaker only works on LAN
Hi all!
I'm currently following one tutorial from Brackeys that use HLAPI from UNET, its the Multiplayer FPS Tutorial.
At some point, we implement a RoomList script and a Join system.
It works perfectly at LAN, but when I send it to someone on the internet, I can't see the room who their created.
Here is the code from JoinGame script.
The response callBack is successed, but the list is empty. I can't see rooms created from people outside my network lan. Any ideas ?
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using UnityEngine.Networking.Match;
using System;
public class JoinGame : MonoBehaviour
{
List<GameObject> roomList = new List<GameObject>();
[SerializeField] GameObject roomListItemPrefab;
[SerializeField] Transform roomListParent;
[SerializeField] Text status;
private NetworkManager networkManager;
void Start()
{
networkManager = NetworkManager.singleton;
if (networkManager.matchMaker == null)
{
networkManager.StartMatchMaker();
}
RefreshRoomList();
}
public void RefreshRoomList()
{
ClearRoomList();
networkManager.matchMaker.ListMatches(0, 20, "", false, 0, 0, OnMatchList);
status.text = "Loading...";
}
public void OnMatchList(bool success, string extendedInfo, List<MatchInfoSnapshot> responseData)
{
status.text = "";
if (!success)
{
status.text = "Couldn't get room list";
return;
}
responseData.ForEach(match =>
{
GameObject _roomListItemGO = Instantiate(roomListItemPrefab);
_roomListItemGO.transform.SetParent(roomListParent);
RoomListItem _roomListItem = _roomListItemGO.GetComponent<RoomListItem>();
if (_roomListItem != null)
{
_roomListItem.Setup(match, JoinRoom);
}
//as well as setting up a callback function that will join the game
roomList.Add(_roomListItemGO);
});
if (roomList.Count == 0)
{
status.text = "No rooms at the moment";
}
}
public void JoinRoom(MatchInfoSnapshot _match)
{
Debug.Log($"Joining {_match.name}");
networkManager.matchMaker.JoinMatch(_match.networkId, "", "", "", 0, 0, networkManager.OnMatchJoined);
ClearRoomList();
status.text = $"Joining {_match.name}...";
}
private void ClearRoomList()
{
roomList.ForEach(item =>
{
Destroy(item);
});
roomList.Clear();
}
}
Comment