Gamedev Andrey Apanasik
1 640

UnnyNet: решение для быстрой интеграции чата, гильдий, ачивок и прочих социальных фич в вашу игру на Unity3d

Салют, котаны. В процессе разработки игр мы столкнулись с тем, что приходилось самим реализовывать раз за разом кучу второстепенного функционала. И с каждым новым проектом эти проблемы появлялись снова и снова. А хотелось бы чего-нибудь вроде...Battle.Net?! Как минимум, хотелось, чтоб у игроков был один общий аккаунт между всеми нашими играми. Затем можно навесить поверх этого систему друзей и кросс-чат. Дальше-больше.

В закладки
Аудио

Почитать про нас можно в прошлых статьях.

Для нашей последней игры Hero Masters мы начали работу над таким сервисом. Изначально технологически мы строили это дело вокруг технологий, с которыми раньше работали: consul.io для сервис дискавери, Rethinkdb как основное хранилище, небольшие резвые сервисы на node.js. В какой-то момент мы осознали, что разработчиков, которые сталкиваются с похожей проблемой, довольно много. Ведь хочется работать именно над игрой, а не тратить уйму времени на, конечно важные, но не кор фичи. Так и родился UnnyNet.

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

Немного про технологии

Под капотом у нас Nakama от Heroic Labs. Эти парни как и мы прошли через Y Combinator и предоставляют интересное решение для гейм-девелоперов. Nakama написана на Go. Для вас, как разработчика, это не особо важно. Но если возникнут какие-то проблемы или вам нужно будет что-то допилить, то в коде легко разобраться и добавить необходимое. А сборка бинарника происходит одной командой ٩(◕‿◕。)۶

Также Nakama предоставляет возможность самим писать небольшие модули на Lua, если вам не хватает какого-то функционала из коробки.

Дополнительные сервисы у нас написаны на node.js.

Клиент на React.js.

Решение пока только для Unity3d (Android + iOS). Но работаем над возможностью встроить в WebGL/HTML5 игры.

Добавить плагин в ваш проект - дело пары минут:

Фичи

На данный момент есть чат, гильдии, ачивки, лидерборды, система друзей.

В чате разработчик может создать несколько различных каналов и задать картинку для них, если хочет.

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

Разработчик может назначить тип ачивки (разовая, инкрементная и т.п) и количество очков в награду.

Лидерборды, собственно, тоже обычные:

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

Сотрудничество с PlayMaker

Недавно мы начали сотрудничать с тулзой для визуального программирования - PlayMaker .

4
14

Теперь интегрировать UnnyNet стало ещё проще!

Что дальше?

По фидбеку от разработчиков, которые уже попробовали UnnyNet, мы увидели, что людям очень нужна удобная система модерации чатов. На данный момент это задача номер 1 для нас. Работаем над системой разграничения прав. Админ игры сможет пользователям назначать роли с конкретными пермишеннами.

Заключение

На данный момент мы ищем небольшие инди команды, которые хотели бы опробовать продукт. Интересно ваше мнение, в какую сторону развивать сервис, какие фичи вы хотели бы увидеть следующими.

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Andrey Apanasik", "author_type": "self", "tags": [], "comments": 39, "likes": 43, "favorites": 95, "is_advertisement": false, "subsite_label": "gamedev", "id": 42468, "is_wide": false, "is_ugc": true, "date": "Mon, 11 Mar 2019 07:22:48 +0300" }
{ "id": 42468, "author_id": 1922, "diff_limit": 1000, "urls": {"diff":"\/comments\/42468\/get","add":"\/comments\/42468\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/42468"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }

39 комментариев 39 комм.

Популярные

По порядку

Написать комментарий...
1

Спасибо за материал.

Можно такой вопрос, чем ваше решение лучше аналогичного от Google Play Games Services / GameCenter?

Ответить
2

Для Android нужно прикручивать GPG, для iOS их ГеймЦентр и т.д, а тут всё в одном месте. Плюс, Ачивки/Лидерборды - это лишь часть функционала. Я не припомню, чтоб GPG предоставлял чат и систему друзей ^_^

Ответить
1

о, это крутая тема! С полгода назад искали варианты чего-то подобного для своей игры. Обязательно глянем.

Ответить
1

Чем не устроили GameSparks, PlayFab и другие уже существующие решения?

Ответить
0

Основная идея была в простоте добавления решения. Юнинет полностью автономен, включает в себя и UI, и серверное решение, т.е не придётся даже собирать окна. Ну и мы не чарджим разработчиков за базовый набор фич, что очень важно для инди. При этом нет ограничений никаких по CCU, MAU.

Ответить
0

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

Ответить
0

Для нашей последней игры Hero Masters мы начали работу над таким сервисом

А зачем? Игра обычная "стенка на стенку" с автоматическим всем, то есть персонажи сами бегают и воюют, а игрок иногда рисует, свапает и тапает. Зачем для игры, где толком играть нельзя, нужен свой типа лаунчер?

Ответить
2

Так это не лаунчер. Это плагин (если мы говорим про Юнити), позволяющие добавить в игру всякие социальные фичи типо чата. Или я вас не правильно понял? о_О

Ответить
–1

А хотелось бы чего-нибудь вроде...Battle.Net?!

добавить в игру всякие социальные фичи типо чата

Хм, у вас под это подходит только Hero Masters и то с огромной натяжкой. В эту игра вообще кто нибудь больше двух часов играет? Я в неё поиграл пару часов и надоело. Всё одно и тоже - персонажи дерутся сами, а ты делаешь заклинания. В разных менюшках больше играешь чем в самом бою. Всегда удивляло почему делают автобой. Это же не интересно. Почему никто не стал делать бой как в дисциплс, где тоже стенка на стенку, но есть какая-то тактика.

Ответить
0

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

Ответить
2

У Hero Masters был низкий ретеншен. А ресурсов (времени и людей) кардинально переделать игру у нас нету. Какой смысл пинать дохлую лошадь?

Ответить
0

Никакого хейта, просто вопрос - почему вы изначально беретесь за онлайн игры?

Ответить
0

Hero Masters, в целом, оффлайн игра, если что. А Unnyworld делали, т.к. на тот момент не было таких игр на рынке. Если б раньше релизнулись, то был бы шанс доработать игру.

Ответить
0

Ну не знаю, может вы просто с продвижением не особо парились. Не пробовали искусственный "вывод в тренды" Стима заказывать?

Ответить
0

Мы, если честно, вообще не думали, что в Steam будет какой-то эффект. А по факту, самые заинтересованные пользователи как раз были в Стиме =/

Ответить
0

1) Disciples - это, всё же, более, хм, хардкорная игра.
2) Disciples - это PC игра.
3) Hero Masters - последняя попытка удержать компанию на плаву. У нас уже не было ресурсов на длительную разработку, ассеты все из старой игры были взяты.

