Buffer icon Проекты
134 заметки с тегом

unity

Shardy

Shardy

Shardy

Shardy

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

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

Потом решил поделиться своими поделками и выложить на гитхаб. Когда было свободное время что-то дописывал, переписывал и снова забывал, потому что были задачи поважнее. В какой-то момент, переписал всё на TypeScript (TS). К тому времени уже были наработки не только сервера, но и клиента на C# + Unity и всё это дело стало обретать какой-то полезный вид. И вот, в результате n-ой итерации, архитектура устоялась, протестировалась и получился Shardy.

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

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

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

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

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

Не претендую на академическую правильность архитектуры и кода, делал в первую очередь для своих нужд. Но как показал опыт: зачастую многие принципы ООП, чистого кода, использование паттернов в «нужных» местах, разбиваются об реальность конкретного проекта :)

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

Вот такое интро. Всем хороших игр! Онлайн игр :)

Shardy
Shardy for Unity
Docs

 Нет комментариев    103   1 мес   android   ios   nodejs   typescript   unity   webgl   игры   проекты   с#

Морской Бой Онлайн

В телеграме запостил, а тут забыл совсем: встречайте лучший (по нашему мнению :) мобильный Морской Бой Онлайн aka Sea Battle aka Fleet Battle aka Warships на минималках. Это классическая игра из детства, в онлайн исполнении, с новыми возможностями, в пиратском стиле! 🏴‍ (да, у нас не тетрадный стиль!)

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

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

И да, игра на Юнити 🤪 Пока никаких Годотов и Анрилов.

Google Play
AppStore
AppGallery

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

Мы играли наверно во все мобильные морские бои, скомпилировали лучшее от всех, убрав всё худшее, добавили своё уникальное. В некоторые игры иногда невозможно играть из-за агрессивной рекламной монетизации, буквально после каждой партии реклама, а у некоторых и на возврат в основное меню тоже 🙄🤯 Когда играть-то?

В общем, присоединяйтесь к нашему морскому бою, играйте с друзьями и без рекламы!

 1 комментарий    379   2 мес   android   huawei   ios   unity   видео   игры   разработка

Unity infinite scroller v2.0

UIS (Unity infinite scroller)

UIS (Unity infinite scroller)

UIS (Unity infinite scroller)

Обновил скрипт бесконечного списка. Переделал реп в пакет пригодный для Unity, обновил демки, добавил функцию прокрутки к элементу и доку небольшую.

Делалось для мобилок, чтобы не тормозило с большим количеством элементов и была привычная функция pull to refresh. Но некоторые используют и в ПК билдах 😄

Github

Unity Mobile Input v2.0

UMI aka Unity Mobile Input

UMI aka Unity Mobile Input

UMI aka Unity Mobile Input

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

Функции:

  • нативное поле ввода и клавиатура для iOS и Android
  • настройка типа кнопки: Стандартная, Далее, Готово, Поиск, Отправить
  • настройка обработки кнопки
  • настройка кнопкок Готово и Очистить (iOS)
  • изменение опций поля ввода во время выполнения
  • скрытие дополнительного поля ввода (Android)
  • отслеживание появления и скрытия клавиатуры (с высотой)
  • отслеживание ориентации экрана
  • поддержка пользовательских шрифтов

В новой версии добавил несколько методов чтобы можно было менять некоторые параметры во время исполнения:

  • SetTextColor — изменение цвета текста
  • SetPlaceholderColor — изменение цвета текста подсказки
  • SetBackgroundColor — изменение цвета фона
  • SetContentType — изменение типа поля ввода
  • SetReadonly — изменение состояния «только для чтения»

Устанавливается как пакет через Unity Package Manager.

Github

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

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

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

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

Запустили в софтлонч нашу первую игру с 3D, логическая онлайн стратегия на 2 или 4 игрока. Для любителей шашек, нард, шахмат, го и прочих настольных игр такого типа, будет интересно. Тут нет рандома, есть несколько стратегий, партии довольно короткие. Написал чуть подробнее на Пикабу.

Делали на Unity. Доступно в AppStore, Google Play и AppGallery.

Unity Builder Bot

Бот сделан на основе моего старого скрипта из этой статьи.

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

Unity Builder Helper Unity Builder Helper settings

Телеграм бот написан на Node.js и Telegraf.js. Может пулить апдейты, запускать билд юнити проекта, билдить Xcode проект (на маке), всё подписывать, загружать на сервер и скидывать ссылку. Билды для iOS тоже можно ставить по ссылке, там подключается манифест разработчика.

Основные функции:

  • добавить проект из Git репозитория
  • удалить проект
  • получить список всех проектов
  • перейти в нужную ветку
  • спулить апдейт
  • сбилдить Unity проект
  • сбилдить Xcode проект
  • скомпилировать, сделать архив, экспорт в IPA
  • сгенерировать HTML страницу с ссылками
  • загрузить все файлы на сервер через sshpass
  • получить логи
  • очистить логи и билды

