об играх, разработке на Unity и личном опыте

Buffer icon Проекты
Позднее Ctrl + ↑

Что делать?

Relocation meme

Relocation meme

Relocation meme

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

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

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

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

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

EmojiHelper для Unity

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

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

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

Emojis fallback list

Emojis fallback list

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

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

2021

Bye 2021 year

Bye 2021 year

Bye 2021 year

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

Рассылку пришлось закрыть :( Многие мне писали и спрашивали, буду ли продолжать — пока не могу сказать, это отнимает время, а его пока нет на такие вещи.

Выпустили игру в Huawei AppGallery. Отдельный квест. Но надо признать, китайцы молодцы, они скопировали гугл-сервисы и улучшили их. Если есть нативное приложение под Android, то перенести его в AppGallery в общем-то не сложно. Если надо опубликовать приложение сделанное на Unity, то надо будет сделать несколько плагинов или использовать готовые.

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

Так и не смог регулярно постить в телеграм, это должен был быть ещё один канал связи, с более частыми постами чем в рассылке...

На 2022 в планах зарелизить минимум столько же игр: настолку, три в ряд, головоломку. А может и больше! Новый движок на основе RPC и событий показал себя с лучшей стороны. По чуть-чуть обрастает новыми фичами. Делать на нём новые игры можно без боли :)

Год был продуктивным. Желаю всем игр в 2022 году!

Unity Hub обновился, теперь красивенький

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’е, потом это всё стало приватным — т. е. это то что сейчас получилось вытянуть через рефлексию.

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

Unity и AndroidManifest

Друзья, нас обманывали!

Android Manifest hardwareAccelerated patch

Android Manifest hardwareAccelerated patch

Android Manifest hardwareAccelerated patch
Ещё куча параметров, которые можно установить для Activity

Это такое начало специально, чтобы привлечь внимание :) На самом деле, я просто не знал, что так может быть. Узнал вовремя и хочу поделиться.

Когда вы в своём кастомном андроид манифесте выставляете такую штуку:

<activity android:name="com.xxx.xxx" android:label="@string/app_name" ... android:hardwareAccelerated="true">

И ждёте что будет работать аппаратное ускорение у конкретного активити, то... оно не будет работать. Бум! Т. е. если вы сбилдите apkшку, расковыряете её и посмотрите итоговый манифест, то вместо вашего true будет стоять кое-что другое. Почему так происходит я пока не разобрался, но узнал как исправить.

Оказывается, начиная с 2018 версии в Unity есть такая штука как IPostGenerateGradleAndroidProject. Она вызывается после того как Gradle сделал своё грязное дело и перед непосредственно билдом. Так вот, на этом этапе и можно поменять в манифесте нужные нам параметры. В общем-то, можно добавлять или менять всё что угодно, разрешения, параметры, имена активити и т. д.

Пример на Github

UPM Unity fail [solve?]

В продолжении темы Unity Package Manager’а: недавно тоже столкнулся с проблемой, что при запуске редактора он не мог приконнектиться. Загуглил и оказалось, что это распространённая проблема.

UPM Health Check

UPM Health Check

UPM Health Check
Ошибка на скриншоте не соответствует, но состояние такое же

В основном после диагностики показывает: UPM Health Check (Fail). На оффоруме уже сделали специальный закреп, как это исправить. Я попробовал всё — и ничего не помогло. Просто не подключается. Хотя на соседнем компьютере, все работает нормально, т. е. дело не в сети.

В итоге опытным путём выяснил, что проблема была в VPN клиенте Cloudflare, который https://1.1.1.1. Даже в выключенном состоянии, он как-то блокировал локальные адреса и порты. Удалил и всё сразу заработало. Так что, если вдруг столкнулись с этой проблемой, проверьте свой файрвол и впн клиент, если такие есть.

Как использовать Git Submodules в Unity

И тут сразу возникает вопрос: почему не использовать пакеты и UPM? Это удобно, да и весь механизм уже встроен в Unity?

Но как оказалось, не всегда удаётся выделить какую-то часть приложения в отдельный пакет, чтобы у него было минимум зависимостей и он представлял из себя какую-то самостоятельную единицу. Проекты бывают разные, с различной архитектурой и набором дополнительных ассетов и прочего. А выделить какую-то общую часть (ядро) хочется, чтобы использовать её в других проектах... В общем, если по какой-то причине пакеты вам не подходят — попробуйте Git Submodules.

В чём отличие при работе с сабмодулями гита?
Unity использует скрипты и ассеты которые расположены в папке Assets. Если вы попробуйте подключить сабмодуль и указать путь, например Assets/Core, то ничего не получится, потому что папка Assets уже существует. Поэтому надо провернуть такой финт:

  1. Подключаете сабмодуль к проекту (как это сделать, тут описывать не буду, потому что есть разные клиенты SourceTree, Fork, GitKraken, просто консоль)
  2. В качестве директории можно указать Modules/your_module
  3. Переходите в папку Assets
  4. Устанавливаете симлинк (symlink) на новый сабмодуль. Всё! Он у вас в проекте, можно пользоваться.
cd Assets
ln -s ../Modules/Core Core

Выглядеть это будет примерно так:

Unity Git submodules

Unity Git submodules

Unity Git submodules

Теперь если в подключаемых сабмодулях, что-то меняется, надо просто спуллить обновления. В общем, кто привык работать с Git, то всё достаточно привычно и понятно.

Интеграция HMS SDK

Huawei AppGallery

Huawei AppGallery

Huawei AppGallery

Сделали интеграцию одной из наших игр в Huawei AppGallery. Пока большого прироста пользователей там не видим, но мы особо и не надеялись :) Заменили гугловские компоненты на хуавеевские и почти всё заработало как надо.

Заменили три основных: авторизацию через Google Sign-In, встроенные покупки и пуш уведомления. Надо сказать, что Huawei умеет хорошо списывать, получилось почти строчка в строчку. Но некоторые вещи работают только на Huawei девайсах, это надо иметь ввиду.

LeoEcsLite

LeoEcsLite for Unity

LeoEcsLite for Unity

LeoEcsLite for Unity

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

https://github.com/Leopotam/ecslite

 Нет комментариев    1968   2021   ecs
Ранее Ctrl + ↓