Мультіплеер в деталях для чайників playerio

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

Привіт, цю не хитру статтю поділену на кілька частин, я хотів би присвятити в черговий раз мультиплееру в unity заснованого на роботі з сиcтемах PlayerIO. У цій статті я спробую провести невеликий екскурс по самій системі, розповісти чому вибрав саме цю систему для статті, а не стандартне рішення від unity. виділити її особливості і недоліки, спробувати написати найпростіший клієнт-сервер, а головне спробувати розглянути всі можливі підводні камені з якими мені доводилося зустрічатися за час роботи з цим сервісом. Метою статті є можливість показати і розширити межі роботи з мережею в unity для початківців розробників, яким є і я сам.

Невеликий відступ, історія страждань.

Прихований текст: показати

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

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

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

Після всіх цих пошуків і витрачених днів практично в порожню адже розробка гри стояла на місці, я вирішив вибрати для себе що саме мені потрібно отримати в результаті від мультиплеєра: передачу саме тих даних які я вкажу, передачу саме тим способом який мені підходить і головне мені потрібен був сервер через який я сам буду контролювати пошук гравців, їх підключення, відключення і перепідключення. Значить потрібно було шукати систему близьку до у низкоуровневой # 40; тобто LLapi # 41 ;, але досить організованою, щоб не починати з нуля - писати свою систему у мене так само не було ні часу, ні повноцінних знань.

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

Чому 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. а також розберу її основні повноваження.

ПС. Якщо у вас є зауваження або побажання по цій статті із задоволенням їх вислухаю, так як я сам початківець розробник і буду радий будь-якої критики.

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

Схоже, питання мережі нонче стоїть гостро. Треба б поквапитися мені зі своєю мережею. З нуля переписав майже.


Тепер після досить докладного розбору unity network ви можете написати порівняння зі своєю мережею

Syberex писал (а): Тепер після досить докладного розбору unity network ви можете написати порівняння зі своєю мережею

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