Это все можно сделать с помощью телеграм, даже не запуская Unity. Каждый этап сборки логируется и уведомляется ботом.

Расширение редактора позволяет быстро переключаться между платформами, включать дефайны, запускать локальный и удаленный билд на боте, подставлять данные для Keystore, нужные зависимости для Huawei, добавлять локализации для iOS, также добавлять сторонние файлы в билд. Есть демка с набором файлов и примерной структурой.

Основные функции:

  • изменить платформу
  • установить defines
  • выбрать папку для билдов под каждую платформу
  • изменить версию, номер билда
  • подставить данные для Keystore
  • добавить локали и *.lproj файлы в Xcode проект
  • добавить фреймворки и дополнительные файлы в Xcode проект
  • добавить и применить google-services.json и agconnect-services.json
  • добавить дополнительные файлы в APK
  • пропатчить AndroidManifest.xml
  • пропатчить gradle файлы
  • добавить зависимости для Huawei билда
  • сбилдить Unity проект

Получилось как-то так, думаю кому-то будет полезно и интересно поковырять исходники. Подписывайтесь на Telegram канал, там посты появляются чаще %)

Unity и WebGL

Unity WebGL tips

Unity WebGL tips

Unity WebGL tips

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

Вебсокеты. Так как у нас все игры — онлайн, то первое что сделал — поддержка сети. В мобильных играх у нас используются TCP сокеты, для браузера же надо использовать вебсокеты (WebSocket). И сразу надо сказать: C#’ские вебсокеты работать не будут. Надо брать готовый или писать свой JS плагин. И в качестве примера, в телеграм канале я уже постил этот реп. Он старый, работает и для примера пойдёт. Там кстати сделана поддержка вебсокетов в редакторе (уже через C#’ские). Т. е. можно дебажить и билдить, работать всё будет. В ассетсторе тоже есть разные реализации вебсокетов для WebGL, можно поискать, есть и Socket.IO, Mirror.

Да, для WebGL тоже можно и нужно писать плагины, как и для Android и iOS.

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

Платежи. Google Play и AppStore не работают в WebGL. В том смысле что нельзя получить информацию о продукте (описание, цена и т. д.) и сделать покупку в браузере. Поэтому мы сделали просто: вместо запроса списка продуктов, делаем запрос к нашему серверу (сервер определяет что клиент WebGL) и в ответ получаем примерно такую же структуру: цена: описание, количество. Но самое главное — приходит ещё и ссылка для оплаты! Т. е. для пользователя визуально всё осталось также, но при попытке оплаты открывается новая вкладка с сформированной ссылкой на оплату нужного товара. А тут уже можно подключить любой удобный сервис приема платежей и по коллбеку успешной оплаты начислять пользователю определенное количество продукта. Вот такие антисанкции.

Загрузка изображений. Тут проще, в браузерах уже есть встроенный механизм загрузки файлов, его и можно использовать. Вот пример как это реализовано, а на SO можно прочитать как автор до этого дошёл. К слову, этот код рабочий. Немного корявенький, требует рефакторинга, но работает. Картинка приходит в Unity в base64, раскукоживаете её в массив байт и дальше уже что требуется: отправляете на сервер, используйте в игре и т. п.

Уведомления. Все ненавидят уведомления в браузере. И у нас их скорее всего не будет. Но раз обещал, напишу что сохранил для себя если вдруг надумаем (или вы надумаете) делать пуши: плагин можно собрать из таких запчастей, честно не пробовал ещё, скорее всего буду свой писать :) Это Firebase Cloud Messaging, он бесплатный и вообще можно отсылать пуши на все платформы. Для реализации на своем сервере, например для NodeJS, можно погуглить web-push. На Хабре есть статьи, вот свежая относительно про PHP и web пуши. Есть еще pushjs.org, оно вроде как работает во всех браузерах, можно устанавливать кастомный сервис-воркер. Как писать воркеры можно почитать в таком cook-book’e. Но опять же, всё что связано с пушами не проверял ещё.

Google и Apple авторизация. У нас в приложениях как раз используются такие способы авторизации. И для них есть возможность сделать веб авторизацию, чего не скажешь про Huawei ID, хотя может и китайцы скоро допилят. Так вот, тут тоже всё относительно просто: открываете мануал как сделать веб авторизацию на своем сервере и делаете: Google и Apple. Про Apple есть еще норм статья на Хабре от ЦИАН. Основной момент тут — это редирект после успешной авторизации, туда можно подставить свои параметры, а внутри плагина перехватить их и использовать для авторизации уже в WebGL приложении. Вот нашел грубый пример как это может работать. Автор как и предупреждает не совсем верно использует запрос авторизации. Лучше открывать свою страницу с кнопкой(-ми) авторизации и уже после успешного завершения перехватывать редирект со своего сайта.

