Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d UNET:使用ip和端口将客户端连接到主机_Unity3d_Unity3d Unet - Fatal编程技术网

Unity3d UNET:使用ip和端口将客户端连接到主机

Unity3d UNET:使用ip和端口将客户端连接到主机,unity3d,unity3d-unet,Unity3d,Unity3d Unet,我正在尝试使用UNET创建我的第一个多人游戏,其中一个玩家总是托管。我计划进行主机迁移,即使主机离开,也能让游戏继续进行。总的来说,这是个好主意吗 到目前为止,我有一个创建新房间的功能(玩家开始主持房间),如下所示: public void Test_StartHost(){ if (!NetworkClient.active && !NetworkServer.active && manager.matchMaker == null) {

我正在尝试使用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 ();
    }
}
如果两台设备都在同一个Wi-Fi中,则加入游戏即可。如果PC(主机)使用Wi-Fi,Android尝试加入房间(使用移动网络),我总是在15秒后收到超时错误


为什么这只能在同一个Wi-Fi上使用,而不能在不同的互联网连接上使用?

我不是专业人士,所以请随意阅读这篇文章。通常人们建议避开小于5000的港口。它不适用于外部连接,因为您可能需要动态端口转发之类的功能。检查unity3D UPNP或NAT punchthrough等关键字。这不是一个容易的话题。您需要它,因为您的游戏是对等的,您无法控制端口转发、防火墙等。此外,您在执行Test_StartHost()之前是否分配了NetworkManager.networkAddress和networkPort?我不是专业人士,所以请随意阅读。通常人们建议避开小于5000的港口。它不适用于外部连接,因为您可能需要动态端口转发之类的功能。检查unity3D UPNP或NAT punchthrough等关键字。这不是一个容易的话题。您需要它,因为您的游戏是对等的,并且您无法控制端口转发、防火墙等。另外,您在执行Test_StartHost()之前是否分配了NetworkManager.networkAddress和networkPort?
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();
    }
}