C# 如何知道Unity网络中客户端和服务器是否相互连接

C# 如何知道Unity网络中客户端和服务器是否相互连接,c#,unity3d,networking,client-server,multiplayer,C#,Unity3d,Networking,Client Server,Multiplayer,在这里,我创建了一个多人游戏与团结网络。我想要的是在服务器和客户端都连接时启动游戏。在我的游戏中,我有两个玩家,一个充当游戏主机的服务器,另一个充当客户端,通过服务器IP地址连接到该主机。因此,当两者都连接好并准备好玩时,我想开始游戏。有人能帮我吗?我怎样才能知道两者是相互联系的 这是我正在使用的代码 public NetworkManager manager; public void startServerr() { NetworkServer.Listen(9000); Netwo

在这里,我创建了一个多人游戏与团结网络。我想要的是在服务器和客户端都连接时启动游戏。在我的游戏中,我有两个玩家,一个充当游戏主机的服务器,另一个充当客户端,通过服务器IP地址连接到该主机。因此,当两者都连接好并准备好玩时,我想开始游戏。有人能帮我吗?我怎样才能知道两者是相互联系的

这是我正在使用的代码

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");
}

首先,我建议您在实际尝试建立连接之前阅读所有关于unity networking的文档。完成后,您应该知道如何处理此请求。如果你不知道,那么这里是如何处理这个特定的请求

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


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

您当前使用的是
NetworkManager
。。。如果希望在需要注册事件的
NetworkServer
NetworkClient
上使用
NetworkManager
,则脚本必须从
NetworkManager
继承

NetworkManager
继承后,可以重写并使用和函数分别检查客户端何时连接到服务器以及服务器何时连接到客户端

以下是一个例子:

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);
    }
}

您可以在public function部分找到更多网络回调函数。

正如我所知,在客户端上启动客户端连接后,会使用network Manager方法。OnServerConnect在服务器上启动。但我想要的是双方都使用一种方法。但我想要的是双方都使用一种方法。当我写答案时,我写的是回答问题的标题和主体中的内容。如果问题不清楚,我会在添加答案之前询问更多细节。我的答案回答了你的问题,即“知道客户端和服务器是否连接”…你可以使用一个简单的布尔变量获取你想要的任何东西。快乐编码!请注意“知道客户端和服务器是否相互连接”这一问题。我提到“有人能帮我怎么知道两者都是连接的”你能把这个放在你的网络生成的预制对象上吗,还是会失败?