Клиент и сервер на Unity3d

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Клиент и сервер на Unity3d

Сообщение dobec666 27 фев 2013, 23:21

Как правильно реализовать игру по локальной сети(hamachi, или на прямую по IP)?
Дело в том что изначально я не подумал о локальной сети, но сделав прототип игры мне понравилась идея мультиплеера.
Причем в синглплеер это все готово и работает, а вот что и куда добавлять в мультиплеере я не понимаю.

Вообщем если кто-то уже занимался этим, подскажите правильную архитектуру(готов переделать все скрипты).
К примеру, для локальной игры необходимы:
1. Сервер
2. Клиент

Мне интересно как должен выгладить проект сервера, там должны быть сцены такие же как и на клиенте, музыка, скрипты и прочее?
Или же должна быть одна сцена, со скриптами по типу:
1. Коннект
2. Стрельба
3. И т.д.

Нужны хотя-бы пара примеров того как должна работать к примеру атака(что при этом должно быть на клиенте, и что на сервере).
Составьте кто нибудь план, что и где должно находиться. Думаю многие будут благодарны за ваш труд! :ymhug:

P.S. Мануалы и доки читал, но мозг отказывается воспринимать ихнею инфу(Что получилось сделать я написал. Но не поняв систему, на остальное меня не хватило).. :-s
Как же оказывается сложно что-то объяснить на бумаге, однако. :))

