UNET:使用ip和端口

时间:2017-07-08 19:55:15

标签: unity3d unity3d-unet

我试图使用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,而不是通过不同的互联网连接?

0 个答案:

没有答案