MMO гоночки

Сеть в Unity3D

MMO гоночки

Сообщение Sysor 28 апр 2011, 16:19

Ув. коллеги!
Помогите плиз!
Я создал гоночки. Реализовал сингл плеер(покатушки с ботами) и игру по локалке. Теперь хочу вынести её в интернет.
Т.е. я хочу, чтоб пользователь мог зайти на сайт игры, где весит Unity-WEB приложение и покататься с другими людьми, зарабатывая тем самым себе рейтинг и деньги на апгдейд машинки.
Проблема в том, что я не представляю как это сделать. После ..надцати часов гугляния по инету и изучения этой темы, толкового решения не нашёл, но в голове родилась следующая идея:

-создаём удалённую базу данных где есть таблица аккаунтов(логин,пароль,количество денег, комплектация авто) и таблица заездов(номер трассы, флаг что гонка началась, список гонщиков принимающих участие в заезде, и их состояния(кординаты и вектор скорости))

-далее каким-нить образом связываем созданный на unity клиент с этой базой, при чём клиент работает в режиме сингл плеера, но поведение "ботов" уже не рассчитываться скриптом с ИИ, а решение берётся из таблицы заездов. Таким образом соревнование ни от кого не зависит, а не так как в игре по локалке(если у игрока, который выступает сервером вдруг виснет комп или другое ч.п., то конец заезду).

Вот такая идея...

Если она имеет право на жизнь, то подскажите куда копать, чтоб её воплотить в жизнь.
А если это бред, то интересно узнать, какие варианты посоветуете вы?

P.S. Я хорошо знаю С++ С# JavaScript сталкивался с чистой Java, особых вопросов не было. Но я никогда не работал с базами банных и сайтостроительством. Читать всё подряд, что касается программирования БД и Web - крыша едет. Если есть возможность подскажите где можно почитать именно то, что касается моей темы.
Sysor
UNец
 
Сообщения: 2
Зарегистрирован: 28 апр 2011, 14:44

Re: MMO гоночки

Сообщение Order 28 апр 2011, 17:01

Авторитарный сервер с базой..
Возможно готовое решение типа foton (с++).
Тогда играть будет сервер, а клиенты только наблюдать и давать команды на движения автомобиля.

Сделать систему при которой будут создаваться комнаты игры. Для каждой трассы будет несколько комнат, в которых игроки будут параллельно играть.
Результаты записываются в базу, по ней выводится статистика.
Добавить 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: MMO гоночки

Сообщение Kann 28 апр 2011, 19:10

Order писал(а):Авторитарный сервер с базой..

авторитарный сервер тут не прокатит, гоночки насколько я понимаю используют физику, отсюда игровой сервер нагнется уже от 100 игроков, либо надо прикручивать свою физику с многопоточностью, либо физику отрабатывать только на клиентах, что за собой тащит проблемы с читерами
Kann
Старожил
 
Сообщения: 553
Зарегистрирован: 05 ноя 2009, 14:06

Re: MMO гоночки

Сообщение Kann 28 апр 2011, 20:35

Sysor писал(а):Ув. коллеги!

-далее каким-нить образом связываем созданный на unity клиент с этой базой,
Вот такая идея...
А если это бред, то интересно узнать, какие варианты посоветуете вы?



я думаю это плохая идея, во первых вы убьете трафик запросами к БД, во вторых огромные проблемы с безопасностью, так как распотрошить клиентскую часть нечего не стоит, и вытащить все пароли и явки
скорее всего вам подойдет классическая архитектура, пишите игровой сервер и он уже общается с БД, в качестве сокет сервера пользуете либо свое либо стороннее решение вроде фотона.
при чём клиент работает в режиме сингл плеера, но поведение "ботов" уже не рассчитываться скриптом с ИИ, а решение берётся из таблицы заездов

а вот это я совсем не понял, если поведение не контролирует ИИ то кто ? и в каком месте тут присутствуют сами игроки ? как вы их хотите между собой связать ?
Kann
Старожил
 
Сообщения: 553
Зарегистрирован: 05 ноя 2009, 14:06

Re: MMO гоночки

Сообщение Order 29 апр 2011, 03:11

Именно для ММО нужна своя физика и много поточность или кластерное решение.
И на сервере юнити не будет если это foton там надо будет писать на с++.

Надеюсь гонки не класса NFS ?

Можно конечно сделать хитрую систему, чтобы часть считалась на клиентах с проверками.
Добавить 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: MMO гоночки

Сообщение gnoblin 29 апр 2011, 05:52

логика для photon'а пишется на шарпе, там нету никакого с++
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: MMO гоночки

Сообщение gnoblin 29 апр 2011, 05:58

можно раскидать headless инстансы юнити (которые будут считать физику на стороне сервера, по одному на комнату, например) по разным ядрам (это типа решение для "отсутствия многопоточности").
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: MMO гоночки

Сообщение Order 29 апр 2011, 06:50

gnoblin писал(а):логика для photon'а пишется на шарпе, там нету никакого с++


А точно забыл.. все планирую им заняться.
Добавить 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: MMO гоночки

Сообщение zhbanito 29 апр 2011, 09:52

-создаём удалённую базу данных где есть таблица аккаунтов(логин,пароль,количество денег, комплектация авто)

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

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