P.P.S. Немного обновил пост, я кстати так и не нашел ни одного внятного мануала по этой теме.
Точнее был один, но он написан с учетом того что читатели будут смотреть исходники, а ссылка на них мертвая.
Последний раз редактировалось dobec666 28 фев 2013, 22:16, всего редактировалось 2 раз(а).
Застрял на настройке мультиплеера. :(
Аватара пользователя
dobec666
UNITрон
 
Сообщения: 161
Зарегистрирован: 27 фев 2013, 22:33

Re: Меню и сеть.

Сообщение lawson 28 фев 2013, 01:16

успехов тебе, надеюсь через неделю тебе надоест юнити с такими запросами и ты забросишь его.
lawson
UNIверсал
 
Сообщения: 481
Зарегистрирован: 14 сен 2012, 21:20

Re: Меню и сеть.

Сообщение dobec666 28 фев 2013, 01:35

lawson писал(а):успехов тебе, надеюсь через неделю тебе надоест юнити с такими запросами и ты забросишь его.

Что за негатив?
Я же не прошу написать за меня мморпг мирового масштаба. Синглплеер который я сделал меня полностью устраивает. А тот факт что я не могу понять как устроена игра по сети, не говорит о том что ты умнее меня.
И раз уж ты такой офигенный, и считаешь что у меня высокие запросы, можешь предложить мне "Создать пока что 2D игру, а потом посмотришь". Пока искал то что мне нужно, очень часто натыкался на фразочки подобного типа... (P)
Застрял на настройке мультиплеера. :(
Аватара пользователя
dobec666
UNITрон
 
Сообщения: 161
Зарегистрирован: 27 фев 2013, 22:33

Re: Меню и сеть.

Сообщение lawson 28 фев 2013, 02:20

хспди, что за идиотизм отвечать подобными сообщениями!?
во первых, я тебе пожелал успеха в твоих начинаниях как бы,
во вторых, где я хотя бы намекнул что я лучше тебя или умнее? - зачем так отвечать, будто я твержу всем в нос что круче всех.
в третьх, если я научился присваивать значения переменным, я ведь не бегу на форум всем сразу сообщать каких я успехов добился: знаешь как делать - делай, вопросы задавай по ходу работы - к чему расписывать план своих действий, если даже относиться скептически, ты и на половину их не выполнишь через месяц?
пфф
lawson
UNIверсал
 
Сообщения: 481
Зарегистрирован: 14 сен 2012, 21:20

Re: Меню и сеть.

Сообщение dobec666 28 фев 2013, 02:45

lawson писал(а):хспди, что за идиотизм отвечать подобными сообщениями!?
во первых, я тебе пожелал успеха в твоих начинаниях как бы,
во вторых, где я хотя бы намекнул что я лучше тебя или умнее? - зачем так отвечать, будто я твержу всем в нос что круче всех.
в третьх, если я научился присваивать значения переменным, я ведь не бегу на форум всем сразу сообщать каких я успехов добился: знаешь как делать - делай, вопросы задавай по ходу работы - к чему расписывать план своих действий, если даже относиться скептически, ты и на половину их не выполнишь через месяц?
пфф


Ты говоришь что я хвастун?
Я не расписывал план своих действий, я написал что у меня есть и задал вопрос.
Хочу заметить, вопрос поставлен абсолютно четко: " Как правильно реализовать игру по локальной сети(hamachi, или на прямую по IP)? "
Все остальное это вводные. Задал я его в разделе "Почемучка", я думаю раздел задумывался для того что-бы задавать вопросы, или отвечать на них.
И вообще, раздел не для флейма, не пиши тут больше, пожалуйста. А если есть ответ на вопрос, ответь. :ymtongue:
Застрял на настройке мультиплеера. :(
Аватара пользователя
dobec666
UNITрон
 
Сообщения: 161
Зарегистрирован: 27 фев 2013, 22:33

Re: Меню и сеть.

Сообщение Order 28 фев 2013, 05:51

Вопрос первый. Как добавить равномерное освещение текстуры для главной скрина меню?

используй простой шейдер без освещения , например "Custom/Transparent Cutout" "Unlit/AlphaSelfIllum"

Вопрос второй. Как правильно реализовать игру по локальной сети(hamachi, или на прямую по IP)?

M2H_Networking_Tutorial хороший урок, где то на русском видел. Лучше с начало с сетью разобраться, потом вставить наработки с сингла.

Что-то много невнятной писанины. Нужно: Два игрока, стрельба, спаун мобов, переход между локами, желательно на разделение клиент-сервер(как в Counter-Strike, клиент видит румы и коннектится, а сервак просто создает румы)

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

организовать обмен данными например по RPC проще для понимания.. никогда не забывать кто есть кто, сервер и клиент, обычная проблема когда , начинают спаунить по два объекта сетевые , лучше чтобы все решал сервер, по запросам игрока, для этого лучше почитать описание , кк это происходит в КС

P.S. Мануалы и доки читал, но мозг отказывается воспринимать ихнею инфу(Что получилось сделать я написал. Но не поняв систему, на остальное меня не хватило).. :-s

начинай с простого, пусть хотя бы кубики по сети бегают..
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: Меню и сеть.

Сообщение dobec666 28 фев 2013, 06:58

Order писал(а):
Вопрос первый. Как добавить равномерное освещение текстуры для главной скрина меню?

используй простой шейдер без освещения , например "Custom/Transparent Cutout" "Unlit/AlphaSelfIllum"

Вопрос второй. Как правильно реализовать игру по локальной сети(hamachi, или на прямую по IP)?

M2H_Networking_Tutorial хороший урок, где то на русском видел. Лучше с начало с сетью разобраться, потом вставить наработки с сингла.

Что-то много невнятной писанины. Нужно: Два игрока, стрельба, спаун мобов, переход между локами, желательно на разделение клиент-сервер(как в Counter-Strike, клиент видит румы и коннектится, а сервак просто создает румы)

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

организовать обмен данными например по RPC проще для понимания.. никогда не забывать кто есть кто, сервер и клиент, обычная проблема когда , начинают спаунить по два объекта сетевые , лучше чтобы все решал сервер, по запросам игрока, для этого лучше почитать описание , кк это происходит в КС

P.S. Мануалы и доки читал, но мозг отказывается воспринимать ихнею инфу(Что получилось сделать я написал. Но не поняв систему, на остальное меня не хватило).. :-s

начинай с простого, пусть хотя бы кубики по сети бегают..


Вообщем как я понимаю, у меня сейчас смешанный сервер\клиент, если я создаю то я сервер\клиент, а если я захожу то я клиент.
Я решил что нужно отделить сервер от клиента полностью, то есть если я захочу создать игру и поиграть в нее, то нужно запустить сначала сервер(как отдельное приложение), а потом клиент.
Это задача. :) Теперь осталось понять, как их разделить, к примеру скрипт master.js нужно разделить на серверную часть и клиентскую. В клиенте нужно оставить функции типо поиска сервера и подключения к нему. А на сервере соответственно только функции отвечающие за прием вход и инициализацию игроков..

Но вот что не понятно, если на сервере не будет сцен, которые есть на клиенте, как их загрузить? Или префаб той-же самой ракеты которая вылетает из базуки..
Или мобов..
Вот к примеру, обьект player имеет скрипты(мув контроллер, хитпоинты, атаку, звуки, камера контроллер и кучу еще всяких), и куда их девать? Оставить в клиенте или на сервере, или вообще продублировать, или есть какие-то специальные функции которые позволят мне как клиенту управлять пустышкой, а все основные скрипты персонажа будут храниться на сервере?

Вообщем вопросов куча, а ответов мало.. :p
Простите если туплю и задаю вопросы с крайне очивидными ответами, не спал уже давно, эта сеть покоя не дает. :D
Буду крайне благодарен за помощь, или хотя-бы наводку.. O:-)
Застрял на настройке мультиплеера. :(
Аватара пользователя
dobec666
UNITрон
 
Сообщения: 161
Зарегистрирован: 27 фев 2013, 22:33

Re: Меню и сеть.

Сообщение Order 28 фев 2013, 07:18

Лучше писать свой а не в чужом разбираться, совместить в одном проекте удобнее, разделить можно в любой момент...

на сервере и клиенте должны быть карты с физикой, весь арт и звук на клиенте, хотя можно с делать на сервере просто обмен данными, клиент посылает на сервер свои данные и принимает, данные остальных клиентов, а сервер принимает от каждого клиента данные , и рассылает всем, тогда карты не нужно на сервере, только контролировать и пускать клиентов с правильной версией клиента.
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: Меню и сеть.

Сообщение dobec666 28 фев 2013, 07:36

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

на сервере и клиенте должны быть карты с физикой, весь арт и звук на клиенте, хотя можно с делать на сервере просто обмен данными, клиент посылает на сервер свои данные и принимает, данные остальных клиентов, а сервер принимает от каждого клиента данные , и рассылает всем, тогда карты не нужно на сервере, только контролировать и пускать клиентов с правильной версией клиента.

Именно это я и хочу сделать!

К примеру вот функция:
Синтаксис:
Используется javascript
function StartFire () {
        if (Time.timeScale == 0)
                return;
        firing = true;
        fireAnim.active = true;
}

Вызывается сигнал сендером при нажатии на кнопку. Получается мне нужно отправить данные на сервер, что сигнал поступил и можно стрелять, или скрипт с этой функцией вообще должен быть на сервере а скрипт с сигналом на клиенте?

И самое главное, если я правильно понял, то данные должны отправляться\приниматься через РПЦ?
Застрял на настройке мультиплеера. :(
Аватара пользователя
dobec666
UNITрон
 
Сообщения: 161
Зарегистрирован: 27 фев 2013, 22:33

Re: Меню и сеть.

Сообщение extravert 28 фев 2013, 08:30

http://ru.wikipedia.org/wiki/РПЦ
Вообще товарищ lawson в топике оказался самым невежественным. [-x К чему его посты - так и не ясно.

Да и речь не о том. На самом деле это проблема ни одного человека. Я например сам не исключение, и тоже, вероятно, задал бы на форуме подобный вопрос. Photon и прочая мишура это конечно клево, но тут дело за действительно оптимальным, да и просто научиться делать сеть самому.
Статей конечно много, да дают они очень мало - особенности рассказывают, а как делать - все молчат.

Часто наблюдается ирония аля "соедени роздели клеент и сервер и там все зоработаит". Это не ответ, товарищи.

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

а) как должен вести себя сервер. что лежит в основе, какой способ "принятия" сообщений самый удобный и/или самый производительный. как перебирает данные сервер - простой switch, интерфейсы, или что еще он делает? как перебирает данные клиент. шапка там у сообщения должна быть или можно без нее, в каком формате передается.
б) что имеется в клиенте. все кроме вычислений или все кроме определенных вычислений.
в) как часто клиент и сервер должны обмениваться данными. начиная с тех же перемещений - как достичь плавности. сервер рассчитывает передвижения и клиент их читает. или сервер рассчитывает что то другое и клиенты их читают. или клиент все сам делает и просто отправляет серверу. как сделать так чтобы защититься от хаков, скажем чтобы игрок не мог переместиться просто отправив какой то пакет вне очереди. если клиенты не видят друг друга в области видимости - отправляются ли им эти данные. если есть простые расчеты, типа значение boolean изменилось - где это делается.

предположим что есть у нас какая то игра. ну 1000 человек в нее будет играть. единовременно.
помнится на работе как то приходилось писать асинхронный сервер, точнее, его оптимизировать. и знаете что я понял? что я ничего не понял. Там была до ужаса простая операция "подключение" и "посылка кадров", работающая по локальной сети. насколько затратно - не померяешь. зато любой пакет можно было отправить вне очереди, обманув систему, которая по идее должна это запрещать. как ставить эти запреты? да хрен его знает.

ждем умника, который это делал. Пожалуйста, сделавший это, потрать на новичков 10 минут своего драгоценного времени, просвяти.
Аватара пользователя
extravert
UNIверсал
 
Сообщения: 465
Зарегистрирован: 24 дек 2012, 11:54

Re: Клиент и сервер на Unity3d

Сообщение dobec666 28 фев 2013, 22:37

Апну тему, ответ так и не нашел.. Да и не мне одному я думаю будет интересно. :)

