确定玩家是主持人还是客户端

时间:2016-04-08 21:20:56

标签: networking unity3d multiplayer

我想为服务器的字符以及客户端的字符分配特定信息。现在,我怎么知道玩家是主持人还是客户?我尝试使用 isServer isClient ,但它们都返回true。这些是我应该使用的正确关键字吗?

query = ("INSERT INTO Movies" "(movie_id,movie_name,movie_year,duration,score,storyline,genre,poster)" 
    "VALUES (%(ID)s,%(name)s,%(year)s,%(runtime)s,%(rating)s,%(storyline)s,%(genre)s,%(links)s)")   #args = (ID,name,year,runtime,rating,storyline,genre,links) 
cursor.execute(query)
con.commit()

3 个答案:

答案 0 :(得分:2)

我没有使用!isServer来判断玩家是否是客户,而是使用void Update () { if(isServer){ Debug.Log("I'm the server"); } if(!isServer){ Debug.Log("I'm the client"); } } 代替。

int a[10]

答案 1 :(得分:2)

如果您要作为"主机"进行连接,那么您实际上 "客户端"和"服务器"同时。这与运行"专用服务器"相反,后者充当服务器权限,但不代表客户端"连接。就像您在自己的回答中建议的那样,您可以使用isServer!isServer,或者可能使用:

void Update() {
    if (isServer) {
        Debug.Log("I'm the server (or host)");
    } else {
        Debug.Log("I'm the client");
    }
}

答案 2 :(得分:0)

不确定这是否适用于所有情况,所以我道歉,如果不是 - 我使用的是一个名为NATTraversal for Unity的插件,我遇到了类似的问题。我需要找到哪个连接是主机。但对我来说,由于我没有使用中继服务器(这是为了那些正在避开中继的人),我发现我可以做这个检查..

using UnityEngine.Networking;

void Start(){
    if(NetworkServer.connections.Count > 0){
        Debug.Log("This is the host.");
    } else {
        Debug.Log("This is a client.");
    }
}

这适用于我的场景,因为客户端的连接列表为空,但主机不是。很可能有更好的方法可以做到这一点,但我不知道没有先前构建的NetworkIdentity列表的那个。

Network.isServer bool总是为我返回false,所以我就是这样做的。希望它可以帮助那里的人。

编辑:(添加重要信息) 请注意,这是在配对之后并建立了连接。

我发现的另一种方法是通过在NATLobbyManager中监听OnServerConnect。

public override void OnServerConnect(NetworkConnection conn){ }

该事件仅触发具有NATTraversal插件的主机,更多信息可供任何人在尝试计算所有这些内容时遇到此问题。 :)