Управление игроками

Сеть в Unity3D

Управление игроками

Сообщение Alcatraz 30 окт 2011, 17:14

Всем привет,
вот решил взяться за онлайн, (в юнити уже большего года, пора уж )
вот скрипт подключения:

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using gui = UnityEngine.GUI;

public class GameMenu : MonoBehaviour {

public GameObject playerPrefab;
        string ip = "127.0.0.1";
        string port = "4211";
        bool connected;
   
        public void CreatePlayer()
        {
                connected = true;
                var g = (GameObject)Network.Instantiate(playerPrefab, transform.position, transform.rotation, 1);
                g.GetComponentInChildren<Camera>().enabled = true;
                gameObject.GetComponent<Camera>().enabled = false;
        }
       
        void OnDisconnectedFromServer()
        {
                connected = false;
        }
       
        void OnPlayerDisconnected(NetworkPlayer pl)
        {
                Network.DestroyPlayerObjects(pl);
        }
       
        void OnConnectedToServer()
        {
                CreatePlayer();
        }
       
        void OnServerInitialized()
        {
                CreatePlayer();
        }
       
        void OnGUI()
        {
               
                if(!connected)
                {
            ip = gui.TextField(new Rect(10,10,90,20),ip);      
                port = gui.TextField(new Rect(10,40,90,20),port);
                       
                        if(gui.Button(new Rect(10,70,90,20), "Connect"))
                        {
                        Network.Connect(ip,int.Parse(port));   
                        }
                       
                        if(gui.Button(new Rect(10,100,90,20), "Host"))
                        {
                        Network.InitializeServer(10, int.Parse(port), true);
                        }
                       
                }
        }
}

 


делаю FPS MMO шутер, использую свою сист-му оружия, игрока создал, вроде норм.. но при тесте на одном компе:
управляю игроком N1, игрок 2 двигается, игрок 1 стоит и наоборот, как проверку движения, использую:

Синтаксис:
Используется csharp
if(networkView.isMine)
 


но не помогает, так же кое-как убил игроком 1, игрока 2, у игрока 2, в окне, видно, как упала камера с регдолом трупа, а в окне игрока 1, тот же, бегающий под управлением игрока 1, противник...

помогите пожалуйста разобраться) :)

и кстати, для игры по интернету, в настройках проекта, выбирать какой то network emulation или дефултный оставить?
Unity3D Game Developer
Аватара пользователя
Alcatraz
UNITрон
 
Сообщения: 236
Зарегистрирован: 07 июн 2011, 09:12
Откуда: Москва
  • Сайт
  • ICQ

Re: Управление игроками

Сообщение Zanilokon 30 окт 2011, 19:58

Попробуй поставить RunInBackground где то в настройках :-
Добавить zameran123 в Skype
Zanilokon
UNIт
 
Сообщения: 105
Зарегистрирован: 25 июл 2011, 06:28

Re: Управление игроками

Сообщение Alcatraz 30 окт 2011, 20:27

ставил.. эффект тот же..
Unity3D Game Developer
Аватара пользователя
Alcatraz
UNITрон
 
Сообщения: 236
Зарегистрирован: 07 июн 2011, 09:12
Откуда: Москва
  • Сайт
  • ICQ

Re: Управление игроками

Сообщение DavilSin 01 ноя 2011, 11:58

Может потому что CreatePlayer(); происходит в OnConnectedToServer() и в OnServerInitialized() :-?
Изображение
Аватара пользователя
DavilSin
UNIт
 
Сообщения: 74
Зарегистрирован: 16 апр 2011, 11:10

Re: Управление игроками

Сообщение Alcatraz 01 ноя 2011, 12:02

наверно нет, к примеру, я сервер, нажимаю "хост", и создаётся мой игрок, и при нажатии у игрока "коннект" идёт соединение, и создание плеера. и кстати, Nat используется, а соединение на двух компах не происходит, в чём дело? что нужно для игры на двих компах?
и повторюсь:
и кстати, для игры по интернету, в настройках проекта, выбирать какой то network emulation или дефултный (без эмуляторов) оставить?
Unity3D Game Developer
Аватара пользователя
Alcatraz
UNITрон
 
Сообщения: 236
Зарегистрирован: 07 июн 2011, 09:12
Откуда: Москва
  • Сайт
  • ICQ

Re: Управление игроками

Сообщение Lman 02 ноя 2011, 10:41

Попробуй перед отключением клиента сделать так, чтобы он сам для всех своих обьекты уничтожал через Network.destroy, а потом уже отключался.

Ну а насчет НАТ, напрямую соединиться двум таким компам невозможно, им требуется помощь со стороны внешнего сервера с белым IP (в идеале даже двумя белыми IP, второй используется для проверок НАТ). Дело в том что комп через НАТ может получать сетевые пакеты только с тех адресов, куда он сам первым обратился ранее, НАТ помнит куда кто обращался и на основе этой инфы распределяет приходящие из инета пакеты. Если например ты не обращался на какой нибудь адрес, то с него к тебе ничего не может прийти, НАТ их просто не пропустит.

