我正在尝试使用 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();
}
}
如果两个设备都在同一个 Wi-Fi 中,则可以加入游戏。如果 PC(主机)使用 Wi-Fi 并且 Android 尝试加入房间(使用移动网络),我总是在大约 15 秒后出现超时错误。
为什么这只能在同一个 Wi-Fi 上工作,而不是在不同的互联网连接上工作?