mopsicus

mopsicus

Делаю игры на Unity
Пикабушник
3385 рейтинг 3 подписчика 11 подписок 8 постов 4 в горячем
Награды:
5 лет на Пикабу

Фреймворк для онлайн игр

Всем привет! Запушил на гитхаб свой пет-проект. Это фреймворк для онлайн игр и приложений написанный на Node.js и Typescript, клиентская часть на Unity и C#.

Для чего это всё?

Можно делать многопользовательские онлайн игры и билдить под Android, iOS и WebGL, бесплатно, без регистрации и смс. Сейчас расскажу подробнее.

Давным-давно был такой проект на гитхабе Pomelo. По меркам интернета – реально древний, ему больше 10 лет. Он и сейчас там есть, но уже заархивирован и не поддерживается, но форки вроде пилятся. Кто первый раз слышит, это фреймворк для создания игровых серверов на JavaScript и Node.js. Проект довольно большой, куча модулей, клиенты под разные платформы, хорошая дока. Наткнулся я на него несколько лет назад и начал ковырять, запускать, что-то пробовать. В итоге, многие вещи в нём мне понравились, но показалось всё как-то замудрёно что ли. Наверно потому что китайцы писали, а может я в ноду не сильно мог 😅 В общем, оттуда я потягал какие-то скрипты, интересные решения, потом переписал, упростил и, получился у меня такой лайтовый сервер из нескольких файлов, на котором я тестил всякие свои проекты, изучал Node.js, JavaScript и TypeScript позднее.

Когда что-то стало получаться, переписал всю серверную часть на TypeScript и всё это дело стало обретать какой-то полезный вид. И вот, в результате n-ой итерации, архитектура устоялась, протестировалась и получился Shardy.

Shardy – это фреймворк для онлайн игр и приложений на Node.js. Он даёт базовую функциональность для построения микросервисных решений: мобильных, социальных, веб, многопользовательских игр, приложений реального времени, чатов, middleware сервисов и т.п. Есть клиент на TS встроенный в фреймворк, а также пакет для Unity, который поддерживает сборки под iOS, Android и WebGL.

Основные фичи:

- микросервисная парадигма
- простой API: RPC, команды, подписки и т.п.
- транспорт данных через сокеты и вебсокеты
- легкость и быстрота: Node.js и TypeScript
- поддержка пользовательской сериализации
- поддержка пользовательской валидации рукопожатий (handshake)
- продвинутый логгер: теги, фильтры, области
- справочные материалы: документация, сниппеты, примеры
- почти нулевая конфигурация

Есть демка с примерами работы API и простенькая онлайн игра "Крестики-Нолики": как серверная часть, так и клиентская. Всё можно посмотреть, поковырять, запустить у себя и попробовать поиграть. Весь код старался комментировать, иногда даже излишне. Также есть документация с описанием всех компонентов и методов. Это всё в процессе наполнения и улучшения.

Ниже, пример WebGL билда с игрой "Крестики-Нолики".

В примере реализовано:

  • старт/остановка поиска свободных игр

  • простой матчмейкинг

  • отправка команды хода игрока

  • отправка команды выхода из игры

  • обнаружение ничьей и конца раунда

  • сохранение текущего счёта

Основная цель Shardy – предоставить простое бесплатное решение для создания многопользовательских онлайн игр. Вот так вот громко 😅 На это будет обращено основное внимание при дальнейшей разработке новых функций, сервисов и туторов (было бы время...).

Да, пока это голый фреймворк без полезной нагрузки в виде готовых каких-то решений, модулей, примеров игр и т.п. И да, входной порог есть, нужно уметь в Node.js и Typescript, чтобы делать серверную часть. Поэтому буду добавлять полезности по мере возможностей.

Приглашаю всех заинтересованных инди и не только, посмотреть, покрутить, примерить, потестить на своих каких-то задачах, играх, проектах, прототипах. Если будут вопросы, отвечу тут в комментах или на почту mail@mopsicus.ru.

Shardy

Shardy for Unity

Shardy Tic-Tac-Toe server