Где размещаться? В комментариях в телеге спросили на каких сервисах публикуем WebGL игры — точно будем пока на своих сайтах, для нас это больше инструмент для платежей. Но в перспективе, рассматриваем ВК и Одноклассники. Может и во вражеском ФБ, кто знает. На реддите нашёл вот небольшой список где можно разместиться, старый, но наверняка что-то живое есть, https://itch.io точно.

И бонус, как сделать рабочий вариант копирования в буфер обмена во всех (вроде как) браузерах.

Ну и ещё бонус, точнее анонс: мы делаем онлайн мобильную 3D игру, до этого как-то больше по 2D всё было, так что будут интересности по 3D. Подписывайтесь на Telegram канал.

Что делать?

Relocation meme

Relocation meme

Relocation meme

Друзья! В свете последних событий, какие есть пути решения вопроса с покупками, рекламой да и вообще. Пока оставим варианты с релокацией и прочим (они тоже работают, но не у всех есть возможность) и подумаем, что можно сделать прямо сейчас:

1️⃣ Выпустить свои игры в Huawei AppGallery
2️⃣ Сделать WebGL версии игр
3️⃣ Сделать «заглушку» и принимать оплату через сайт
4️⃣ Передать игры на другой аккаунт, который не связан с РФ
5️⃣ Не паниковать

По поводу пункта №3. Да, такая возможность есть, но как говорил Чапаев: есть нюанс. Нельзя чтобы в приложении была ссылка на эту страницу оплаты или чтобы она как-то упоминалась вообще, в тексте, в вебвью, где угодно, может быть атата. Это если говорить про Google Play, в AppStore тоже по-моему такое запрещено.

Кроме того, вам никто не запретит сделать WebGL версию игры и принимать оплату любым удобным способом. Ну а как связать мобильный аккаунт и веб-версию это дело техники. Таким образом можно пополнять баланс через веб и играть на телефоне, например.

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

 Нет комментариев    3629   2022   android   ios   unity   игры

EmojiHelper для Unity

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

Как это работает:

  1. Создаём спрайт атласы с эмоджи. Лучше разбить их на более мелкие или по группам, по категориям, по популярности...
  2. Делаем основной спрайт атлас и к нему цепляем как вспомогательные все остальные. Это может выглядеть как-то так:

Emojis fallback list

Emojis fallback list

Emojis fallback list
  1. Не забываем выставить настройки TMP:

  1. Теперь через хелпер можно использовать эмоджи:
/// Можно применять сразу к TMP компоненту
MyTMPText.CheckAndParseEmoji(<text with emoji here>);
 Нет комментариев    4325   2022   android   ios   unity   разработка   с#

Unity iOS localization

Unity iOS localization scripts

Unity iOS localization scripts

Unity iOS localization scripts

Исходники на Github

Мобильные Unity разработчики меня сейчас должны понять: когда делаешь билд под iOS, то локализацию «из коробки» настроить не получится. Конечно, есть разные ассеты и даже! официальный пакет для локализации. С которым уже можно работать, кстати. Но как обычно, самое интересное в деталях...

Если ваша игра поддерживает несколько языков, к примеру: русский, английский, немецкий, испанский, то для каждого языка неплохо бы сделать локализуемое название игры. Кроме того, если игра/приложение использует камеру или галерею, то нужно показывать диалог запроса прав доступа, тоже локализованный, иначе апрув скорее всего не пройти. Для этого, обычно используется файл InfoPlist.strings и содержимое его выглядит как-то так:
 

"CFBundleDisplayName" = "Локализованное название";
"NSCameraUsageDescription" = "Тут описание зачем приложению доступ к камере";
"NSPhotoLibraryUsageDescription" = "Тут описание зачем доступ к галерее";
"NSPhotoLibraryAddUsageDescription" = "Тут описание зачем доступ к галерее";
"NSUserTrackingUsageDescription" = "Тут описание зачем доступ к IDFA";
 

В общем-то всё это уже можно сделать официальным пакетом локализации, кроме NSUserTrackingUsageDescription по-моему. Но так как я всё равно использую пост-билд скрипт для добавления файлов, фреймворков и установки различных параметров через ProjectCapabilityManager, то использовать ещё один пакет не хотелось бы. Тем более, пакет для локализации сам использует приватные методы пространства имен UnityEditor.iOS.Xcode. Вот тут-то и нашлось решение. С помощью рефлексии вытянуть нужные методы и сделать расширение для PBXProject.

В итоге, получился всего один файл с расширением, который позволяет:

  • очистить неиспользуемые локали
  • добавить используемые языки в приложении, из списка
  • добавить <код_языка>.lproj папки в проект с файлами InfoPlist.strings

В старых проектах я использовал UnityiOSLocalization, он работал, но его «проблема» в большом количестве файлов, которые когда-то были доступны на Bitbucket’е, потом это всё стало приватным — т. е. это то что сейчас получилось вытянуть через рефлексию.

Скорее всего когда допилят официальный пакет, всё это станет не актуальным, ну а пока можно пользоваться.

 Нет комментариев    4086   2021   ios   unity   разработка   с#
Ранее Ctrl + ↓