Если бы был неплохой ретеншн, то мы бы продолжили разработку при сотрудничестве с издателем. Но не вышло...

Ответить
1

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

Ответить
0

О, ребят, а расскажите ка, правильно ли я понял, что вы запустили это под брендом компании, которая принимала инвестиции для игры? Таким образом инвесторы получается владеют и частью этого вашего сервиса, не так ли?

Ответить
1

Другая компания. Компания, которая делала игры, совсем не при делах. Но мы, всё же, надеемся, что в будущем вернёмся к разработке игр. Поэтому её пока не закрыли.

Ответить
0

А почему приняли такое решение? Как к этому отнеслись инвесторы? Вы ведь взяли разработки одной компании и на базе этого начали новый бизнес. Не черевато ли это проблемами?

Ответить
1

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

Ответить
0

Хера вы там данных собирать решили, зачем оно вам?

The types of data we collect are:

• Forename;
• Surname;
• Age/date of birth;
• Birth number;
• Sex/gender;
• Photograph;
• Marital status;
• Contact details including email address;
• Education details;
• Employment history;
• Emergency contacts and details of any dependents;
• Referee details;
• Immigration status including a valid work permit;
• Nationality/citizenship/place of birth;
• A copy of your driving licence and/or passport/identity card;
• Financial information (where we need to carry out financial background checks);
• National insurance number (or equivalent in your country) and any other tax-related information;
• Diversity information including racial or ethnic origin, religious or other similar beliefs, and physical or mental health, including disability-related information;
• Details of any criminal convictions if this is required for a role that you are interested in applying for;
• Details about your current remuneration, pensions and benefits arrangements;
• Information on your interests and needs regarding future employment, both collected directly and inferred, for example from jobs viewed or articles read on our website;
• Extra information that you choose to tell us;
• Extra information that your referees chooses to tell us about you;
• Extra information that our Clients may tell us about you, or that we find from other third party sources such as job sites;
• IP address; and
• The dates, times and frequency with which you access our services
Please note this list is non-exhaustive.

Ответить
1

Cейчас очень жесткие правила ввели и с ними лучше перестраховаться. Что касается конкретно нас, то сейчас мы почти ничего из этого не собираем, однако в ближайшее время планируем добавление авторизации через соц сети и запуска аналитики для разработчиков. Вот после этого кол-во собираемых данных увеличиться. Вообще этот док для конечного пользователя, а не разработчика больше. Его наличие - требования в Европе и Штатах. Мы на себя забираем с вас всю ответственность по GDPR и прочим правилам, если, конечно, вы дополнительно у себя копию данных не храните.

Ответить
0

Это дженерик privacy. Но да, нужно бы поправить. Спасибо, что напомнили)

Ответить
0

На самом деле, это для подстраховки. В свете всяких GDPR и т.п. лучше перебдеть, чем недобдеть.

Ответить
0

если разработчик не способен реализовать подобную элементарную базу своими силами, возникает вопрос - за каким лядом он вообще взялся за онлайн проект?

Ответить
0

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

Ответить
0

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

Ответить
1

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

Ответить
0

Юнити фи, анрил уанлав!

Ответить
0

А зачем сотрудничать с PlayMaker, если уже в Unity2019 будет свое визуальное программирование?

Ответить
0

Почему бы и нет? Особых времязатрат на это не было. Интересное партнёрство.

Ответить
0

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

Ответить
0

Покажите инди с 1млн дао)

Ответить
0

А если без шуток, то всё масштабируется. У базы пока 3 ноды в кластере, но можно докинуть. Если у нас будет клиент с 1млн DAU, то смашстабируемся, думаю, без проблем. Мы это уже не раз обдумывали/обсуждали с тиммейтом.

Ответить
–1

Только движок называется Unity, а не Unity3d

Ответить
0

https://unity3d.com/ru/legal/branding_trademarks

Ссылаясь на нашу компанию, используйте “Unity Technologies.” Ссылаясь на движок Unity, пишите “Unity®” или “Unity®Pro” (не Unity3d)

Ответить
1

У меня просто Unity ещё с гномовской гуятиной ассоциируется.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
В Steam появилась функция продажи
подержанных цифровых копий игр
Подписаться на push-уведомления