我想为服务器的字符以及客户端的字符分配特定信息。现在,我怎么知道玩家是主持人还是客户?我尝试使用 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()
答案 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插件的主机,更多信息可供任何人在尝试计算所有这些内容时遇到此问题。 :)