2016-04-08 7 views
1

Я хочу назначить конкретную информацию для символов сервера, а также символов клиента. Теперь, как узнать, является ли игрок хозяином или клиентом? Я пробовал использовать isServer и isClient, но оба возвращают true. Являются ли эти правильные ключевые слова, которые я должен использовать?Определить, является ли игрок хозяином или клиентом

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

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

Ваш класс наследуется от NetworkBehaviour? – marsh

+0

Да, это наследуется от NetworkBehaviour. – kmf

ответ

2

Вместо использования isClient, чтобы определить, если игрок является клиент, я использую !isServer вместо этого.

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

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

Если вы подключаетесь в качестве «хозяина», на самом деле вы как «клиент» и «сервер» в то же время. Это контрастирует с запуском «выделенного сервера», который действует как полномочия сервера, но не представляет собой «клиентское» соединение. Как вы предлагаете в своем собственном ответе, вы можете использовать isServer и !isServer, или, вероятно:

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

Не уверен, если это относится к любой ситуации, поэтому я прошу прощения, если нет - я использую плагин называется 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, больше информации для тех, кто может прийти через это в то время, чтобы понять все эти вещи из. :)