我试图使用UNET创建我的第一个多人游戏,其中一个玩家总是在托管。我计划进行主机迁移,以便即使主机离开也能继续游戏。这一般是一个好主意吗?
到目前为止,我有一个创建新房间的功能(玩家开始主持房间),如下所示:
public void Test_StartHost(){
if (!NetworkClient.active && !NetworkServer.active && manager.matchMaker == null)
{
string ip = Network.player.ipAddress.Replace (".", "|");
string port = Network.player.port.ToString();
db.save(ip + "<<" + port);
NetworkManager.StartHost ();
}
}
这是经过测试和运行的(主机游戏启动,数据库接收数据)。我已在Android和PC上测试过托管。两个设备都向数据库发送不同的IP( xxx.xxx.xx.xxx )但相同的端口 0 。端口 0 可以正确吗?
接下来发生的事情是另一个玩家试图加入游戏作为客户端。为此,我有这个代码:
public void Play()
{
if (!NetworkClient.active && !NetworkServer.active && manager.matchMaker == null)
{
string hostIP = database.get("hostIP"); // xxx.xxx.xx.xxx
int hostPort = int.Parse(database.get("hostPort")); // 0
Debug.Log("Trying to join IP " + hostIP + " as a client. Listening to port " + hostPort + ".");
// prints "Trying to join IP xxx.xxx.xx.xxx as a client. Listening to port 0.
NetworkManager.networkAddress = hostIP;
//NetworkManager.networkPort = hostPort;
NetworkManager.StartClient();
}
}
加入游戏 IF 两个设备都在同一个Wi-Fi中。如果PC(主机)使用Wi-Fi并且Android尝试加入房间(使用移动网络),我总是会在~15秒后收到超时错误。
为什么这只适用于相同的Wi-Fi,而不是通过不同的互联网连接?