Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Научился сам? Помоги начинающему.

Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение ilka 04 июл 2016, 22:28

Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Здравствуйте, эту не хитрую статью поделенную на несколько частей, я хотел бы посвятить в очередной раз мультиплееру в unity основанного на работе с сиcтемой PlayerIO. В этой статье я попробую провести небольшой экскурс по самой системе, рассказать почему выбрал именно эту систему для статьи, а не стандартное решение от unity, выделить ее особенности и недостатки, попробовать написать простейший клиент-сервер, а главное попытаться рассмотреть все возможные подводные камни с которыми мне приходилось встречаться за время работы с этим сервисом. Целью статьи является возможность показать и расширить границы работы с сетью в unity для начинающих разработчиков, коим являюсь и я сам.

Внимание: статья рассчитана на читателей мало знакомых с сетевыми системами в unity, но хотя бы на среднем уровне знакомых с самим редактором unity и программированием. Остальным приятного чтения.

Небольшое отступление, история страданий.
Скрытый текст:
Сам я давно и хорошо знаком с unity, но вот с сетевыми возможностями редактора не очень - когда то давно делал приложение под версией 3.5 с устаревшим мультиплеером, но в целом мои знания были примерно по нулям. Время от времени поглядывал на новое сетевое решение в версиях начиная с 5.х, читал , смотрел технические документации, но до практики дело не доходило, хотя знал что рано или поздно придется с этим работать. И вот работая с очередным проектом наконец решил, что пришло время подключать мультиплеер. Конечно первый вариант к которому я обратился это был стандартный unity мультиплеер. Игра была простая пошаговая типа стратегия, в которой нужно было передавать минимум данных. Написал небольшую документацию в которой разобрал как будет работать будущая система, конечно же основываясь на своих знаниях. Для полноценной работы мультиплеера, я задался качественно реализовать три вещи: подключение игрока, отключение игрока, переподключение игрока. Так как эти три вещи заложены в основу практически всех сетевых игр, то я решил сделать это максимально качественно, чтобы в будущем использовать в других своих приложениях, благо уровень программирования на C# позволял это сделать.

Начал с самых основ, а именно с подключения игрока. Сам принцип подключения не требовал передачи больших объемов данных, поэтому я решил работать с LLapi. Сам новый мультиплеер в unity делится на HLapi и LLapi. LLapi - низкоуровневый апи, HLapi - высокоуровневый апи. В основном отличия в организации способов передачи данных и сложности настройки. HLapi берет на себя практически всю работу по организации мультиплеера так что вам нужно только все по инструкции правильно настроить и наслаждаться , что и делают практически все начинающие пользователи unity. LLapi в отличие от HLapi предоставляет пользователю самому решать какие данные передавать, как организовывать передачу и тд, что очень подходило мне. По LLapi было мало качественной информации, только техническая документации с описанием самого API.

Когда я уже почти разработал методы передачи данных через LLapi я вдруг понял что начал не с того, я забыл что первым делом мне нужно было организовать само подключение игроков друг к другу, а только потом уже организовывать передачу данных между ними. Значит переходим к следующему этапу - Matchmaking, и вот здесь меня ждало первое разочарование. Как оказалось для того чтобы игроки могли искать друг друга и подключаться к целым комнатам, нужно было подключить игру к системе Matchmaking который полностью контролировался серверами unity и что самое ужасное был ПЛАТНЫМ. Зайдя в сервисы unity можно увидеть сколько будет стоить ваш будущий Matchmaker, который будет искать и собирать игроков для игры по сети. О ужас, где же ваши обещания сделать unity полностью бесплатным!? - именно так unity разводит начинающих разработчиков на деньги: "Хочешь игру по сети - плати!".

Перейдя в более глубокое чтение документации, я узнал, что оказывается для полноценной работы необходимо также подключать систему "смены хостов", так как unity обменивается данными именно между игроками, а не с сервером, то в случае отключения самого хоста необходимо его заменить новым игроком иначе игра прекращалась, хотя благо эта система была уже в стандартном наборе и требовала лишь правильной настройки. После долгих раздумий я решил, что создавать мультиплеер на такой системе да еще и ПЛАТНОЙ не буду! И тут же начал поиски других сетевых решений.