Docs

Показать полностью 1

Морской Бой

Я к вам с нашей новой игрой! Считаю мы сделали лучший мобильный Морской Бой :) Быстрые партии, приятная графика и отсутствие рекламы.

Помимо классического режима с давно известными правилами, есть расширенный, с оружием: мины, подводная лодка, радар и РЭБ. Комбинируйте разные расстановки и оружие для создания выигрышной стратегии.

И да, у нас не тетрадный стиль!

Делали на Юнити, пока никаких годотов и анрилов :) Многие технические подробности можно прочитать в другом посте, фреймворк тот же, свой.

Google Play

AppStore

AppGallery

Вопросы и комментарии приветствуются!

Показать полностью

АДМ Томск - Ростов-на-Дону

Получил свой подарочек. Сказать, что я был удивлён и рад – значит ничего не сказать :) Увесистая коробка, а внутри...

АДМ Томск - Ростов-на-Дону Обмен подарками, Тайный Санта, Благодарность, Вкусняшки, Дед Мороз, Новый Год

Всё заботливо упаковано и подписано, подозреваю что мой дедушка мороз – не дедушка, а снегурочка 😁

АДМ Томск - Ростов-на-Дону Обмен подарками, Тайный Санта, Благодарность, Вкусняшки, Дед Мороз, Новый Год

Видно что подарок готовился и выбирался под меня :) Это очень приятно. Куча сладостей, орешков, мйод из шишек, огромные носки с овчаркой, книга и ИРП. У меня было написано, что я готовлюсь к зомби апокалипсису)) В прошлый раз мне подарили классный набор для выживания, теперь еда, штош, я почти готов 😎

Спасибо моему дедушке за такой классный подарок!

Показать полностью 2

Герои Гильдгаарда. Логическая онлайн стратегия

Герои Гильдгаарда. Логическая онлайн стратегия Blender, Unity, Gamedev, Разработка, Логические игры, Настольные игры, Unity3D, Стратегия, Мобильные игры, Инди игра, Инди, Разработчики игр, Игры, Шашки, Видео, YouTube, Длиннопост

Герои Гильдгаарда

Друзья, мы тут закончили разработку нашей новой онлайн игры, поэтому перед полноценным релизом хочется немного рассказать про неё, про какие-то технические подробности, да и вообще как из 2D пришли в 3D (почти).

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

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

Когда в одной клетке скапливается 4 шашки, они разлетаются в соседние клетки на 4 стороны. Если в это время в соседней клетке были шашки противника, они переходят к игроку сделавшему ход (меняют цвет). Собственно, это самое интересное: если в результате хода и разлёта шашек, в какой-то клетке снова скапливается 4 шашки, то процесс продолжается пока все шашки не разлетятся по своим местам. Как это примерно выглядит:

На видео выше просто пример, слабенькое комбо, под конец партии могут быть довольно эпичные камбеки.

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

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

Герои Гильдгаарда. Логическая онлайн стратегия Blender, Unity, Gamedev, Разработка, Логические игры, Настольные игры, Unity3D, Стратегия, Мобильные игры, Инди игра, Инди, Разработчики игр, Игры, Шашки, Видео, YouTube, Длиннопост

Расширенный режим

Также, можно смотреть другие игры в реальном времени (если она не приватная), гамать с друзьями закрытые партии, общаться в чатике, обмениваться фотками, дарить подарки, играть одним аккаунтом на iOS и Android и прочие радости. Это всё можно прочитать в описании на страничке в сторе. А ещё, у нас нет рекламы (только ревардед). Раунд!

Почему Герои? Почему Гильдгаарда?

По задумке, Гильдгаард – это королевство, где золото самый важный ресурс за который идёт борьба. Заработанное в боях золото можно будет тратить. В общем-то отсюда и название: gild – золотить, ну а окончание -gaard, это популярное окончание датских городов и фамилий, которые означают к кому относится данная территория. Вот такой этимологический мини-экскурс, а не отсылка к Ведьмаку :)

