如何知道客户端和服务器在Unity Networking中是否相互连接

时间:2017-09-08 07:19:16

标签: c# unity3d networking client-server multiplayer

我在这里用Unity Networking创建一个多人游戏。我想要的是在连接服务器和客户端时启动游戏。在我的游戏中,我有2个玩家,一个将充当托管游戏的服务器,另一个充当客户端,使用服务器IPAddress连接到该主机。因此,当两者都连接并准备好发挥时,我想开始游戏。任何人都可以帮助我如何才能知道两者是否相关。

以下是我正在使用的代码。

public NetworkManager manager;

public void startServerr()
{
NetworkServer.Listen(9000);
    NetworkServer.RegisterHandler(MsgType.Connect, OnConnected);
    NetworkServer.RegisterHandler(MsgType.Disconnect, OnDisconnected);
    NetworkServer.RegisterHandler(MsgType.Error, OnError);
    manager.StartHost();
}

public void connectToServer()
{
    manager.networkAddress = PlayerPrefs.GetString("oppPlayerIP");
    manager.StartClient();
}

public void OnConnected(NetworkMessage netMsg)
{
    Debug.Log("Client Connected");
}

public void OnDisconnected(NetworkMessage netMsg)
{
    Debug.Log("Disconnected");
}

public void OnError(NetworkMessage netMsg)
{
    Debug.Log("Error while connecting");
}

2 个答案:

答案 0 :(得分:2)

您目前正在使用NetworkManager ...如果您希望使用NetworkManager而非NetworkServerNetworkClient需要manual注册事件,那么您的脚本必须从NetworkManager继承。

NetworkManager继承之后,您可以覆盖并使用OnClientConnectOnServerConnect函数来检查客户端何时连接到服务器以及服务器何时连接到客户端。

以下是一个例子:

public class NetTest : NetworkManager
{
    private NetworkManager manager;

    public void startServerr()
    {
        manager = this;
        manager.StartHost();
    }

    public void connectToServer()
    {
        //manager.networkAddress = PlayerPrefs.GetString("oppPlayerIP");
        manager.StartClient();
    }

    public override void OnClientConnect(NetworkConnection conn)
    {
        //base.OnClientConnect(conn);
    }

    public override void OnClientDisconnect(NetworkConnection conn)
    {
        //base.OnClientDisconnect(conn);
    }
    public override void OnServerConnect(NetworkConnection conn)
    {
        //base.OnServerConnect(conn);
    }

    public override void OnServerDisconnect(NetworkConnection conn)
    {
        //base.OnServerDisconnect(conn);
    }
}

您可以在公共功能部分here中找到更多网络回调函数。

答案 1 :(得分:0)

首先,我建议您在实际尝试建立连接之前阅读有关统一网络的所有文档。完成后,您应该知道如何处理此请求。如果您当时不知道如何处理此特定请求。

首先,您需要让服务器使用 OnConnected(NetworkMessage netMsg)方法处理所有传入连接。 您应该能够识别连接到服务器的各个播放器。 现在,您只需创建一个就绪按钮,并在单击时向服务器发送就绪状态。如果每个连接的玩家都向服务器发送了他的isReady消息,则可以启动游戏。这是通过从服务器向所有连接的客户端发送消息来完成的。

希望这有帮助,任何问题都可以问。