2016-04-08 3 views
1

Ich möchte bestimmte Informationen für die Zeichen des Servers und die Zeichen des Clients zuweisen. Woher weiß ich nun, ob der Player der Host oder der Client ist? Ich versuchte mit isServer und isClient, aber es beide True zurückgegeben. Sind das die richtigen Schlüsselwörter, die ich verwenden sollte?Ermitteln, ob der Player der Host oder der Client ist

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

     if(isClient){ 
      Debug.Log("I'm the client"); 
     } 
} 
+0

erbt Ihre Klasse von NetworkBehaviour? – marsh

+0

Ja, erbt von NetworkBehaviour. – kmf

Antwort

2

Statt isClient verwenden, um zu bestimmen, wenn der Spieler den Client ist, verwende ich !isServer statt.

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

     if(!isServer){ 
      Debug.Log("I'm the client"); 
     } 
} 
1

Wenn Sie als „host“ sich verbinden, sind Sie eigentlich sowohl der „Client“ und „Server“ zur gleichen Zeit. Dies steht im Gegensatz zur Ausführung eines "dedizierten Servers", der als Serverberechtigung fungiert, aber keine "Client" -Verbindung darstellt. Wie Sie in Ihre eigene Antwort vorschlagen, können Sie isServer und !isServer oder wahrscheinlich verwenden:

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

Nicht sicher, ob dies für jede Situation gilt, so dass ich entschuldige mich, wenn es nicht der Fall ist - ich ein Plugin verwende genannt NATTraversal für Einheit, und ich hatte ein ähnliches Problem. Ich musste herausfinden, welche Verbindung der Host ist. Aber für mich, da ich nicht den Relay-Server verwendet (dies ist für euch, die das Relais sind zu vermeiden) fand ich, dass ich diese Prüfung tun ..

using UnityEngine.Networking; 

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

Das in meinem Szenario funktioniert, weil die Client-Verbindung Liste ist leer, aber der Host ist nicht. Es kann sehr gut einen besseren Weg geben, dies zu tun, aber ich wusste von einem ohne eine vorhergebaute Liste von NetworkIdentity's nicht.

Das Network.isServer Bool gibt immer für mich false zurück, also habe ich es so verstanden. Hoffentlich hilft es jemandem da draußen.

Edit: (Hinzufügen wichtiger Informationen) Bitte beachten Sie, dass dies nach Matchmaking und Verbindungen hergestellt worden sind.

Eine andere Möglichkeit, die ich gefunden habe, ist durch OnServerConnect im NATLobbyManager zu hören.

public override void OnServerConnect(NetworkConnection conn){ } 

Das Ereignis löst nur für den Host mit dem NATTraversal Plugin, weiteren Informationen für jeden, der über diese während kommen kann versuchen, all diese Dinge zu verstehen. :)

Verwandte Themen