Герои тоже были придуманы не просто так. У каждого своя история и, если всё пойдёт как мы хотим, то в одном из обновлений к игре добавится интересная мета. Об этом пока умолчу.

Сейчас доступны 3 арены где можно показать своё мастерство и заработать голду, 8 героев (4 доступны сразу), и разные айтемы чтобы “выделяться” в топе игроков.

Немного про техническую часть

У нас большой опыт в разработке мобильных онлайн игр. В основном жанра: настольные. Некоторые из них, шутка ли, уже 10 лет! в топе в Google Play и AppStore. Ну и наверняка многие играли в наши карточные игры, нарды, шашки, домино и другие. Все они в 2D, некоторые на LibGDX, другие на SpriteKit, а все последние делаем уже на Unity.

Герои тоже на Unity. Но в отличии от предыдущих игр, где было достаточно 2D, мы решили поэкспериментировать с 3D. Модельки, свет, партиклы, вот эти все штуки. Мы не используем сторонние ассеты, почти всё своё. Исключение составляют какие-то известные и проверенные библиотеки, например, DOTween. Вот кратко что используем:

  • External Dependency Manager – мастхев штука для мобильной разработки, подтягивает все зависимости

  • SafeArea – один скриптик для того чтобы ваш UI не залазил на вырезы и дырки в экране

  • DOTween – движок для анимирования, на нём делаем эффекты UI, да и самой игры

  • Leopotam – нельзя не отметить вклад Леопотама, использую его скрипты, почти все допилинные, сейчас они уже недоступны на его гитхабе, он больше по ECS

  • UnityIngameDebugConsole – прекрасная штука для отладки на девайсе, можно биндить свои команды, смотреть лог итд

  • UI Soft Mask – мягкая маска для UI

  • Graphy – ещё один отличный инструмент для дебага на девайсе

  • Собственно это всё что взяли со стороны :)

В основе лежит наш фреймворк, который оброс интересными возможностями:

  • Сетевая часть: RPC, events, многосерверность, поддержка SSL и прочее

  • UI binding

  • Набор UI компонентов: попапы, бесконечные списки, туглы, модальные окна итд.

  • Менеджер сцен и экранов с дозагрузкой

  • Работа с HTTP

  • Загрузка и кеширование картинок

  • Менеджер корутин

  • Работа с эмоджи

  • Менеджер сообщений. За основу взяли штуку на интерфейсах и допилили под свои нужды

  • Локализация и другие табличные данные через Google Sheets (тут снова привет Леопотаму :)

  • Большой набор билд скриптов. Про это я немного писал на DTF. Теперь это выглядит как-то так и улучшается:

Герои Гильдгаарда. Логическая онлайн стратегия Blender, Unity, Gamedev, Разработка, Логические игры, Настольные игры, Unity3D, Стратегия, Мобильные игры, Инди игра, Инди, Разработчики игр, Игры, Шашки, Видео, YouTube, Длиннопост

Наш кастомный билдер под разные платформы, экономит кучу времени

  • Набор плагинов для Android, Huawei и iOS:

    • Apple Sign in

    • Google Sign in

    • Huawei Sign in

    • Встроенный браузер

    • Работа с камерой и галерей

    • Нативное поле ввода

    • Покупки

    • Реклама

    • Push уведомления

    • Отправка почты

    • Шаринг

    • In-app review и другие. Об этом писал как-то тут.

  • Еще у нас свой remote конфиг, менеджер звуков, шифрование, liveops штуки итд

Все модельки сделаны в Blender. Потом делали ретопологию, потом запекали свет, анимации и всё это импортировали в Unity. Получилось вроде симпатично. Вот так выглядели почти законченные первые герои:

Герои Гильдгаарда. Логическая онлайн стратегия Blender, Unity, Gamedev, Разработка, Логические игры, Настольные игры, Unity3D, Стратегия, Мобильные игры, Инди игра, Инди, Разработчики игр, Игры, Шашки, Видео, YouTube, Длиннопост

Все герои на текущий момент

