我正在尝试联网一个小型 2 人 Unity 游戏。这是我第一次接触网络,所以请随时纠正我做错的任何事情。我正在尝试制作一个简单的匹配服务,在游戏的主菜单上,玩家可以单击“查找匹配”按钮。这将执行以下函数
private HostData[] hostList;
private const string typeName = "UniqueGameName";
private const string gameName = "RoomName";
public void FindMatch() {
RefreshHostList();
if (hostList != null) {
JoinServer(hostList[0]);
} else {
StartServer();
}
}
这是该函数中调用的相应方法。
private void RefreshHostList()
{
MasterServer.RequestHostList(typeName);
}
void OnMasterServerEvent(MasterServerEvent msEvent)
{
if (msEvent == MasterServerEvent.HostListReceived)
hostList = MasterServer.PollHostList();
}
private void JoinServer(HostData hostData)
{
Network.Connect(hostData);
}
private void StartServer()
{
Network.InitializeServer(2, 25000, !Network.HavePublicAddress());
MasterServer.RegisterHost(typeName, gameName);
}
这个想法是,当玩家点击 Find Match 时,它会刷新主机列表。如果它找到一个主机,它将加入他们的服务器并开始匹配。如果没有,它将启动自己的服务器并等待另一个玩家。测试时,第一个点击 Find Match 的玩家能够启动服务器,但随后第二个玩家收到错误消息“...监听端口是否已在使用中?”。当我调试并逐步执行我的程序时,第二个玩家的 hostList 始终为空,即使第一个玩家成功创建和注册了服务器。