В двух словах вот такой пример.
Пусть есть комп "А", находящийся за НАТ "НА", и есть комп Б, находящийся за НАТ "НБ", и есть мастер сервер "М".

Схема установки соединения между "А" и "Б" следующая примерно:
"А" сообщает "М" о своем существовании и что он является сервером. "М" сохраняет сведения о адресе "А", а так же путем отправки нескольких тестовых сообщений определяет тип "НА" и соответственно вычисляется возможность установки соединения, вообще НАТ бывает нескольких типов, но наиболее распространены те, для которых пример работает, так что можно не париться.
После чего "Б" может запросить у "М" информацию о сервере, заодно "М" протестирует "НБ" так же как и "НА". После проверки возможности соединения "М" сообщает компу "А" внешний адрес "Б". Комп "А" отправляет компу "Б" несколько тестовых пакетов, они не достигнут цели, т.к. "НБ" их не пропустит, но "НА" запомнит куда комп "А" ломился, и если оттуда прийдет чтото, то достигнет цели. После "А" сообщает "М" что тестовые пакеты ушли, "М" в свою очередь сообщает об этом "Б", после чего "Б" отправляет пакеты "А" которые будут доходить до цели, одновременно "НБ" запомнит куда ломиться "Б" и будет пропускать ответные пакеты. Т.е. компы "А" и "Б"начнут видеть друг друга и можно играть.
Вот, как то так, подробнее о НАТе и как его пробивают гугл тебе в помощь...
Аватара пользователя
Lman
UNец
 
Сообщения: 36
Зарегистрирован: 02 июн 2011, 23:25
  • Сайт
  • ICQ

Re: Управление игроками

Сообщение Alcatraz 02 ноя 2011, 18:59

Lman писал(а):Попробуй перед отключением клиента сделать так, чтобы он сам для всех своих обьекты уничтожал через Network.destroy, а потом уже отключался.

Ну а насчет НАТ, напрямую соединиться двум таким компам невозможно, им требуется помощь со стороны внешнего сервера с белым IP (в идеале даже двумя белыми IP, второй используется для проверок НАТ). Дело в том что комп через НАТ может получать сетевые пакеты только с тех адресов, куда он сам первым обратился ранее, НАТ помнит куда кто обращался и на основе этой инфы распределяет приходящие из инета пакеты. Если например ты не обращался на какой нибудь адрес, то с него к тебе ничего не может прийти, НАТ их просто не пропустит.

В двух словах вот такой пример.
Пусть есть комп "А", находящийся за НАТ "НА", и есть комп Б, находящийся за НАТ "НБ", и есть мастер сервер "М".

Схема установки соединения между "А" и "Б" следующая примерно:
"А" сообщает "М" о своем существовании и что он является сервером. "М" сохраняет сведения о адресе "А", а так же путем отправки нескольких тестовых сообщений определяет тип "НА" и соответственно вычисляется возможность установки соединения, вообще НАТ бывает нескольких типов, но наиболее распространены те, для которых пример работает, так что можно не париться.
После чего "Б" может запросить у "М" информацию о сервере, заодно "М" протестирует "НБ" так же как и "НА". После проверки возможности соединения "М" сообщает компу "А" внешний адрес "Б". Комп "А" отправляет компу "Б" несколько тестовых пакетов, они не достигнут цели, т.к. "НБ" их не пропустит, но "НА" запомнит куда комп "А" ломился, и если оттуда прийдет чтото, то достигнет цели. После "А" сообщает "М" что тестовые пакеты ушли, "М" в свою очередь сообщает об этом "Б", после чего "Б" отправляет пакеты "А" которые будут доходить до цели, одновременно "НБ" запомнит куда ломиться "Б" и будет пропускать ответные пакеты. Т.е. компы "А" и "Б"начнут видеть друг друга и можно играть.
Вот, как то так, подробнее о НАТе и как его пробивают гугл тебе в помощь...

спасибо. :)
Unity3D Game Developer
Аватара пользователя
Alcatraz
UNITрон
 
Сообщения: 236
Зарегистрирован: 07 июн 2011, 09:12
Откуда: Москва
  • Сайт
  • ICQ

Re: Управление игроками

Сообщение t.key 04 ноя 2011, 21:33

Из документации:
static function Connect (GUID : String, password : String = "") : NetworkConnectionError
Description
Connect to a server GUID. NAT punchthrough can only be performed this way.

The host GUID value is exposed locally through the NetworkPlayer structure. The master server also provides this in the HostData structure.

GUID.
Эмулейшон дефолтно и у меня все работает по инету.
Еще тестирую из примера.
Если соберутся восемь ваххабитов, получится один ваххаByte.
Казахстанским геймдеверам: _ttp://gamez.kz
Аватара пользователя
t.key
UNIт
 
Сообщения: 72
Зарегистрирован: 03 авг 2011, 17:38
Откуда: Казахстан

Re: Управление игроками

Сообщение Alcatraz 09 ноя 2011, 14:19

спасибо, попробую.
Unity3D Game Developer
Аватара пользователя
Alcatraz
UNITрон
 
Сообщения: 236
Зарегистрирован: 07 июн 2011, 09:12
Откуда: Москва
  • Сайт
  • ICQ


Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4