Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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
C# 确定新连接的播放机是客户端还是服务器播放机(主机),并删除服务器上的消息_C#_Networking_Unity3d_Unity3d Unet - Fatal编程技术网

C# 确定新连接的播放机是客户端还是服务器播放机(主机),并删除服务器上的消息

C# 确定新连接的播放机是客户端还是服务器播放机(主机),并删除服务器上的消息,c#,networking,unity3d,unity3d-unet,C#,Networking,Unity3d,Unity3d Unet,我想确定新连接的播放机是否是客户端,服务器上的播放机(主机)是否删除消息。在UNET中,我希望在LAN上有两名玩家。第一个玩家是服务器玩家,然后他们的对手连接 玩家搜索LAN匹配以加入,如下所示: public void StartPlayerClient() { Debug.Log ("client set up"); discovery.Initialize (); discovery.StartAsClient (); searching = true; }

我想确定新连接的播放机是否是客户端,服务器上的播放机(主机)是否删除消息。在UNET中,我希望在LAN上有两名玩家。第一个玩家是服务器玩家,然后他们的对手连接

玩家搜索LAN匹配以加入,如下所示:

public void StartPlayerClient() {
    Debug.Log ("client set up");
    discovery.Initialize ();
    discovery.StartAsClient ();
    searching = true;
}
一旦找到匹配项,它将按如下方式显示:

void Update() {
    if (searching) {
        if (discovery.broadcastsReceived != null) {
            foreach (var addr in discovery.broadcastsReceived.Keys) {
                var value = discovery.broadcastsReceived [addr];
                //instantiate ui button to connect...
                GameObject ui = Instantiate (GameController.instance.multiplayerMatchConnect) as GameObject;
                ui.GetComponent<ConnectToMatch> ().Initialize (value);
                ui.transform.SetParent (GameController.instance.matchListParent.transform, false);
            }

            if (discovery.broadcastsReceived.Keys.Count > 0) {
                searching = false;
            }
        } else {
            searching = false;
        }
    }
}
在服务器客户端上,在连接前会显示“等待其他玩家”。。当他们这样做时,我希望服务器播放器的消息消失,这是我试图这样做,但它不起作用

//called on the client when connects to the server
public override void OnClientConnect(NetworkConnection conn) {
    if (!discovery.isServer) {
        GameController.instance.pnlMatchList.SetActive (false);
        Debug.Log("you connected");
    }
}

“等待其他玩家”消息是否出现在屏幕上或控制台中?@Hristo消息位于名为pnlWaitingForOtherPlayer的UI面板中(屏幕上也是如此)。。当第二个播放器连接到OnServerConnect时,我将其设置为false,但这就是问题所在。它不会发生,因为第二个播放机连接时NetworkServer.connections.Count不等于2。。。我还尝试注释了>1条件,但它在ServerConnect上没有被调用..:(您能提供调用方法的代码吗?
OnServerConnect
?它是一个覆盖方法。OnServerConnect是Connect()方法的StartClient()的结果)当玩家加入时,会在服务器上调用call cos OnServerConnect。您是否可以确保该方法被调用?例如添加
调试.log
或其他什么?屏幕上或控制台上是否会显示消息
“等待其他玩家”
?@Hristo消息在UI面板中(屏幕上也是如此)调用PnlWaiting for OtherPlayer..当第二个播放机连接到服务器连接时,我将其设置为false,但这就是问题所在。不会发生这种情况,因为当第二个播放机连接时,NetworkServer.connections.Count不等于2…我还尝试注释了>1的条件,但它在服务器连接上没有被调用..:(你能提供调用方法
OnServerConnect
的代码吗?这是一个覆盖方法。OnServerConnect是Connect()方法的StartClient()调用的结果,因为当播放器加入时,OnServerConnect在服务器上被调用。你能确保调用该方法吗?比如添加
调试.log
或其他什么吗?
//called on the server when client connects
public override void OnServerConnect(NetworkConnection conn) {
    if (NetworkServer.connections.Count > 1) {
        GameController.instance.pnlWaitingForOtherPlayer.SetActive (false);
        Debug.Log ("player connected");
        GameController.instance.pnlMatchList.SetActive (false);
        GameController.instance.pnlJoinCreateMenu.SetActive (false);
    }
}
//called on the client when connects to the server
public override void OnClientConnect(NetworkConnection conn) {
    if (!discovery.isServer) {
        GameController.instance.pnlMatchList.SetActive (false);
        Debug.Log("you connected");
    }
}