{ "version": "https:\/\/jsonfeed.org\/version\/1", "title": "#mopsicus: заметки с тегом инструменты", "_rss_description": "об играх, разработке на Unity и личном опыте", "_rss_language": "ru", "_itunes_email": "", "_itunes_categories_xml": "", "_itunes_image": "", "_itunes_explicit": "", "home_page_url": "https:\/\/mopsicus.ru\/tags\/tools\/", "feed_url": "https:\/\/mopsicus.ru\/tags\/tools\/json\/", "icon": "https:\/\/mopsicus.ru\/user\/userpic@2x.jpg?1707898340", "author": { "name": "Игорь Лопатин", "url": "https:\/\/mopsicus.ru\/", "avatar": "https:\/\/mopsicus.ru\/user\/userpic@2x.jpg?1707898340" }, "items": [ { "id": "260", "url": "https:\/\/mopsicus.ru\/all\/airdrop-for-android-nearby\/", "title": "«AirDrop» для Android", "content_html": "
У Андроид есть похожая технология обмена файлами «по воздуху», но работает она также, в своей экосистеме, как и у Эпла. Хотя казалось бы, пора сделать какой-то открытый стандарт типа блютуса, или он уже есть...<\/p>\n
В общем, чтобы было как с айфоном только с андроидом, можно использовать приложение NearDrop<\/a>. Ставится на мак и можно с андроида, через стандартный способ «поделиться поблизости» отправить файл на мак, очень похоже на AirDrop. В обратную сторону пока не работает. Но возможно будет.<\/p>\n",
"date_published": "2023-04-18T11:41:11+03:00",
"date_modified": "2023-04-18T11:41:03+03:00",
"_date_published_rfc2822": "Tue, 18 Apr 2023 11:41:11 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "260",
"_e2_data": {
"is_favourite": false,
"links_required": [],
"og_images": []
}
},
{
"id": "259",
"url": "https:\/\/mopsicus.ru\/all\/telegram-bot-builder-unity\/",
"title": "Unity Builder Bot",
"content_html": " Бот сделан на основе моего старого скрипта из этой статьи<\/a>.<\/p>\n Телеграм бот и расширение редактора для билда Unity проектов. Можно использовать по отдельности, но проектировалось чтобы работало вместе. Все исходники по ссылкам.<\/p>\n Телеграм бот<\/a> написан на Node.js и Telegraf.js. Может пулить апдейты, запускать билд юнити проекта, билдить Xcode проект (на маке), всё подписывать, загружать на сервер и скидывать ссылку. Билды для iOS тоже можно ставить по ссылке, там подключается манифест разработчика.<\/p>\n Основные функции:<\/p>\n Это все можно сделать с помощью телеграм, даже не запуская Unity. Каждый этап сборки логируется и уведомляется ботом.<\/p>\n Расширение редактора<\/a> позволяет быстро переключаться между платформами, включать дефайны, запускать локальный и удаленный билд на боте, подставлять данные для Keystore, нужные зависимости для Huawei, добавлять локализации для iOS, также добавлять сторонние файлы в билд. Есть демка<\/a> с набором файлов и примерной структурой.<\/p>\n Основные функции:<\/p>\n Получилось как-то так, думаю кому-то будет полезно и интересно поковырять исходники. Подписывайтесь на Telegram канал<\/a>, там посты появляются чаще %)<\/p>\n",
"date_published": "2022-06-08T20:12:33+03:00",
"date_modified": "2022-06-09T11:49:49+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/ubh.png",
"_date_published_rfc2822": "Wed, 08 Jun 2022 20:12:33 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "259",
"_e2_data": {
"is_favourite": true,
"links_required": [
"system\/library\/jquery\/jquery.js",
"system\/library\/fotorama\/fotorama.css",
"system\/library\/fotorama\/fotorama.js"
],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/ubh.png",
"https:\/\/mopsicus.ru\/pictures\/ubh-settings.png"
]
}
},
{
"id": "249",
"url": "https:\/\/mopsicus.ru\/all\/unity-patch-android-manifest\/",
"title": "Unity и AndroidManifest",
"content_html": " Друзья, нас обманывали!<\/p>\n Это такое начало специально, чтобы привлечь внимание :) На самом деле, я просто не знал, что так может быть. Узнал вовремя и хочу поделиться.<\/p>\n Когда вы в своём кастомном андроид манифесте выставляете такую штуку:<\/p>\n И ждёте что будет работать аппаратное ускорение у конкретного активити, то... оно не будет работать. Бум! Т. е. если вы сбилдите apkшку, расковыряете её и посмотрите итоговый манифест, то вместо вашего true<\/b> будет стоять кое-что другое. Почему так происходит я пока не разобрался, но узнал как исправить.<\/p>\n Оказывается, начиная с 2018 версии в Unity есть такая штука как IPostGenerateGradleAndroidProject<\/a>. Она вызывается после того как Gradle сделал своё грязное дело и перед непосредственно билдом. Так вот, на этом этапе и можно поменять в манифесте нужные нам параметры. В общем-то, можно добавлять или менять всё что угодно, разрешения, параметры, имена активити и т. д.<\/p>\n Пример на Github<\/a><\/p>\n",
"date_published": "2021-09-27T10:19:38+03:00",
"date_modified": "2021-09-27T17:44:24+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/android-activity-manifest.png",
"_date_published_rfc2822": "Mon, 27 Sep 2021 10:19:38 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "249",
"_e2_data": {
"is_favourite": false,
"links_required": [
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css",
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css"
],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/android-activity-manifest.png"
]
}
},
{
"id": "248",
"url": "https:\/\/mopsicus.ru\/all\/upm-unity-solve-case\/",
"title": "UPM Unity fail [solve?]",
"content_html": " В продолжении темы Unity Package Manager’а: недавно тоже столкнулся с проблемой, что при запуске редактора он не мог приконнектиться. Загуглил и оказалось, что это распространённая проблема.<\/p>\n В основном после диагностики показывает: UPM Health Check (Fail). На оффоруме уже сделали специальный закреп<\/a>, как это исправить. Я попробовал всё — и ничего не помогло. Просто не подключается. Хотя на соседнем компьютере, все работает нормально, т. е. дело не в сети.<\/p>\n В итоге опытным путём выяснил, что проблема была в VPN клиенте Cloudflare, который https:\/\/1.1.1.1.<\/a> Даже в выключенном состоянии, он как-то блокировал локальные адреса и порты. Удалил и всё сразу заработало. Так что, если вдруг столкнулись с этой проблемой, проверьте свой файрвол и впн клиент, если такие есть.<\/p>\n",
"date_published": "2021-09-14T11:49:01+03:00",
"date_modified": "2021-09-14T16:23:31+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/upm-fail.png",
"_date_published_rfc2822": "Tue, 14 Sep 2021 11:49:01 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "248",
"_e2_data": {
"is_favourite": false,
"links_required": [],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/upm-fail.png"
]
}
},
{
"id": "247",
"url": "https:\/\/mopsicus.ru\/all\/using-git-submodules-unity\/",
"title": "Как использовать Git Submodules в Unity",
"content_html": " И тут сразу возникает вопрос: почему не использовать пакеты и UPM? Это удобно, да и весь механизм уже встроен в Unity?<\/p>\n Но как оказалось, не всегда удаётся выделить какую-то часть приложения в отдельный пакет, чтобы у него было минимум зависимостей и он представлял из себя какую-то самостоятельную единицу. Проекты бывают разные, с различной архитектурой и набором дополнительных ассетов и прочего. А выделить какую-то общую часть (ядро) хочется, чтобы использовать её в других проектах... В общем, если по какой-то причине пакеты вам не подходят — попробуйте Git Submodules.<\/p>\n В чём отличие при работе с сабмодулями гита? Выглядеть это будет примерно так:<\/p>\n Теперь если в подключаемых сабмодулях, что-то меняется, надо просто спуллить обновления. В общем, кто привык работать с Git, то всё достаточно привычно и понятно.<\/p>\n",
"date_published": "2021-09-10T09:58:32+03:00",
"date_modified": "2021-09-10T09:58:00+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/unity-submodules.png",
"_date_published_rfc2822": "Fri, 10 Sep 2021 09:58:32 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "247",
"_e2_data": {
"is_favourite": true,
"links_required": [
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css",
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css"
],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/unity-submodules.png"
]
}
},
{
"id": "240",
"url": "https:\/\/mopsicus.ru\/all\/modi-unity-lightweight-ioc-container\/",
"title": "MoDI",
"content_html": " MoDI<\/a> — простой контейнер для внедрения зависимостей в Unity.<\/p>\n Когда я хочу в чём-то разобраться, я почти сразу перехожу к практической части. Если со старта не получается, тогда начинаю читать мануалы :) После этого, снова повторяю шаг №1 и так по кругу. Иногда это надоедает и я или ищу другие пути решения, или говорю себе, что это «не моё», мне это не надо — сдаюсь короче.<\/p>\n Решил я однажды разобраться как работать с Zenject<\/a> и Ninject<\/a> в Unity. Сделал несколько тестовых проектов — вроде работает. Начал копать дальше, понял принцип и решил, что хочу своё такое же, но попроще :) И чтобы было достаточно для всех моих разработческих потребностей. Так появился MoDI.<\/p>\n Не буду расписывать принцип инверсии зависимостей, об этом можно прочитать в более достоверных источниках. Скажу только, что более-менее серьёзный проект без этого сложно поддерживать и развивать. Да и вообще, один раз начав использовать сразу понимаешь все плюсы.<\/p>\n Это можно сказать и про ECS, да Leopotam? :)<\/p>\n MoDI можно подключить к проекту с помощью пакетного менеджера, через него же можно импортировать сцену с примерами. Ну или просто скачать архив и добавить в проект.<\/p>\n Простейший пример выглядит так:<\/p>\n После запуска данного скрипта в консоли появится сообщение: «Hi, I’m MoDI!».<\/p>\n В документации можно найти ещё примеры и описание API<\/a>.<\/p>\n Очередной велосипед для себя, но может кого-то заинтересует. Если хотите разработаться в этом как и я, пишите, помогу чем смогу ?<\/p>\n",
"date_published": "2021-04-13T23:10:57+03:00",
"date_modified": "2021-04-14T11:01:47+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/MoDI.png",
"_date_published_rfc2822": "Tue, 13 Apr 2021 23:10:57 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "240",
"_e2_data": {
"is_favourite": true,
"links_required": [
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css",
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css"
],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/MoDI.png"
]
}
},
{
"id": "234",
"url": "https:\/\/mopsicus.ru\/all\/format-csharp-code-vscode\/",
"title": "Форматирование С# кода в VS Code",
"content_html": " До недавних пор, весь код я форматировал с помощью расширения C# FixFormat<\/a>. Оно старое, не поддерживается, но работает! И вполне себе работает.<\/p>\n Но после недавней переустановки VS Code, я ставил заново расширение для C# (OmniSharp) и погуглил на предмет выше. Как оказалось, OmniSharp уже умеет сам форматировать код, причем использует все необходимые параметры<\/a>.<\/p>\n
\n
\n<\/div>\n<\/div>\n\n
\n
Android Manifest hardwareAccelerated patch<\/h3>
Android Manifest hardwareAccelerated patch<\/h4>
\n<activity android:name="com.xxx.xxx" android:label="@string\/app_name" ... android:hardwareAccelerated="true"><\/code><\/pre>UPM Health Check<\/h3>
UPM Health Check<\/h4>
\n
\nUnity использует скрипты и ассеты которые расположены в папке Assets<\/b>. Если вы попробуйте подключить сабмодуль и указать путь, например Assets\/Core<\/b>, то ничего не получится, потому что папка Assets уже существует. Поэтому надо провернуть такой финт:<\/p>\n\n
cd Assets\r\nln -s ..\/Modules\/Core Core<\/code><\/pre>Unity Git submodules<\/h3>
Unity Git submodules<\/h4>
\n<\/div>\nMoDI. Lightweight IoC container for Unity.<\/h3>
MoDI. Lightweight IoC container for Unity.<\/h4>
\n<\/div>\nusing MoDI;\r\nusing UnityEngine;\r\n\r\npublic class QuickStart : MonoBehaviour {\r\n\r\n public void Start() {\r\n DI.Get().Bind<Hello>().WithArguments("Hi, I'm MoDI!");\r\n Hello hello = DI.Get().Resolve<Hello>();\r\n }\r\n \r\n}\r\n\r\npublic class Hello {\r\n\r\n public Hello(string data) {\r\n Debug.Log(data);\r\n }\r\n\r\n}<\/code><\/pre>