ну тоже конечно можно, но тогда твоя база будет принимать как минимум 3 тысячи запросов в секунду для 10 игроков (10 игроков * хотят знать о 10 игроках * хотя бы 30 раз в секунду для плавного апдейта) на чтение и как минимум 300 запросов на вставку. Можешь поверить на слово, что это довольно большие цифры для современных БД, особенно для 10 пользователей.

-далее каким-нить образом связываем созданный на unity клиент с этой базой,

ну можно сказать, что одна из задач любого сетевого сервера это быть прослойкой между БД и клиентом, тут да, мысль верная

при чём клиент работает в режиме сингл плеера, но поведение "ботов" уже не рассчитываться скриптом с ИИ, а решение берётся из таблицы заездов.

если убрать из этой строки "таблицы заездов", то будет уже правильный ход. Машинами управляют игроки, если игрока нет, то управляет ИИ. Отличный пример применения идеи интерфейсов C#. Имеем интерфейс машины и в зависимости от ситуации подключаем к нему реализацию в виде Сетевого оппонента или компьютерного противника.

Таким образом соревнование ни от кого не зависит, а не так как в игре по локалке(если у игрока, который выступает сервером вдруг виснет комп или другое ч.п., то конец заезду).

Тут смотри. Сервером будет либо твой компьютер (серверный, на удаленной станции, доступ к которому имеешь только ты), либо комп игрока. Первый случай хорош тем, что ты можешь контролировать всю игру, отсекать читеров и т.п. Но теперь прикинь, у тебя 10000 игроков, которые решили устроить 1000 заездов разом. Примерно что запустить 1000 карт quake 3 на твоем домашнем компе. Тяжеловато будет. Придется 2-3 сервера иметь, а потом еще игроки придут, значит 3-4, потом 5 и т.д.
Есть выход, заставить игроков самим быть серверами. Собрались 10 человек, нашли у себя самый мощный комп и сервер запустили на нем (ну естественно это все происходит без участия игроков в автоматическом режиме, в идеале). Придет в твою игру хоть триллион пользователей, а твой сервер будет нагружен только логикой комнат. Профит колоссальный. Но тогда если игрок узнает что он сервер, он может читерить и влиять на ход игры (а кто ему помешает? он же сервер). Можно контролировать и это. Ставить палки в колеса, но на каждый замок находится своя болгарка, так что будешь вместо вложения денег в железные сервера вкладывать их в усилия твоей команды по минимизации возможностей к плохому поведению игроков.

Ну и а почему ты гарантируешь, что твой сервер не зависнет от сонной ошибки прогера (мой например в бесконечный цикл однажды выпал) и точно так же всему заезду конец. Даже 1000 заездов, если у тебя пик популярности.

В очередной раз предупреждаю, что программирование сетевой логики это не просто строчку кода в синглплеер добавить. Попробуй сначала поэкспериментировать с внутренними средствами Unity. Сделай возможность кому-то быть хостером, а остальным подключаться к нему и гонять. Постепенно поймешь принципы работы и начнешь вырабатывать уже свою архитектуру, с комнатами или вообще ММО решишь сделать по мотивам фильма "Тачки".
zhbanito
UNец
 
Сообщения: 33
Зарегистрирован: 01 дек 2010, 15:29

Re: MMO гоночки

Сообщение zhbanito 29 апр 2011, 10:07

P.S. на сервере можно и упрощенную физику считать. И сравнивать с показателями клиента. А то что там машина на кочках подвеской красиво шатает это на игру не сильно повлияет, пусть клиент считает.
zhbanito
UNец
 
Сообщения: 33
Зарегистрирован: 01 дек 2010, 15:29

Re: MMO гоночки

Сообщение mentors 29 апр 2011, 11:16

На сервере:
БД:
Таблица gamers: [id][Логин][Пароль][Роль] (Роль для модераторов и админов в игре)
Таблица Cars: [id марки машины][id владельца][состояние][id усовершенствования 1][id усовершенствования 2][id усовершенствования 3][id усовершенствования 4].....[id усовершенствования 20]... (сколько планируете видов апгрейдов, столько и ячеек усовершенствований].
Таблица Improvements: [id][Изменяемая переменная][Значение] (пар переменная / значение, может быть сколько угодно).
Таблица Position: [Id игрока][Х][Y][Z] (Последняя позиция на карте мира)
Таблица Car: [id][Name][Скорость][Управляемость][Разгон][тип привода][живучесть][стоимость]
По идее для простейшего аналога NFS World достаточно...
Сервер:
Желательно написать в виде службы, ибо можно достаточно гибко настроить возможности перезапуска при сбоях...
Передача данных через асинхронные сокеты (на C# в клиенте, на сервере желательно C/C++, но можно и С#).
На сервере обрабатываем только операции покупки и продажи, а также положение игроков в мире...
Записывать в базу положения при каждом обращении - нет смысла, сделать это можно при определенных ключевых событиях... Например при выходе из игры, при завершении гонки и т.д.
Положения игроков: Принимаем от одного, транслируем всем (по типу чата).. Единственное, в мире - транслировать только ближайших, в гонке - транслировать положения всех участников гонки...
Вся физика и управление на клиенте, против читеров - проверочные значения...
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия


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

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

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