#mopsicus: заметки с тегом android https://mopsicus.ru/tags/android/ об играх, разработке на Unity и личном опыте Игорь Лопатин ru E2 (v3572; Aegea) Игорь Лопатин об играх, разработке на Unity и личном опыте Shardy 267 https://mopsicus.ru/all/shardy/ Thu, 10 Oct 2024 22:33:59 +0300 Игорь Лопатин https://mopsicus.ru/all/shardy/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Shardy</h3><h4 style="display: none;" itemprop="description">Shardy</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/logo.png" width="512" height="512" alt="Shardy" /> </div> <p>Друзья, был у меня давно один проект, который претерпел уже наверное 4 или 5 итераций. Этой штукой я пользуюсь на своих пет-проектах и со временем появилось желание сделать из всего этого опенсорсную историю. Поэтому начну из далека :)</p> <p>Давным-давно был такой проект на гитхабе <a href="https://github.com/NetEase/pomelo">Pomelo</a>. По меркам интернета — реально древний, ему больше 10 лет. Он и сейчас там есть, но уже заархивирован и не поддерживается, но форки вроде пилятся. Кто первый раз слышит, это фреймворк для создания игровых серверов на JavaScript и Node.js. Проект довольно большой, куча модулей, клиенты под разные платформы, хорошая дока. Наткнулся я на него несколько лет назад и начал ковырять, запускать, что-то пробовать. В итоге, многие вещи в нём мне понравились, но показалось всё как-то замудрёно что ли. Наверно потому что китайцы писали, а может я в ноду не сильно мог 😅 В общем, оттуда я потягал какие-то скрипты, интересные решения, потом переписал, упростил и, получился у меня такой лайтовый сервер из нескольких файлов, на котором я тестил всякие свои проекты, изучал ноду, яваскрипт и тайпскрипт позднее.</p> <p>Потом решил поделиться своими поделками и выложить на гитхаб. Когда было свободное время что-то дописывал, переписывал и снова забывал, потому что были задачи поважнее. В какой-то момент, переписал всё на TypeScript (TS). К тому времени уже были наработки не только сервера, но и клиента на C# + Unity и всё это дело стало обретать какой-то полезный вид. И вот, в результате n-ой итерации, архитектура устоялась, протестировалась и получился Shardy.</p> <p><a href="https://github.com/mopsicus/shardy">Shardy</a> — это фреймворк для онлайн игр и приложений на Node.js. Он даёт базовую функциональность для построения микросервисных решений: мобильных, социальных, веб, многопользовательских игр, приложений реального времени, чатов, middleware сервисов и т. п. Есть клиент на TS встроенный в фреймворк, а также <a href="https://github.com/mopsicus/shardy-unity">пакет для Unity</a>, который поддерживает сборки под iOS, Android и WebGL. Здесь я говорю микросервисных потому что по задумке, за каждый модуль будет отвечать отдельный Shardy-сервис со своими командами, настройками, возможно БД.</p> <p>Основные фичи:</p> <ul> <li>микросервисная парадигма</li> <li>простой API: RPC, команды, подписки и т. п.</li> <li>транспорт данных через сокеты и вебсокеты</li> <li>легкость и быстрота: Node.js и TypeScript</li> <li>поддержка пользовательской сериализации</li> <li>поддержка пользовательской валидации рукопожатий (handshake)</li> <li>продвинутый логгер: теги, фильтры, области</li> <li>справочные материалы: документация, сниппеты, примеры</li> <li>почти нулевая конфигурация</li> </ul> <p>Есть демка с примерами работы API и простенькая онлайн игра «Крестики-Нолики»: как серверная часть, так и клиентская. Всё можно посмотреть, поковырять, запустить у себя и попробовать поиграть. Весь код старался комментировать, иногда даже излишне. Также есть <a href="https://github.com/mopsicus/shardy/blob/main/docs/index.md">документация</a> с описанием всех компонентов и методов. Это всё в процессе наполнения и улучшения.</p> <p>Основная цель Shardy — предоставить простое бесплатное решение для создания многопользовательских онлайн игр. Вот так вот громко 😅 На это будет обращено основное внимание при дальнейшей разработке новых функций, сервисов и туторов (было бы время...).</p> <p>Не претендую на академическую правильность архитектуры и кода, делал в первую очередь для своих нужд. Но как показал опыт: зачастую многие принципы ООП, чистого кода, использование паттернов в «нужных» местах, разбиваются об реальность конкретного проекта :)</p> <p>Приглашаю всех заинтересованных инди и не только, в подписчиках вроде такие есть, посмотреть, покрутить, примерить, потестить на своих каких-то задачах, играх, проектах, прототипах. Если будут вопросы, отвечу тут в комментах или на почту mail@mopsicus.ru. В личку тоже можно, но могу не заметить или долго отвечать.</p> <p>Вот такое интро. Всем хороших игр! Онлайн игр :)</p> <p><a href="https://github.com/mopsicus/shardy">Shardy</a><br /> <a href="https://github.com/mopsicus/shardy-unity">Shardy for Unity</a><br /> <a href="https://github.com/mopsicus/shardy/blob/main/docs/index.md">Docs</a></p> Морской Бой Онлайн 266 https://mopsicus.ru/all/sea-battle-online-game/ Mon, 09 Sep 2024 15:54:52 +0300 Игорь Лопатин https://mopsicus.ru/all/sea-battle-online-game/ <p>В телеграме запостил, а тут забыл совсем: встречайте лучший (по нашему мнению :) мобильный Морской Бой Онлайн aka Sea Battle aka Fleet Battle aka Warships на минималках. Это классическая игра из детства, в онлайн исполнении, с новыми возможностями, в пиратском стиле! 🏴‍ (да, у нас не тетрадный стиль!)</p> <iframe width="752" height="432" src="https://www.youtube.com/embed/bWU_KmSthXU" title="Морской Бой Онлайн (Sea Battle)" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> <p>Помимо классического режима с давно известными правилами, есть расширенный, с оружием: мины, подводная лодка, радар и РЭБ (будут ещё). Комбинируйте разные расстановки и оружие для создания выигрышной стратегии.</p> <p>Ну и конечно: быстрые партии, приятная графика, друзья, чаты, достижения, лидерборда, приватные игры, разные скины кораблей и отсутствие рекламы (только добровольная).</p> <p>И да, игра на Юнити 🤪 Пока никаких Годотов и Анрилов.</p> <p><a href="https://play.google.com/store/apps/details?id=games.magicboard.sb">Google Play</a><br /> <a href="https://apps.apple.com/ru/app/id6466614302">AppStore</a><br /> <a href="https://appgallery.huawei.com/#/app/C109196051">AppGallery</a></p> <p>У нас нет ботов, специальных алгоритмов и прочей магии. Всё реально случайно, это касается других наших игр с рандомом, в морском бое-то рандома никакого нет. И я думал что хоть тут не будет подобных отзывов... Но нет :) Некоторые игроки не ожидают, что может так повезти и кто-то может выиграть без единого промаха. Единственное объяснение у таких игроков: всё куплено, везде боты и всё подкручено 😃</p> <p>Мы играли наверно во все мобильные морские бои, скомпилировали лучшее от всех, убрав всё худшее, добавили своё уникальное. В некоторые игры иногда невозможно играть из-за агрессивной рекламной монетизации, буквально после каждой партии реклама, а у некоторых и на возврат в основное меню тоже 🙄🤯 Когда играть-то?</p> <p>В общем, присоединяйтесь к нашему морскому бою, играйте с друзьями и без рекламы!</p> Unity infinite scroller v2.0 264 https://mopsicus.ru/all/unity-infinite-scroller-v2-0/ Tue, 02 Apr 2024 14:09:54 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-infinite-scroller-v2-0/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">UIS (Unity infinite scroller)</h3><h4 style="display: none;" itemprop="description">UIS (Unity infinite scroller)</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/logo-uis.png" width="896" height="512" alt="UIS (Unity infinite scroller)" /> </div> <p>Обновил скрипт бесконечного списка. Переделал реп в пакет пригодный для Unity, обновил демки, добавил функцию прокрутки к элементу и доку небольшую.</p> <p>Делалось для мобилок, чтобы не тормозило с большим количеством элементов и была привычная функция pull to refresh. Но некоторые используют и в ПК билдах 😄</p> <p><a href="https://github.com/mopsicus/uis">Github</a></p> Unity Mobile Input v2.0 263 https://mopsicus.ru/all/unity-mobile-input-v2-0/ Wed, 27 Mar 2024 14:16:56 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-mobile-input-v2-0/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">UMI aka Unity Mobile Input</h3><h4 style="display: none;" itemprop="description">UMI aka Unity Mobile Input</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/umi-v2.png" width="1468" height="612" alt="UMI aka Unity Mobile Input" /> </div> <p>Обновил свой плагин для создания нативных полей ввода на мобилках. Исправил старые баги, причесал немного код, добавил комменты и обновил демо.</p> <p>Функции:</p> <ul> <li>нативное поле ввода и клавиатура для iOS и Android</li> <li>настройка типа кнопки: Стандартная, Далее, Готово, Поиск, Отправить</li> <li>настройка обработки кнопки</li> <li>настройка кнопкок Готово и Очистить (iOS)</li> <li>изменение опций поля ввода во время выполнения</li> <li>скрытие дополнительного поля ввода (Android)</li> <li>отслеживание появления и скрытия клавиатуры (с высотой)</li> <li>отслеживание ориентации экрана</li> <li>поддержка пользовательских шрифтов</li> </ul> <p>В новой версии добавил несколько методов чтобы можно было менять некоторые параметры во время исполнения:</p> <ul> <li>SetTextColor — изменение цвета текста</li> <li>SetPlaceholderColor — изменение цвета текста подсказки</li> <li>SetBackgroundColor — изменение цвета фона</li> <li>SetContentType — изменение типа поля ввода</li> <li>SetReadonly — изменение состояния «только для чтения»</li> </ul> <p>Устанавливается как пакет через Unity Package Manager.</p> <p><a href="https://github.com/mopsicus/umi">Github</a></p> Герои Гильдгаарда 261 https://mopsicus.ru/all/heroes-of-gildgaard/ Sun, 24 Sep 2023 13:25:31 +0300 Игорь Лопатин https://mopsicus.ru/all/heroes-of-gildgaard/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Герои Гильдгаарда</h3><h4 style="display: none;" itemprop="description">Герои Гильдгаарда</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/banner.png" width="1500" height="500" alt="Герои Гильдгаарда" /> </div> <p>Запустили в софтлонч нашу первую игру с 3D, логическая онлайн стратегия на 2 или 4 игрока. Для любителей шашек, нард, шахмат, го и прочих настольных игр такого типа, будет интересно. Тут нет рандома, есть несколько стратегий, партии довольно короткие. Написал чуть <a href="https://pikabu.ru/story/geroi_gildgaarda_logicheskaya_onlayn_strategiya_10671660">подробнее на Пикабу</a>.</p> <p>Делали на Unity. Доступно в <a href="https://apps.apple.com/ru/app/id1642705298">AppStore</a>, <a href="https://play.google.com/store/apps/details?id=games.magicboard.hg">Google Play</a> и <a href="https://appgallery.huawei.com/#/app/C106987185">AppGallery</a>.</p> «AirDrop» для Android 260 https://mopsicus.ru/all/airdrop-for-android-nearby/ Tue, 18 Apr 2023 11:41:11 +0300 Игорь Лопатин https://mopsicus.ru/all/airdrop-for-android-nearby/ <p>У Андроид есть похожая технология обмена файлами «по воздуху», но работает она также, в своей экосистеме, как и у Эпла. Хотя казалось бы, пора сделать какой-то открытый стандарт типа блютуса, или он уже есть...</p> <p>В общем, чтобы было как с айфоном только с андроидом, можно использовать приложение <a href="https://github.com/grishka/NearDrop">NearDrop</a>. Ставится на мак и можно с андроида, через стандартный способ «поделиться поблизости» отправить файл на мак, очень похоже на AirDrop. В обратную сторону пока не работает. Но возможно будет.</p> Unity Builder Bot 259 https://mopsicus.ru/all/telegram-bot-builder-unity/ Wed, 08 Jun 2022 20:12:33 +0300 Игорь Лопатин https://mopsicus.ru/all/telegram-bot-builder-unity/ <p>Бот сделан на основе моего старого скрипта из <a href="https://mopsicus.ru/all/custom-ci-cd-unity/">этой статьи</a>.</p> <p>Телеграм бот и расширение редактора для билда Unity проектов. Можно использовать по отдельности, но проектировалось чтобы работало вместе. Все исходники по ссылкам.</p> <div class="e2-text-picture"> <div class="fotorama" data-width="700" data-ratio="0.8816120906801"> <img src="https://mopsicus.ru/pictures/ubh.png" width="700" height="794" alt="Unity Builder Helper" /> <img src="https://mopsicus.ru/pictures/ubh-settings.png" width="700" height="794" alt="Unity Builder Helper settings" /> </div> </div> <p><a href="https://github.com/mopsicus/ubb">Телеграм бот</a> написан на Node.js и Telegraf.js. Может пулить апдейты, запускать билд юнити проекта, билдить Xcode проект (на маке), всё подписывать, загружать на сервер и скидывать ссылку. Билды для iOS тоже можно ставить по ссылке, там подключается манифест разработчика.</p> <p>Основные функции:</p> <ul> <li>добавить проект из Git репозитория</li> <li>удалить проект</li> <li>получить список всех проектов</li> <li>перейти в нужную ветку</li> <li>спулить апдейт</li> <li>сбилдить Unity проект</li> <li>сбилдить Xcode проект</li> <li>скомпилировать, сделать архив, экспорт в IPA</li> <li>сгенерировать HTML страницу с ссылками</li> <li>загрузить все файлы на сервер через sshpass</li> <li>получить логи</li> <li>очистить логи и билды</li> </ul> <p>Это все можно сделать с помощью телеграм, даже не запуская Unity. Каждый этап сборки логируется и уведомляется ботом.</p> <p><a href="https://github.com/mopsicus/ubh">Расширение редактора</a> позволяет быстро переключаться между платформами, включать дефайны, запускать локальный и удаленный билд на боте, подставлять данные для Keystore, нужные зависимости для Huawei, добавлять локализации для iOS, также добавлять сторонние файлы в билд. Есть <a href="https://github.com/mopsicus/ubh-demo">демка</a> с набором файлов и примерной структурой.</p> <p>Основные функции:</p> <ul> <li>изменить платформу</li> <li>установить defines</li> <li>выбрать папку для билдов под каждую платформу</li> <li>изменить версию, номер билда</li> <li>подставить данные для Keystore</li> <li>добавить локали и *.lproj файлы в Xcode проект</li> <li>добавить фреймворки и дополнительные файлы в Xcode проект</li> <li>добавить и применить google-services.json и agconnect-services.json</li> <li>добавить дополнительные файлы в APK</li> <li>пропатчить AndroidManifest.xml</li> <li>пропатчить gradle файлы</li> <li>добавить зависимости для Huawei билда</li> <li>сбилдить Unity проект</li> </ul> <p>Получилось как-то так, думаю кому-то будет полезно и интересно поковырять исходники. Подписывайтесь на <a href="https://t.me/mopsicus_ru">Telegram канал</a>, там посты появляются чаще %)</p> Что делать? 255 https://mopsicus.ru/all/dont-panic/ Fri, 11 Mar 2022 13:00:52 +0300 Игорь Лопатин https://mopsicus.ru/all/dont-panic/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Relocation meme</h3><h4 style="display: none;" itemprop="description">Relocation meme</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/relocation.jpg" width="497" height="327" alt="Relocation meme" /> </div> <p>Друзья! В свете последних событий, какие есть пути решения вопроса с покупками, рекламой да и вообще. Пока оставим варианты с релокацией и прочим (они тоже работают, но не у всех есть возможность) и подумаем, что можно сделать прямо сейчас:</p> <p>1️⃣ Выпустить свои игры в Huawei AppGallery<br /> 2️⃣ Сделать WebGL версии игр<br /> 3️⃣ Сделать «заглушку» и принимать оплату через сайт<br /> 4️⃣ Передать игры на другой аккаунт, который не связан с РФ<br /> 5️⃣ Не паниковать</p> <p>По поводу пункта №3. Да, такая возможность есть, но как говорил Чапаев: <a href="https://support.google.com/googleplay/android-developer/answer/9858738?visit_id=637824938727131217-4270682718&rd=1">есть нюанс</a>. Нельзя чтобы в приложении была ссылка на эту страницу оплаты или чтобы она как-то упоминалась вообще, в тексте, в вебвью, где угодно, может быть атата. Это если говорить про Google Play, в AppStore тоже по-моему такое запрещено.</p> <p>Кроме того, вам никто не запретит сделать WebGL версию игры и принимать оплату любым удобным способом. Ну а как связать мобильный аккаунт и веб-версию это дело техники. Таким образом можно пополнять баланс через веб и играть на телефоне, например.</p> <p>В данный момент как раз делаю транспорт на вебсокетах для существующих игр, чтобы можно было выпустить WebGL версии. В Huawei AppGallery уже сделали порты всех игр, по чуть-чуть онлайн растет. Хотя там особо сложного ничего не было, из хуавейного сдк используем только авторизацию, пуши и покупки.</p> EmojiHelper для Unity 254 https://mopsicus.ru/all/emoji-helper-unity/ Mon, 31 Jan 2022 18:02:15 +0300 Игорь Лопатин https://mopsicus.ru/all/emoji-helper-unity/ <p><a href="https://mopsicus.ru/all/emoji-in-unity/">Как добавить эмоджи</a>, я уже писал как-то. Но проблема до сих пор в том, что некорректно работают модификаторы. Точнее — они не работают. Т. е. если вы захотите использовать какой-то флаг или определенный цвет кожи или ещё что-то, то у вас вместо одного нужного эмоджи будет два, а то и три. Чтобы использовать эмоджи полноценно, написал небольшой <a href="https://gist.github.com/mopsicus/3903a1f111a738375a363b9e3f058385">хелпер</a>.</p> <p>Как это работает:</p> <ol start="1"> <li>Создаём спрайт атласы с эмоджи. Лучше разбить их на более мелкие или по группам, по категориям, по популярности...</li> <li>Делаем основной спрайт атлас и к нему цепляем как вспомогательные все остальные. Это может выглядеть как-то так:</li> </ol> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Emojis fallback list</h3><h4 style="display: none;" itemprop="description">Emojis fallback list</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/emojis-fallback.png" width="534" height="724" alt="Emojis fallback list" /> </div> <ol start="3"> <li>Не забываем выставить настройки TMP:</li> </ol> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/tmp-emoji-settings.png" width="496" height="226" alt="" /> </div> <ol start="4"> <li>Теперь через хелпер можно использовать эмоджи:</li> </ol> <pre class="e2-text-code"><code class="">/// Можно применять сразу к TMP компоненту MyTMPText.CheckAndParseEmoji(&lt;text with emoji here&gt;);</code></pre> Разработка Unity плагинов для iOS и Android 250 https://mopsicus.ru/all/razrabotka-unity-plaginov-dlya-ios-i-android/ Tue, 05 Oct 2021 11:56:12 +0300 Игорь Лопатин https://mopsicus.ru/all/razrabotka-unity-plaginov-dlya-ios-i-android/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Unity plugins system on JSON</h3><h4 style="display: none;" itemprop="description">Unity plugins system on JSON</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/unity-plugins-systems.png" width="1200" height="630" alt="Unity plugins system on JSON" /> </div> <p>Наконец-то дописал <a href="https://habr.com/ru/post/581160/">статью про создание плагинов</a>. В процессе «дописания» нашёл и пофиксил баг под iOS, так что — не зря :)</p> Unity и AndroidManifest 249 https://mopsicus.ru/all/unity-patch-android-manifest/ Mon, 27 Sep 2021 10:19:38 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-patch-android-manifest/ <p>Друзья, нас обманывали!</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Android Manifest hardwareAccelerated patch</h3><h4 style="display: none;" itemprop="description">Android Manifest hardwareAccelerated patch</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/android-activity-manifest.png" width="1790" height="1238" alt="Android Manifest hardwareAccelerated patch" /> <div class="e2-text-caption">Ещё куча параметров, которые можно установить для Activity</div> </div> <p>Это такое начало специально, чтобы привлечь внимание :) На самом деле, я просто не знал, что так может быть. Узнал вовремя и хочу поделиться.</p> <p>Когда вы в своём кастомном андроид манифесте выставляете такую штуку:</p> <pre class="e2-text-code"><code class="">&lt;activity android:name=&quot;com.xxx.xxx&quot; android:label=&quot;@string/app_name&quot; ... android:hardwareAccelerated=&quot;true&quot;&gt;</code></pre><p>И ждёте что будет работать аппаратное ускорение у конкретного активити, то... оно не будет работать. Бум! Т. е. если вы сбилдите apkшку, расковыряете её и посмотрите итоговый манифест, то вместо вашего <b>true</b> будет стоять кое-что другое. Почему так происходит я пока не разобрался, но узнал как исправить.</p> <p>Оказывается, начиная с 2018 версии в Unity есть такая штука как <a href="https://docs.unity3d.com/ScriptReference/Android.IPostGenerateGradleAndroidProject.OnPostGenerateGradleAndroidProject.html">IPostGenerateGradleAndroidProject</a>. Она вызывается после того как Gradle сделал своё грязное дело и перед непосредственно билдом. Так вот, на этом этапе и можно поменять в манифесте нужные нам параметры. В общем-то, можно добавлять или менять всё что угодно, разрешения, параметры, имена активити и т. д.</p> <p><a href="https://gist.github.com/mopsicus/1d825521b6db402910dbaca742f49651">Пример на Github</a></p> Интеграция HMS SDK 245 https://mopsicus.ru/all/hms-sdk-appgallery-android/ Tue, 29 Jun 2021 17:32:46 +0300 Игорь Лопатин https://mopsicus.ru/all/hms-sdk-appgallery-android/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Huawei AppGallery</h3><h4 style="display: none;" itemprop="description">Huawei AppGallery</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/appgallery-logo.png" width="256" height="256" alt="Huawei AppGallery" /> </div> <p>Сделали интеграцию одной из наших игр в Huawei AppGallery. Пока большого прироста пользователей там не видим, но мы особо и не надеялись :) Заменили гугловские компоненты на хуавеевские и почти всё заработало как надо.</p> <p>Заменили три основных: авторизацию через Google Sign-In, встроенные покупки и пуш уведомления. Надо сказать, что Huawei умеет хорошо списывать, получилось почти строчка в строчку. Но некоторые вещи работают только на Huawei девайсах, это надо иметь ввиду.</p> Создание плагинов для Unity 228 https://mopsicus.ru/all/make-plugins-for-unity/ Fri, 27 Nov 2020 00:12:48 +0300 Игорь Лопатин https://mopsicus.ru/all/make-plugins-for-unity/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Плагины для Unity</h3><h4 style="display: none;" itemprop="description">Плагины для Unity</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/plugins.png" width="1460" height="730" alt="Плагины для Unity" /> </div> <p>Пишу статью про создание плагинов для Unity под iOS и Android. Нужны комменты и советы.</p> <p>За несколько лет, я сделал большое количество различных плагинов. Многие они не в паблике и опенсорс, но это не надолго (надеюсь :).</p> <p>Есть куча ситуаций когда одной Unity недостаточно и нужно использовать возможности платформы. Банально, но до сих пор, в Unity нет работы с галерей и камерой из коробки :) Смешно? Не очень. В Xamarin есть, а в Unity нет.</p> <p>Для многих менее опытных разработчиков, создание плагина для Unity под мобильную платформу кажется чем-то сложным, но на деле, это не так сложно и страшно. По крайней мере, организовать простое взаимодействие — достаточно просто. В статье, будет шаблон для Android (на Java) и iOS (на Obj-C) для создания плагинов и их связи с Unity приложением.</p> <p>Поэтому вопрос: о создании каких плагинов вы бы хотели прочитать в первую очередь? Примеры: галерея, уведомления, браузер, покупки, шаринг, [продолжите]...</p> Кастомные шрифты в UnityMobileInput 221 https://mopsicus.ru/all/custom-fonts-support-unitymobileinput/ Thu, 15 Oct 2020 22:03:51 +0300 Игорь Лопатин https://mopsicus.ru/all/custom-fonts-support-unitymobileinput/ <p>Обновил плагин <a href="https://github.com/mopsicus/UnityMobileInput">UnityMobileInput</a>.</p> <p>Теперь можно использовать свои шрифты в нативном поле ввода. Просто копируете TTF шрифт в проект, в папку <b>StreamingAssets</b>, дальше плагин всё сделает сам: скопирует в папку приложения на Android или iOS и применит для нужного поля ввода.</p> <p>Также, был баг (фича), что при тапе по экрану клавиатура исчезала, это её нормальное поведение, в общем-то. Но иногда надо чтобы она оставалась видимой даже если на что-то жмёшь. Теперь есть такая опция.</p> Free VPN 216 https://mopsicus.ru/all/free-vpn/ Thu, 03 Sep 2020 11:02:09 +0300 Игорь Лопатин https://mopsicus.ru/all/free-vpn/ <p>Отличный бесплатный VPN от Cloudflare. На любую платформу, быстро и удобно, рекомендую.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">FreeVPN</h3><h4 style="display: none;" itemprop="description">FreeVPN</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/1111.png" width="561" height="278" alt="FreeVPN" /> </div> <p><a href="https://1.1.1.1/beta/">https://1.1.1.1/beta/</a></p> Sign in with Apple, Google Sign-In и Unity 214 https://mopsicus.ru/all/sign-in-with-apple-google-sign-in-i-unity/ Mon, 17 Aug 2020 16:28:09 +0300 Игорь Лопатин https://mopsicus.ru/all/sign-in-with-apple-google-sign-in-i-unity/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Sign in with Apple and Unity</h3><h4 style="display: none;" itemprop="description">Sign in with Apple and Unity</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/sign-in.png" width="768" height="432" alt="Sign in with Apple and Unity" /> </div> <p>Решили мы сделать «доброе» дело нашим пользователям: позволить и на Android и на iOS использовать Google Sign-In и Sign in with Apple, и там и там.</p> <p>Пришлось немного поковыряться, но получилось! Плагин для Unity работает. Разобраться во всём помогли две статьи:</p> <ul> <li><a href="https://johncodeos.com/how-to-add-sign-in-with-apple-button-to-your-android-app-using-kotlin/">How to add ‘Sign in with Apple’ button to your Android app using Kotlin</a></li> <li><a href="https://habr.com/ru/company/cian/blog/475062/">Внедряем Sign in with Apple — систему авторизации от Apple</a></li> <li>Ну и немного, официальные доки</li> </ul> <p>Плагин из примера на Kotlin, переписал на Java, так привычней, но наверное, уже пора осваивать и его... :( Apple не сделали SDK для других платформ, так что там всё не красиво, но работает. У Google, прописываешь в pod файл Google Sign-in и используешь.</p> <p>В общем, mission complete. Если есть вопросы, пишите.</p> Установка сразу на несколько Android устройств 198 https://mopsicus.ru/all/install-uninstall-multiple-android-devices/ Wed, 26 Feb 2020 12:22:04 +0300 Игорь Лопатин https://mopsicus.ru/all/install-uninstall-multiple-android-devices/ <p>При тестировании приложений часто приходится переустанавливать приложение, это очевидно. Когда я делал для себя <a href="https://mopsicus.ru/all/custom-ci-cd-unity/">мини CI\CD</a>, то там уведомление с ссылкой на APK или IPA, приходило в телеграм. Это удобно, когда на девайсах уже всё настроено и есть доступ к телеге. Скачал и установил.</p> <p>Но есть у меня и много девайсов на Android, которые периодически сбрасываются до заводских настроек. Каждый раз устанавливать и настраивать телеграм на каждом — как-то утомительно. Поэтому, я написал небольшой баш-скрипт который устанавливает/удаляет приложение <b>сразу со всех</b> подключенных андроид устройств. Было б нужное количество портов и проводов :)</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Console APK install tool</h3><h4 style="display: none;" itemprop="description">Console APK install tool</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/installtools.png" width="761" height="684" alt="Console APK install tool" /> </div> <p>Если необходимо, то эти функции можно добавить и в прошлый скрипт для CI\CD, если не нужно закачивать APK на сервер и отправлять уведомление.</p> <p><a href="https://gist.github.com/mopsicus/f17925def0a178e85bf802c58872ac13">Исходник на Github</a></p> Pocket 190 https://mopsicus.ru/all/use-pocket-app/ Wed, 15 Jan 2020 15:45:53 +0300 Игорь Лопатин https://mopsicus.ru/all/use-pocket-app/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Pocket logo</h3><h4 style="display: none;" itemprop="description">Pocket logo</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/pocket.png" width="512" height="512" alt="Pocket logo" /> </div> <p>Пользуюсь <a href="https://getpocket.com">Pocket</a> уже несколько лет. Это просто, это удобно, это стало необходимо. Потому что в текущем потоке информации, успеть прочитать всё нужное и интересное — невозможно. Pocket, как приложение для закладок и чтения — самое то.</p> <p>Одно время, я что-то интересное скидывал в <i>Избранное</i> в Телеграмм. Но потом всё стал скидывать в Pocket. Если на андроиде или айос, можно поделиться с помощью стандартного механизма и ссылка окажется в Pocket. Если в браузере — тоже. Для мака есть официальное приложение. На любом девайсе можно читать в офлайн режиме. Крутота.</p> Свой CI/CD для Unity 188 https://mopsicus.ru/all/custom-ci-cd-unity/ Thu, 12 Dec 2019 14:44:40 +0300 Игорь Лопатин https://mopsicus.ru/all/custom-ci-cd-unity/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Mopsicus CI/CD bash script</h3><h4 style="display: none;" itemprop="description">Mopsicus CI/CD bash script</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/build.gif" width="512" height="283" alt="Mopsicus CI/CD bash script" /> </div> <p>Написал небольшую <a href="https://habr.com/ru/post/479884/">статью на Хабр</a> про скрипт который получился в результате автоматизации сборки Unity проектов под Android и iOS. Раньше большинство операций делалось вручную, теперь всё сведено к минимуму.</p> <p>Один запуск скрипта и:</p> <ul> <li>скачиваются последние изменения с GIT</li> <li>запускаются тесты</li> <li>собирается APK для Android, в develop или release</li> <li>собирается для iOS Xcode проект, в develop или release</li> <li>компилируется</li> <li>архивируется и экспортируется в IPA</li> <li>генерируется манифест для него</li> <li>генерируются HTML страницы для установки</li> <li>всё это загружается на сервер с помощью sshpass</li> <li>все логи записываются в отдельную папку</li> <li>отсылается уведомление в Телеграмм, что всё готово</li> </ul> <p>Вот такая интеграция и доставка :)</p> <p><a href="https://github.com/mopsicus/unity-build-pipeline">Исходники на Github</a></p> Firebase под контролем 184 https://mopsicus.ru/all/firebase-under-control-plugin-android-aar/ Mon, 25 Nov 2019 15:41:44 +0300 Игорь Лопатин https://mopsicus.ru/all/firebase-under-control-plugin-android-aar/ <p><i>Обновлено: 16.10.2020</i><br /> <i>С последними версиями FB этот фокус не работает :(</i><br /> <i>Точнее инициализация работает когда апп активен, но при выключенном приложении пуши не приходят, FirebaseInitProvider не инициализируется. Разбираюсь...</i></p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Firebase Android</h3><h4 style="display: none;" itemprop="description">Firebase Android</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/firebase-android-plugin.png" width="512" height="288" alt="Firebase Android" /> </div> <p>У меня есть плагин для Unity, который отвечает за уведомления, как локальные так и PUSH. Firebase даёт файлик <b>google-services.json</b>, который нужно добавить в Android проект или плагин, и при сборке, уже Gradle плагин прочитает из этого файла, создаст XML и позже Firebase будет инициализироваться автоматически в приложении.</p> <p>Но, хотелось бы, чтобы плагин был один и его можно было импортировать в другие проекты, не пересобирая его каждый раз с новый JSON файлом. Думал это будет некоторой проблемой и придётся придумывать костыли, но оказалось всё проще.</p> <p>Можно инициализировать Firebase вручную с нужными параметрами. Т. е. всё что лежит в JSON файле, можно передать в конструктор и оно будет работать. Для этого, надо добавить в манифест:</p> <pre class="e2-text-code"><code class="">&lt;provider android:name=&quot;com.google.firebase.provider.FirebaseInitProvider&quot; android:authorities=&quot;${applicationId}.firebaseinitprovider&quot; tools:node=&quot;remove&quot; /&gt;</code></pre><p>Теперь Firebase автоматически не инициализируется. А чтобы сделать это самому, в плагине, при старте Unity приложения будет вызываться функция с конструктором и нужными параметрами уже из конфига игры или приложения:</p> <pre class="e2-text-code"><code class="">FirebaseOptions.Builder builder = new FirebaseOptions.Builder() .setApplicationId(&quot;your_app_id&quot;) .setApiKey(&quot;your_api_key&quot;) .setDatabaseUrl(&quot;your_link_to_db&quot;) .setStorageBucket(&quot;your_storage-url&quot;); FirebaseApp.initializeApp(this, builder.build());</code></pre><p>Теперь нет необходимости каждый раз билдить плагин для уведомлений. Ура.</p>