我正在尝试联网一款小型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始终为空,即使第一个玩家成功创建和注册服务器也是如此。
答案 0 :(得分:3)
您是否在同一台计算机上使用这两个应用实例?如果您占用网络端口一次,则无法在同一台计算机上的同一端口上初始化服务器。
一般情况下,我建议您根据自己的需要调查SingalR技术,它使用websockets。