А вот так выглядел самый первый прототип, когда ещё не было понятно, пойдет игра в продакшн или нет:

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

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

Вообще каких-то особых проблем с 3D не возникло, хорошо оптимизированные модельки и запечённый свет решают много проблем :) Но у нас и каких-то замороченных сцен, травы, воды и прочего нет. Для первого раза решили не мудрить, если пойдет – будем дальше в 3D что-то поинтересней делать.

Если говорить про код, банально, но кодим чтобы поменьше мусора было, тогда всё будет плавно и красиво. Не всегда это конечно получается, но стремимся. Каких-то визуальных штук не используем, типа PlayMaker, Bolt или что там ещё есть. ECS тоже пока не приходилось в прод запускать, так, побаловались просто. Да, на монобехах, да не дрочим на SOLID, пользуемся тем чем удобно, чтобы работало хорошо и было понятно)

Вот такая коротенькая история про нашу новую игру. Когда будут какие-то метрики, постараюсь поделиться тем чем можно. Если интересны какие-то детали – пишите в комменты, попробую ответить всем.

Хороших и интересных игр!

Играть в Гильгаард на Android

Играть на iOS

Играть на Huawei

Твиттер

PressKit

Небольшая просьба: если нашли баг, напишите пару строк на hg@magicboard.games, постараемся побыстрее исправить и сделать апдейт. Плохие оценки в сторе так сложно исправлять :(

Показать полностью 3 3

Не загружается черновик

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

Не загружается черновик Ошибка, Редактор

Что за девайс?

Дальше снять не получилось, похоже на спутниковую тарелку

Конец мобилизации

Конец мобилизации Мемы, Мобилизация, Ворота, Призыв, Картинка с текстом, Мат
Конец мобилизации Мемы, Мобилизация, Ворота, Призыв, Картинка с текстом, Мат

Фильтр неинтересных постов

Всем привет.

Хочу рассказать о своём небольшом скрипте, который вырос и стал почти полноценным сервисом.


Пару лет назад, я написал для себя небольшой скрипт который удалял посты из ленты ВК по ключевым словам. Добавляешь слово в словарь и если оно встречалось в посте – то пост исчезал. Просто вырезал из ленты, как будто его и не было. Отписываться от групп не хотелось, потому что подавляющее количество постов было норм. Но со временем, рекламных и различных репостов стало очень много, особенно по тематическим пабликам и группам. Поэтому сделал такой велосипед.


Позже добавил поддержку Фейсбука и Твиттера, по такому же принципу. Ещё стал фильтровать выдачу в Яндексе, Гугле и Бинге. Сначала была идея к запросу добавлять минус-слова, но это работало как-то через раз, особенно, если в словаре было много слов. Ну и в конце, вообще стал вырезать «неинтересные блоки» с любого сайта. Бонусом: удалял некоторую рекламу. Хотя AdBlock у меня тоже был. Ну и как-то всё это заработало и очистило мой браузер от всего мне ненужного. Так появилось расширение для браузера Riddut. Как оборонительный, только от информационного шума. AdBlock для контента.

Фильтр неинтересных постов Расширение, Блокировка рекламы, Блокировка, Фильтр, Длиннопост

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


Что умеет Riddut:

- удалять любое упоминание стоп-слова на любом сайте

- удалять посты и рекламу из соц. сетей Фейсбук, ВКонтакте, Одноклассники, Твиттер по ключевым словам

- удалять позиции в выдаче и рекламу поисковых систем Яндекс, Гугл, Бинг

- фильтровать дозагруженный контент

- работать с белыми списками сайтов

- понимать русскую и английскую морфологию (не полностью)

- синхронизироваться между браузерами

- показывать красивую статистику «сэкономленного» времени :_)


Результат работы выглядит примерно так:

Фильтр неинтересных постов Расширение, Блокировка рекламы, Блокировка, Фильтр, Длиннопост

Есть версии для Chrome, Safari и Opera. С Firefox пока не разобрался в чём проблема, но думаю решу.


https://riddut.mopsicus.ru

Показать полностью 2
Отличная работа, все прочитано!