Photon cloud - другая очень хорошая сетевая система(по крайней мере в рекламе говорится что лучшая для unity). Теперь когда я уже более-менее имел представления о работе сети, я в первую очередь начал внимательней читать документацию и основательно разбирать API системы. Но в итоге и от этой системы мне тоже пришлось отказаться. Хоть и photon cloud был бесплатным в плане поиска игроков и игры по сети так как рассматривал минимальное предложение, я выделил для себя его некоторые недостатки: photon передает данные между игроками так как серверные возможности не доступны для разработчика, так же как и мультиплеер в unity предоставляет HLapi по организации и передаче данных, что в моем случае не было необходимостью, большой и сложный набор API для более глубокой работы системы, что было также мне не нужно так как я собирался передавать минимум данных. В общем мне пришлось также отказаться и от Photon cloud, хоть он имеет и более щадящие предложения для разработчика в отличие от unity.

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


PlayerIO - мультиплатформенное сетевое решение для многопользовательских приложений. Данный сервис предлагает свое сетевое API для обеспечения коммуникации игроков через "сервер", а также базу данных, файловый архив, доступом к социальным сетям и систему внутриигровых покупок.

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

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

Почему PlayerIO, а не unity network?

Unity network предлагает сетевые возможности прямо, как сказать, "из коробки", есть куча документаций, уроков, проектов, что и привлекает начинающих разработчиков, которые воодушевившись мечтами об "игре по сети" тут же начинают использовать данную систему чем и пользуются unitech зарабатывая на наивных разработчиках вроде меня. К счастью для тех кто идет дальше существуют сервисы вроде PlayerIO которые также предлагают свои услуги для многопользовательских приложений.

Unity network работает по схеме "от игрока к игроку", то есть обычно данные передаются между игроками через игрока - хоста, который является и сервером и игроком одновременно. Такая система изначально имеет больше недостатков чем преимуществ, главная из них - потеря связи с хостом(сервером) который является центром обработки данных, хотя unitech и попытались залатать эту дыру системой смены хостов в новой версии network. PlayerIO работает по принципу "от игрока к игроку через сервер", то есть данные от одного игрока прежде чем передадутся другим игрокам проходят обработку на "сервере". В этом случае вы можете контролировать от какого игрока приходят данные, что это за данные, и что с ними делать дальше.

К примеру: если мы используем unity network то для синхронизации каких то данных достаточно их пометить нужным атрибутом, вы(то есть хост) не контролирует как сами данные синхронизируются, он просто их принимает, что дает легкий повод для "читерства", в случае PlayerIO данные приходят на сервер, где мы можем их сравнить с базой данных игрока, которые расположены независимо на самом "сервере", и выявить угрозы "читерства" в игре.

Unity network предлагает два вида сетевых решений, это HLAip и LLApi. HLApi - высокоуровневая организация сети, при использовании этого api система берет на себя практически все обязанности по работе с сетью, вам лишь достаточно правильно ее настроить и наслаждаться игрой. LLApi - низкоуровневая организация сети, в этом случае система предоставляет самому разработчику решать какие данные и как будут передаваться между игроками. Недостаток этих систем заключается в том что, чтобы их использовать вам нужно подключить систему Matchmaking которая будет искать и соединять игроков по сети, а предоставляет она свои услуги за периодическую оплату. PlayerIO также предлагает некоторые свои услуги за оплату, но в базовую(бесплатную) комплектацию входит весь ее функционал для создания и поддержания полноценной сети, базу данных, файловый архив, систему поиска игроков и "серверов", а также полноценную статистику для контроля работы сети.

В итоге можно сказать, что если вы являетесь инди разработчиком, сервисы подобно PlayerIO решают большинство ваших проблем с организацией сети не создавая пары новых как в случае с unity network и их жаждой заработать на наивных пользователях.

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

следующая часть->

Автор: этот хрен.

ПС. Если у вас есть замечания или пожелания по этой статье с удовольствием их выслушаю, так как я сам начинающий разработчик и буду рад любой критике.
Последний раз редактировалось ilka 08 июл 2016, 21:40, всего редактировалось 1 раз.
ilka
UNIверсал
 
Сообщения: 478
Зарегистрирован: 21 авг 2015, 19:32

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение Syberex 05 июл 2016, 09:16