ПиСи Попробовал разобрать с РПЦ сам, пишет ошибку что РПЦ не будет работать без коннекта, а как приконектиться без РПЦ тогда? :((
Застрял на настройке мультиплеера. :(
Аватара пользователя
dobec666
UNITрон
 
Сообщения: 161
Зарегистрирован: 27 фев 2013, 22:33

Re: Клиент и сервер на Unity3d

Сообщение dobec666 28 фев 2013, 23:37

Вопрос.
В клиенте есть функция, которая создает игрока.
Функция на клиенте называется CreatePlayer. Что мне написать на сервере что-бы он запустил эту функцию, при условии что в клиенте нажали кнопку "подключение"?
Я так понимаю, это нужно сделать с помощью РПЦ, но не смог найти как именно. :-\
Приведите пожалуйста пример на JS.
Застрял на настройке мультиплеера. :(
Аватара пользователя
dobec666
UNITрон
 
Сообщения: 161
Зарегистрирован: 27 фев 2013, 22:33

Re: Клиент и сервер на Unity3d

Сообщение Order 01 мар 2013, 07:14

сожги JS !!! :ymdaydream:
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: Клиент и сервер на Unity3d

Сообщение dobec666 01 мар 2013, 07:16

Order писал(а):сожги JS !!! :ymdaydream:

Спасибо за совет, надеюсь это поможет. :ymparty:
Застрял на настройке мультиплеера. :(
Аватара пользователя
dobec666
UNITрон
 
Сообщения: 161
Зарегистрирован: 27 фев 2013, 22:33

Re: Клиент и сервер на Unity3d

Сообщение Order 01 мар 2013, 07:33

Синтаксис:
Используется csharp
                       
if (GUILayout.Button ("Connect as client"))
{
        Network.Connect(connectToIP, connectPort);
}
if (GUILayout.Button ("Start Server"))
{
        Network.InitializeServer(32, connectPort,false);
}

void OnServerInitialized()
{
        MyState = 1;//статус клинт
}

void OnConnectedToServer()
{

        MyState = 2;//статус сервер
}

if( MyState == 1)
{
        NameField = GUILayout.TextField(NameField, GUILayout.MinWidth(100));
        PassField  = GUILayout.TextField(PassField, GUILayout.MinWidth(100));
        if (GUILayout.Button("connect")) VerificationCallSet(NameField, PassField);
}

[RPC]
public void VerificationSet( NetworkPlayer player, string NamePlayer, string PassPlayer)
{
        for (PlayerID = 0; PlayerID < pPlayer.Length; PlayerID++)
        {
                if (pPlayer[PlayerID] == null)
                {

                        networkView.RPC("VerificationOk", player, player , PlayerID); //ответ
                        Debug.Log("player ID = "+player+"---"+PlayerID);
                        return;
                }
        }
}


 
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

След.

Вернуться в Почемучка

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

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