Не уверен, если это относится к любой ситуации, поэтому я прошу прощения, если нет - я использую плагин называется NATTraversal для Единство, и у меня была аналогичная проблема. Мне нужно было найти, какое соединение является хостом. Однако для меня, так как я не использую серверы ретрансляции (это для вас, ребята, которые избегают реле) я обнаружил, что я могу сделать, это проверить ..
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 для меня, так что я так и обошел его. Надеюсь, это поможет кому-то.
Редактировать: (Добавление важной информации) Обратите внимание, что это ПОСЛЕ СОГЛАСОВАНИЯ и установления соединений.
Другой способ сделать это Я нашел, слушая OnServerConnect в NATLobbyManager.
public override void OnServerConnect(NetworkConnection conn){ }
Это событие вызывает только для хоста с плагином NATTraversal, больше информации для тех, кто может прийти через это в то время, чтобы понять все эти вещи из. :)
Ваш класс наследуется от NetworkBehaviour? – marsh
Да, это наследуется от NetworkBehaviour. – kmf