Полезная информация, спасибо :) Сам тоже выбираю сетевое решение, но глубоко разбираться не начинал.

А для PlayerIO требуется в клиенте подключать какие либо dll-ы или нет? :-w
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение bwolf88 05 июл 2016, 17:03

Сам тоже выбираю сетевое решение, но глубоко разбираться не начинал.

Только сокеты, только хардкор \m/
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение lawsonilka 05 июл 2016, 19:28

Сам тоже выбираю сетевое решение, но глубоко разбираться не начинал.

PlayerIO тот случай когда сервис подходит именно конкретному приложению, а не в большинстве случаев - я писал почему он мало популярен.
А для PlayerIO требуется в клиенте подключать какие либо dll-ы или нет?

Я все буду разбирать подробно в следующих частях, но если вам срочно надо ответит то: да нужно.
Только сокеты, только хардкор

Я тоже думал глубоко копнуть сеть, но решил что мне не нужен настолько низкоуровневый апи иначе закончу проект намного позже, хотя потом обязательно буду разбирать.
lawsonilka
UNIверсал
 
Сообщения: 390
Зарегистрирован: 21 окт 2014, 14:48

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение Ert Donuell 05 июл 2016, 19:38

Syberex писал(а):Сам тоже выбираю сетевое решение


Похоже, вопрос сети нонче стоит остро. Надо бы поторопиться мне со своей сетью. С нуля переписал почти.
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение lawsonilka 05 июл 2016, 19:43

Ert Donuell писал(а):
Syberex писал(а):Сам тоже выбираю сетевое решение


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

Я помню вашу тему о PlayerIO в 2011 году, ну как не пошло?
lawsonilka
UNIверсал
 
Сообщения: 390
Зарегистрирован: 21 окт 2014, 14:48

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение Ert Donuell 05 июл 2016, 19:52

Эту?)
Я его только нашёл, но не пользовался) У меня своё сетевое решение.
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение lawsonilka 05 июл 2016, 19:57

Ert Donuell писал(а):Эту?)
Я его только нашёл, но не пользовался) У меня своё сетевое решение.

Да, я все самые полезные материалы перечитал по нему, и удивился когда увидел здесь тему 2011 года, даже думал не писать статью т к мало ли о системе многое уже известно на этом форуме :)
lawsonilka
UNIверсал
 
Сообщения: 390
Зарегистрирован: 21 окт 2014, 14:48

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение Ert Donuell 05 июл 2016, 20:06

Мне он кажется малость негибким) Судя по туторному коду.
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение lawsonilka 05 июл 2016, 20:07

Ert Donuell писал(а):Мне он кажется малость негибким) Судя по туторному коду.

так и есть, именно это я и записал в его недостатки в статье.
во-вторых он так же мало популярен и у опытных разработчиков в виду своей слабой гибкости и капризности
lawsonilka
UNIверсал
 
Сообщения: 390
Зарегистрирован: 21 окт 2014, 14:48

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение Syberex 05 июл 2016, 21:24

Ert Donuell писал(а):
Syberex писал(а):Сам тоже выбираю сетевое решение


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

Теперь после достаточно подробного разбора unity network вы можете написать сравнение со своей сетью ;)
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение Ert Donuell 05 июл 2016, 21:49

Syberex писал(а):Теперь после достаточно подробного разбора unity network вы можете написать сравнение со своей сетью ;)


Теперь можно сразу две сети за пояс заткнуть :D
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение lawsonilka 06 июл 2016, 07:19

Теперь можно сразу две сети за пояс заткнуть

ну попробуйте, может быть потом и про вашу систему напишу статью :)
lawsonilka
UNIверсал
 
Сообщения: 390
Зарегистрирован: 21 окт 2014, 14:48

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение Ert Donuell 06 июл 2016, 10:08

lawsonilka писал(а):
Теперь можно сразу две сети за пояс заткнуть

ну попробуйте, может быть потом и про вашу систему напишу статью :)

Щикаарно!
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Мультиплеер в деталях для чайников[PlayerIO].Часть 1

Сообщение playsetler 05 апр 2017, 11:58

И где нахрен следующие части???
playsetler
UNец
 
Сообщения: 22
Зарегистрирован: 18 авг 2015, 19:54

След.

Вернуться в Уроки

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

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