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. :)
erbt Ihre Klasse von NetworkBehaviour? – marsh
Ja, erbt von NetworkBehaviour. – kmf