Четверг, 02 Мая 2024, 19:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Вопрос-[ответ] по Unity (Задаём свои вопросы)
Вопрос-[ответ] по Unity
QWER56Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1
старожил
Сейчас нет на сайте
Вопрос-[Ответ] по Unity3d

  • База скриптов Unity3d
  • Курс Уроков по Unity 3D от Alcatraz

    ConsMark - поисковик по интернет магазинам.

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • PoqXertДата: Среда, 09 Апреля 2014, 16:31 | Сообщение # 5821
    постоянный участник
    Сейчас нет на сайте
    Adom, попробуте подключиться в этой игре. Если работает - значит проблема у тебя в коде, если нет - значит проблема в другом.

    Расширения для Unity3D
    Блог программиста - PoqXert.ru
    AdomДата: Среда, 09 Апреля 2014, 18:03 | Сообщение # 5822
    Печенька!
    Сейчас нет на сайте
    Стой а как он подключиться ?

    Добавлено (09.04.2014, 17:45)
    ---------------------------------------------
    А все он смог подключится ко мне ..

    Добавлено (09.04.2014, 17:47)
    ---------------------------------------------
    А исходник коннекта есть ?

    Добавлено (09.04.2014, 18:03)
    ---------------------------------------------
    Значит все-таки проблема в скрипте...

    PoqXertДата: Четверг, 10 Апреля 2014, 02:34 | Сообщение # 5823
    постоянный участник
    Сейчас нет на сайте
    Цитата Adom ()
    Значит все-таки проблема в скрипте...

    Ты пытаешься подключиться через IP, а т.к. сервер спрятался за NAT, то не понятно кому эти данные предназначены / к кому надо подключиться.
    IP надо указывать, если сервер имеет публичный IP. Если же сервер спрятался за NAT, нужно указывать GUID.


    Расширения для Unity3D
    Блог программиста - PoqXert.ru
    AdomДата: Четверг, 10 Апреля 2014, 07:36 | Сообщение # 5824
    Печенька!
    Сейчас нет на сайте
    Эмм... И как его нужно использовать ?

    Добавлено (10.04.2014, 07:36)
    ---------------------------------------------
    Как я понял NetworkPlayer.guid- это некий айди игрока ? Ну или индификатор

    PoqXertДата: Четверг, 10 Апреля 2014, 08:03 | Сообщение # 5825
    постоянный участник
    Сейчас нет на сайте
    Цитата Adom ()
    И как его нужно использовать ?

    Без урока разобраться никак? dry
    Первый игрок создаёт сервер, через Network.InitializeServer, передавая в третьем параметре !Network.HavePublicAddress.
    После создания сервера получаем GUID сервера через Network.player.guid. И выводим его в GUI (или ещё куда), чтобы первый игрок мог сообщить его второму игроку.
    Второй игрок, узнав GUID сервера, подключается к нему через Network.Connect, но вместо Network.Connect(IP, Port), пишим Network.Connect(GUID).

    P.S. Подключение через GUID не работает, если сервер не прятался за NAT.


    Расширения для Unity3D
    Блог программиста - PoqXert.ru


    Сообщение отредактировал PoqXert - Четверг, 10 Апреля 2014, 08:04
    AdomДата: Четверг, 10 Апреля 2014, 08:22 | Сообщение # 5826
    Печенька!
    Сейчас нет на сайте
    Код
    Network.player.guid=GUID;


    Добавлено (10.04.2014, 08:14)
    ---------------------------------------------
    ?

    Добавлено (10.04.2014, 08:22)
    ---------------------------------------------
    Сделал так
    Код
    using UnityEngine;   
    using System.Collections;   

    public class Connect : MonoBehaviour   
    {   

          public string connectToIP = "127.0.0.1";   
          public int connectPort = 25001;   
       public string GUID;
          // Смешанный GUI для сервера и клиента   
          public void OnGUI()   
          {   
        GUI.Label(new Rect(100,100,150,50),GUID);
              if (Network.peerType == NetworkPeerType.Disconnected)   
              {   
                  //Сейчас мы отключены и не являемся клиентом или хостом   
                  GUILayout.Label("Connection status: Disconnected");   

                  connectToIP = GUILayout.TextField(connectToIP, GUILayout.MinWidth(100));   
                  connectPort = int.Parse(GUILayout.TextField(connectPort.ToString()));   

                  GUILayout.BeginVertical();   
                  if (GUILayout.Button("Connect as client"))   
                  {   
                      // Подсоединяемся к "connectToIP" и "connectPort" как клиент   
                      // В данном случае игнорируем NAT   
                      Network.useNat = !Network.HavePublicAddress();
                      Network.Connect(GUID);   
                  }   

                  if (GUILayout.Button("Start Server"))   
                  {   
                      // Создаем север с 32 клиентами используя порт "connectPort"    
                      // Так же игнорируем NAT   
                      Network.useNat = !Network.HavePublicAddress();
                      Network.InitializeServer(32, connectPort);   
          GUID=Network.player.guid;
                  }   
                  GUILayout.EndVertical();   

              }   
              else   
              {   
                  //Мы имеем подключение(я)!   

                  if (Network.peerType == NetworkPeerType.Connecting)   
                  {   
                      // Статус - пдключение   
                      GUILayout.Label("Connection status: Connecting");   

                  }   
                  else if (Network.peerType == NetworkPeerType.Client)   
                  {   
                      // Статус - клиент   
                      GUILayout.Label("Connection status: Client!");   
                      GUILayout.Label("Ping to server: " + Network.GetAveragePing(Network.connections[0]));   

                  }   
                  else if (Network.peerType == NetworkPeerType.Server)   
                  {   
                      // Статус - сервер   
                      GUILayout.Label("Connection status: Server!");   
                      GUILayout.Label("Connections: " + Network.connections.Length);   
                      if (Network.connections.Length >= 1)   
                      {   
                          GUILayout.Label("Ping to first player: " + Network.GetAveragePing(Network.connections[0]));   
                      }   
                  }   

                  if (GUILayout.Button("Disconnect"))   
                  {   
                      Network.Disconnect(200);   
                  }   
              }   

          }   

    }


    Сообщение отредактировал Adom - Четверг, 10 Апреля 2014, 08:22
    PoqXertДата: Четверг, 10 Апреля 2014, 08:40 | Сообщение # 5827
    постоянный участник
    Сейчас нет на сайте
    Цитата Adom ()
    Сделал так

    Сервер увидил свой GUID, сообщил его будущему клиенту...
    А где клиент его указывает? (Если клиент - редактор, тогда он его может и в инспекторе указать).
    Если клиент указывает GUID сервера (а не пытается подключиться через пустой GUID), то всё должно работать.


    Расширения для Unity3D
    Блог программиста - PoqXert.ru
    AdomДата: Четверг, 10 Апреля 2014, 09:05 | Сообщение # 5828
    Печенька!
    Сейчас нет на сайте
    А где клиент его указывает? (Если клиент - редактор, тогда он его может и в инспекторе указать). Эмм?
    PoqXertДата: Четверг, 10 Апреля 2014, 09:12 | Сообщение # 5829
    постоянный участник
    Сейчас нет на сайте
    Цитата Adom ()
    Эмм?

    facepalm
    У тебя есть пустая строковая переменная GUID, перед коннектом она нигде не изменяется. Т.е. клиент пытается подключиться через пустой GUID.


    Расширения для Unity3D
    Блог программиста - PoqXert.ru
    AdomДата: Четверг, 10 Апреля 2014, 09:24 | Сообщение # 5830
    Печенька!
    Сейчас нет на сайте
    PoqXert, Аа извини что туплю )

    Добавлено (10.04.2014, 09:24)
    ---------------------------------------------

    Код
    using UnityEngine;  
    using System.Collections;  

    public class Connect : MonoBehaviour  
    {  

         public string connectToIP = "127.0.0.1";  
         public int connectPort = 25001;  
      public string GUID;
         // Смешанный GUI для сервера и клиента  
         public void OnGUI()  
         { GUID=Network.player.guid;
       GUI.Label(new Rect(100,100,150,50),GUID);
             if (Network.peerType == NetworkPeerType.Disconnected)  
             {  
                 //Сейчас мы отключены и не являемся клиентом или хостом  
                 GUILayout.Label("Connection status: Disconnected");  

                 connectToIP = GUILayout.TextField(connectToIP, GUILayout.MinWidth(100));  
                 connectPort = int.Parse(GUILayout.TextField(connectPort.ToString()));  

                 GUILayout.BeginVertical();  
                 if (GUILayout.Button("Connect as client"))  
                 {  
                     // Подсоединяемся к "connectToIP" и "connectPort" как клиент  
                     // В данном случае игнорируем NAT  
                     Network.useNat =false;
                     Network.Connect(GUID);  
                 }  

                 if (GUILayout.Button("Start Server"))  
                 {  
                     // Создаем север с 32 клиентами используя порт "connectPort"   
                     // Так же игнорируем NAT  
                     Network.useNat = !Network.HavePublicAddress();
                     Network.InitializeServer(32, connectPort);  
         GUID=Network.player.guid;
                 }  
                 GUILayout.EndVertical();  

             }  
             else  
             {  
                 //Мы имеем подключение(я)!  

                 if (Network.peerType == NetworkPeerType.Connecting)  
                 {  
                     // Статус - пдключение  
                     GUILayout.Label("Connection status: Connecting");  

                 }  
                 else if (Network.peerType == NetworkPeerType.Client)  
                 {  
                     // Статус - клиент  
                     GUILayout.Label("Connection status: Client!");  
                     GUILayout.Label("Ping to server: " + Network.GetAveragePing(Network.connections[0]));  

                 }  
                 else if (Network.peerType == NetworkPeerType.Server)  
                 {  
                     // Статус - сервер  
                     GUILayout.Label("Connection status: Server!");  
                     GUILayout.Label("Connections: " + Network.connections.Length);  
                     if (Network.connections.Length >= 1)  
                     {  
                         GUILayout.Label("Ping to first player: " + Network.GetAveragePing(Network.connections[0]));  
                     }  
                 }  

                 if (GUILayout.Button("Disconnect"))  
                 {  
                     Network.Disconnect(200);  
                 }  
             }  

         }  

          

    }
    ?
    PoqXertДата: Четверг, 10 Апреля 2014, 09:39 | Сообщение # 5831
    постоянный участник
    Сейчас нет на сайте
    Цитата Adom ()
    ?

    Будущий клиент сохраняет в GUID свой guid (которого у него нет, т.к. он не подключен). И зачем? Он сам к себе потом подключиться хочет, или он всё-таки планирует подключиться к серверу?
    В OnGUI() вставь GUID = GUILayout.TextField(GUID); (или измени поле, которое для IP).


    Расширения для Unity3D
    Блог программиста - PoqXert.ru
    AdomДата: Четверг, 10 Апреля 2014, 09:55 | Сообщение # 5832
    Печенька!
    Сейчас нет на сайте
    Код
    using UnityEngine;  
    using System.Collections;  

    public class Connect : MonoBehaviour  
    {  

         public string connectToIP = "127.0.0.1";  
         public int connectPort = 25001;  
      public string GUID;
         // Смешанный GUI для сервера и клиента  
         public void OnGUI()  
         {   GUI.Label(new Rect(100,100,150,50),GUID);
             if (Network.peerType == NetworkPeerType.Disconnected)  
             {  
                 //Сейчас мы отключены и не являемся клиентом или хостом  
                 GUILayout.Label("Connection status: Disconnected");  

                GUID = GUILayout.TextField(GUID);
                 

                 GUILayout.BeginVertical();  
                 if (GUILayout.Button("Connect as client"))  
                 {  
                     // Подсоединяемся к "connectToIP" и "connectPort" как клиент  
                     // В данном случае игнорируем NAT  
                     Network.useNat=true;
                     Network.Connect(GUID);  
                 }  

                 if (GUILayout.Button("Start Server"))  
                 {  
                     // Создаем север с 32 клиентами используя порт "connectPort"   
                     // Так же игнорируем NAT  
                     Network.useNat = !Network.HavePublicAddress();
                     Network.InitializeServer(32, connectPort);  
         GUID=Network.player.guid;
                 }  
                 GUILayout.EndVertical();  

             }  
             else  
             {  
                 //Мы имеем подключение(я)!  

                 if (Network.peerType == NetworkPeerType.Connecting)  
                 {  
                     // Статус - пдключение  
                     GUILayout.Label("Connection status: Connecting");  

                 }  
                 else if (Network.peerType == NetworkPeerType.Client)  
                 {  
                     // Статус - клиент  
                     GUILayout.Label("Connection status: Client!");  
                     GUILayout.Label("Ping to server: " + Network.GetAveragePing(Network.connections[0]));  

                 }  
                 else if (Network.peerType == NetworkPeerType.Server)  
                 {  
                     // Статус - сервер  
                     GUILayout.Label("Connection status: Server!");  
                     GUILayout.Label("Connections: " + Network.connections.Length);  
                     if (Network.connections.Length >= 1)  
                     {  
                         GUILayout.Label("Ping to first player: " + Network.GetAveragePing(Network.connections[0]));  
                     }  
                 }  

                 if (GUILayout.Button("Disconnect"))  
                 {  
                     Network.Disconnect(200);  
                 }  
             }  

         }  

          

    }
    Вот что получилось в итоге.... Вот только результата ноль (
    PoqXertДата: Четверг, 10 Апреля 2014, 10:17 | Сообщение # 5833
    постоянный участник
    Сейчас нет на сайте
    А ты GUID вводишь, когда к серверу подключаешься?

    Расширения для Unity3D
    Блог программиста - PoqXert.ru
    AdomДата: Четверг, 10 Апреля 2014, 10:19 | Сообщение # 5834
    Печенька!
    Сейчас нет на сайте
    PoqXert, Да

    Добавлено (10.04.2014, 10:19)
    ---------------------------------------------
    На сервере GUID написан а я на клиенте его ввожу и клацаю Connect

    PoqXertДата: Четверг, 10 Апреля 2014, 10:30 | Сообщение # 5835
    постоянный участник
    Сейчас нет на сайте
    NAT Facilitator Unity не доступен (как и мастер сервер). Поэтому не работает. Подожди пока начнёт работать (или свой запусти), потом проверишь.

    Расширения для Unity3D
    Блог программиста - PoqXert.ru
    AdomДата: Четверг, 10 Апреля 2014, 10:32 | Сообщение # 5836
    Печенька!
    Сейчас нет на сайте
    PoqXert, Эмм и из-за этого были все проблемы ? А тогда как твой работает ? ааа у тебя наверное свой мастер сервер есть ?
    PoqXertДата: Четверг, 10 Апреля 2014, 10:42 | Сообщение # 5837
    постоянный участник
    Сейчас нет на сайте
    Цитата Adom ()
    Эмм и из-за этого были все проблемы ?

    Из-за этого проблемы подключени через GUID (по IP ты и при доступном NAT Facilitator не мог подключиться).
    Цитата Adom ()
    А тогда как твой работает ? ааа у тебя наверное свой мастер сервер есть ?

    Есть. Но демка работает через стандартный Мастер Сервер, поэтому она сейчас не работает.


    Расширения для Unity3D
    Блог программиста - PoqXert.ru
    AdomДата: Четверг, 10 Апреля 2014, 10:44 | Сообщение # 5838
    Печенька!
    Сейчас нет на сайте
    PoqXert,Ааа... А сколько тогда ждать?
    PoqXertДата: Четверг, 10 Апреля 2014, 10:51 | Сообщение # 5839
    постоянный участник
    Сейчас нет на сайте
    Цитата Adom ()
    А сколько тогда ждать?

    Этого никто не знает, может 3 часа, а может и неделю.


    Расширения для Unity3D
    Блог программиста - PoqXert.ru
    AdomДата: Четверг, 10 Апреля 2014, 10:57 | Сообщение # 5840
    Печенька!
    Сейчас нет на сайте
    PoqXert, Воу ..... Тогда проще с Мастер Сервером )

    Добавлено (10.04.2014, 10:57)
    ---------------------------------------------
    А хоть скрипт нормально сделал ?

    Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Вопрос-[ответ] по Unity (Задаём свои вопросы)
    Поиск:

    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг