#mopsicus: заметки с тегом инструменты https://mopsicus.ru/tags/tools/ об играх, разработке на Unity и личном опыте Игорь Лопатин ru E2 (v3572; Aegea) Игорь Лопатин об играх, разработке на Unity и личном опыте «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> 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> UPM Unity fail [solve?] 248 https://mopsicus.ru/all/upm-unity-solve-case/ Tue, 14 Sep 2021 11:49:01 +0300 Игорь Лопатин https://mopsicus.ru/all/upm-unity-solve-case/ <p>В продолжении темы Unity Package Manager’а: недавно тоже столкнулся с проблемой, что при запуске редактора он не мог приконнектиться. Загуглил и оказалось, что это распространённая проблема.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">UPM Health Check</h3><h4 style="display: none;" itemprop="description">UPM Health Check</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/upm-fail.png" width="424" height="227" alt="UPM Health Check" /> <div class="e2-text-caption">Ошибка на скриншоте не соответствует, но состояние такое же</div> </div> <p>В основном после диагностики показывает: UPM Health Check (Fail). На оффоруме уже сделали специальный <a href="https://forum.unity.com/threads/read-me-first-troubleshooting-connection-loading-project-issues-with-package-manager.869683/">закреп</a>, как это исправить. Я попробовал всё — и ничего не помогло. Просто не подключается. Хотя на соседнем компьютере, все работает нормально, т. е. дело не в сети.</p> <p>В итоге опытным путём выяснил, что проблема была в VPN клиенте Cloudflare, который <a href="https://1.1.1.1.">https://1.1.1.1.</a> Даже в выключенном состоянии, он как-то блокировал локальные адреса и порты. Удалил и всё сразу заработало. Так что, если вдруг столкнулись с этой проблемой, проверьте свой файрвол и впн клиент, если такие есть.</p> Как использовать Git Submodules в Unity 247 https://mopsicus.ru/all/using-git-submodules-unity/ Fri, 10 Sep 2021 09:58:32 +0300 Игорь Лопатин https://mopsicus.ru/all/using-git-submodules-unity/ <p>И тут сразу возникает вопрос: почему не использовать пакеты и UPM? Это удобно, да и весь механизм уже встроен в Unity?</p> <p>Но как оказалось, не всегда удаётся выделить какую-то часть приложения в отдельный пакет, чтобы у него было минимум зависимостей и он представлял из себя какую-то самостоятельную единицу. Проекты бывают разные, с различной архитектурой и набором дополнительных ассетов и прочего. А выделить какую-то общую часть (ядро) хочется, чтобы использовать её в других проектах... В общем, если по какой-то причине пакеты вам не подходят — попробуйте Git Submodules.</p> <p>В чём отличие при работе с сабмодулями гита?<br /> Unity использует скрипты и ассеты которые расположены в папке <b>Assets</b>. Если вы попробуйте подключить сабмодуль и указать путь, например <b>Assets/Core</b>, то ничего не получится, потому что папка Assets уже существует. Поэтому надо провернуть такой финт:</p> <ol start="1"> <li>Подключаете сабмодуль к проекту (как это сделать, тут описывать не буду, потому что есть разные клиенты SourceTree, Fork, GitKraken, просто консоль)</li> <li>В качестве директории можно указать <b>Modules/your_module</b></li> <li>Переходите в папку Assets</li> <li>Устанавливаете симлинк (symlink) на новый сабмодуль. Всё! Он у вас в проекте, можно пользоваться.</li> </ol> <pre class="e2-text-code"><code class="">cd Assets ln -s ../Modules/Core Core</code></pre><p>Выглядеть это будет примерно так:</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Unity Git submodules</h3><h4 style="display: none;" itemprop="description">Unity Git submodules</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/unity-submodules.png" width="1102" height="1012" alt="Unity Git submodules" /> </div> <p>Теперь если в подключаемых сабмодулях, что-то меняется, надо просто спуллить обновления. В общем, кто привык работать с Git, то всё достаточно привычно и понятно.</p> MoDI 240 https://mopsicus.ru/all/modi-unity-lightweight-ioc-container/ Tue, 13 Apr 2021 23:10:57 +0300 Игорь Лопатин https://mopsicus.ru/all/modi-unity-lightweight-ioc-container/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">MoDI. Lightweight IoC container for Unity.</h3><h4 style="display: none;" itemprop="description">MoDI. Lightweight IoC container for Unity.</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/MoDI.png" width="580" height="259" alt="MoDI. Lightweight IoC container for Unity." /> </div> <p><a href="https://github.com/mopsicus/modi">MoDI</a> — простой контейнер для внедрения зависимостей в Unity.</p> <p class="note">Когда я хочу в чём-то разобраться, я почти сразу перехожу к практической части. Если со старта не получается, тогда начинаю читать мануалы :) После этого, снова повторяю шаг №1 и так по кругу. Иногда это надоедает и я или ищу другие пути решения, или говорю себе, что это «не моё», мне это не надо — сдаюсь короче.</p> <p>Решил я однажды разобраться как работать с <a href="https://github.com/modesttree/Zenject">Zenject</a> и <a href="http://www.ninject.org">Ninject</a> в Unity. Сделал несколько тестовых проектов — вроде работает. Начал копать дальше, понял принцип и решил, что хочу своё такое же, но попроще :) И чтобы было достаточно для всех моих разработческих потребностей. Так появился MoDI.</p> <p>Не буду расписывать принцип инверсии зависимостей, об этом можно прочитать в более достоверных источниках. Скажу только, что более-менее серьёзный проект без этого сложно поддерживать и развивать. Да и вообще, один раз начав использовать сразу понимаешь все плюсы.</p> <p class="foot">Это можно сказать и про ECS, да Leopotam? :)</p> <p>MoDI можно подключить к проекту с помощью пакетного менеджера, через него же можно импортировать сцену с примерами. Ну или просто скачать архив и добавить в проект.</p> <p>Простейший пример выглядит так:</p> <pre class="e2-text-code"><code class="">using MoDI; using UnityEngine; public class QuickStart : MonoBehaviour { public void Start() { DI.Get().Bind&lt;Hello&gt;().WithArguments(&quot;Hi, I'm MoDI!&quot;); Hello hello = DI.Get().Resolve&lt;Hello&gt;(); } } public class Hello { public Hello(string data) { Debug.Log(data); } }</code></pre><p>После запуска данного скрипта в консоли появится сообщение: «Hi, I’m MoDI!».</p> <p>В документации можно найти ещё <a href="https://github.com/mopsicus/modi/blob/main/Documentation~/MoDI.md"> примеры и описание API</a>.</p> <p>Очередной велосипед для себя, но может кого-то заинтересует. Если хотите разработаться в этом как и я, пишите, помогу чем смогу ?</p> Форматирование С# кода в VS Code 234 https://mopsicus.ru/all/format-csharp-code-vscode/ Thu, 21 Jan 2021 17:28:39 +0300 Игорь Лопатин https://mopsicus.ru/all/format-csharp-code-vscode/ <p>До недавних пор, весь код я форматировал с помощью расширения <a href="https://marketplace.visualstudio.com/items?itemName=Leopotam.csharpfixformat">C# FixFormat</a>. Оно старое, не поддерживается, но работает! И вполне себе работает.</p> <p>Но после недавней переустановки VS Code, я ставил заново расширение для C# (OmniSharp) и погуглил на предмет выше. Как оказалось, OmniSharp уже умеет сам форматировать код, причем использует <a href="https://docs.microsoft.com/dotnet/api/microsoft.codeanalysis.csharp.formatting.csharpformattingoptions">все необходимые параметры</a>.</p> <p>Для того чтобы всё это заработало, надо в корне проекта создать файл <a href="https://github.com/OmniSharp/omnisharp-roslyn/wiki/Configuration-Options"><b>omnisharp.json</b></a> и добавить туда параметры форматирования. Например:</p> <pre class="e2-text-code"><code class="">{ &quot;FormattingOptions&quot;: { &quot;newLine&quot;: &quot;\n&quot;, &quot;useTabs&quot;: false, &quot;tabSize&quot;: 4, &quot;indentationSize&quot;: 4, &quot;NewLinesForBracesInTypes&quot;: false, &quot;NewLinesForBracesInMethods&quot;: false, &quot;NewLinesForBracesInProperties&quot;: false, &quot;NewLinesForBracesInAccessors&quot;: false, &quot;NewLinesForBracesInAnonymousMethods&quot;: false, &quot;NewLinesForBracesInControlBlocks&quot;: false, &quot;NewLinesForBracesInAnonymousTypes&quot;: false, &quot;NewLinesForBracesInObjectCollectionArrayInitializers&quot;: false, &quot;NewLinesForBracesInLambdaExpressionBody&quot;: false, &quot;NewLineForElse&quot;: false, &quot;NewLineForCatch&quot;: false, &quot;NewLineForFinally&quot;: false, &quot;NewLineForMembersInObjectInit&quot;: false, &quot;NewLineForMembersInAnonymousTypes&quot;: false, &quot;NewLineForClausesInQuery&quot;: false } }</code></pre><p>Также, не забудьте поставить в настройках VS Code:</p> <ul> <li>Csharp → Format → true</li> <li>Editor → Default formatter → ms-dotnettools.csharp</li> </ul> <p>Для форматирования при вводе и сохранении:</p> <ul> <li>Editor → Format On Type → true</li> <li>Editor → Format On Save → true</li> </ul> <p>И как бонус: OmniSharp также научился ставить XML комментарии, так что, минус <a href="https://marketplace.visualstudio.com/items?itemName=k--kato.docomment">ещё одно расширение</a>. Просто вводите три слеша над методом и шаблон XML коммента готов.</p> Топ-10 ошибок в оптимизации Unity 219 https://mopsicus.ru/all/top-10-optimization-fails-unity/ Fri, 09 Oct 2020 13:45:58 +0300 Игорь Лопатин https://mopsicus.ru/all/top-10-optimization-fails-unity/ <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/kzfawIay8G4" frameborder="0" allowfullscreen></iframe></div></div> <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> Рассылка #7 211 https://mopsicus.ru/all/newsletter-7/ Mon, 03 Aug 2020 11:04:50 +0300 Игорь Лопатин https://mopsicus.ru/all/newsletter-7/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Рассылка по Unity #7</h3><h4 style="display: none;" itemprop="description">Рассылка по Unity #7</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/bolt.jpg" width="1280" height="720" alt="Рассылка по Unity #7" /> </div> <p>Совсем забыл сказать, что седьмой выпуск рассылки, читать у себя в почте или по ссылке ниже. А также, Unity сделала Bolt доступным <a href="https://blogs.unity3d.com/ru/2020/07/22/bolt-visual-scripting-is-now-included-in-all-unity-plans/">для всех тарифных планов</a>.</p> <p><a href="https://cutt.ly/mopsicus-s1e7">Читать последний выпуск ?</a><br /> <a href="https://cutt.ly/mopsicus-s1e6">Читать выпуск №6 ?</a><br /> <a href="https://cutt.ly/mopsicus-s1e5">Читать выпуск №5 ?</a><br /> <a href="https://cutt.ly/mopsicus-s1e4">Читать выпуск №4 ?</a><br /> <a href="https://cutt.ly/mopsicus-s1e3">Читать выпуск №3 ?</a><br /> <a href="https://cutt.ly/mopsicus-s1e2">Читать выпуск №2 ?</a><br /> <a href="https://cutt.ly/mopsicus-s1e1">Читать выпуск №1 ?</a></p> <p>→→ <a href="https://mopsicus.ru/all/monthly-newsletter-unity/">Подписаться</a> ←←</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> Релиз Unity 2019.3 193 https://mopsicus.ru/all/unity-2019-3/ Wed, 29 Jan 2020 15:41:31 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-2019-3/ <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/gincn1XNs14" frameborder="0" allowfullscreen></iframe></div></div> <p>Как известно, после релиза Unity, надо подождать пару месяцев, чтобы всё «устряслось» и вышло несколько багфисков :) Поэтому, рабочие проекты пока бы не советовал переводить на новую версию, но поиграться и посмотреть что добавили, стоит.</p> <h2><a href="https://blogs.unity3d.com/2019/10/11/improve-workflows-validate-decisions-and-avoid-errors-with-presets">Пресеты</a></h2> <p>Пресеты позволяют кастомизировать любую сущность в Unity и потом использовать её с уже настроенными свойствами. Например, вам нужно создать несколько разных объектов/префабов с компонентом Rigidbody, для которых вы каждый раз будете настраивать массу и ещё какие-то свойства. Теперь можно сохранить Rigidbody в пресет и использовать. Работает drag-and-drop и есть API.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Unity presets feature</h3><h4 style="display: none;" itemprop="description">Unity presets feature</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/basic-preset.png" width="700" height="644" alt="Unity presets feature" /> </div> <h2><a href="https://unity.com/releases/2019-3/artist-tools#third-party-renderer-materials">Сторонние материалы</a></h2> <p>Теперь можно использовать материалы сделанные в других программах. Пока поддерживаются: Autodesk Arnold Standard Surface shader, Autodesk 3ds Max physical material и Autodesk Interactive shader. Но в будущем список скорее всего будет расширен.</p> <h2><a href="https://unity.com/releases/2019-3/artist-tools#2d-worldbuilding-tools">Работа с 2D</a></h2> <p>Куча обновлений для работы с 2D проектами:</p> <p class="note">Про <a href="https://unity.com/dots">Data-Oriented Technology Stack (DOTS)</a> ничего не пишу, потому что он мне пока не интересен, но там тоже много нового и в итоге, Unity всё переведёт на него и откажется от старой идеологии.</p> <ul> <li>2D PSD Importer — позволяет импортировать файлы Photoshop сразу в Unity, сохраняя информацию о спрайтах и слоях, что особенно актуально если вы будет использовать пакет 2D Animation.</li> <li>2D Animation — предоставляет все инструменты для создания скелетной анимации прямо в Sprite Editor (создание костей, риг, и т. д.)</li> <li>2D Tilemap Editor — позволяет быстро создавать квардратные, шестиугольные (hex) и изометрические тайлмапы.</li> <li>2D Sprite Shape — поможет создавать красивые 2D-ландшафты и объекты с помощью кривых.</li> <li>2D Pixel Perfect — гарантирует, что ваша пиксельная графика останется чёткой и стабильной в движении при различных разрешениях, а Cinemachine теперь включает расширение виртуальной камеры Pixel Perfect для улучшения совместимости с пакетом.</li> <li>2D Lights и 2D Shadows — включены в Universal Render Pipeline, как чaсть 2D Renderer.</li> </ul> <p>Как результат, юнитеки сделали <a href="https://blogs.unity3d.com/en/2019/12/18/download-our-new-2d-sample-project-lost-crypt/">специальный демо проект</a>, который показывает все эти возможности.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">2D spline</h3><h4 style="display: none;" itemprop="description">2D spline</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/2d-spline.gif" width="800" height="450" alt="2D spline" /> </div> <h2><a href="https://unity.com/releases/2019-3/programmer-tools">Штуки для программеров</a></h2> <ul> <li><a href="https://docs.unity3d.com/2019.3/Documentation/ScriptReference/SerializeReference.html">SerializeReference</a> — новый атрибут позволяет сериализовать классы C# как ссылки, а не как типы значений.</li> <li>Обновили физический движок с v3.4 до v4.1 — улучшенный MeshCollider и Cloth.</li> <li>Настраиваемый Play Mode — сейчас перед запуском, скрипты и сцена перезагружаются, что может отнимать время, если скриптов много, а сцена «тяжелая». Теперь, можно <a href="https://docs.unity3d.com/2019.3/Documentation/Manual/ConfigurableEnterPlayMode.html">настроить Play Mode</a> так, чтобы сцена или скрипты не перезагружались, если они например не менялись. Это позволит сэкономить 50-90% времени, как пишут.</li> <li>Улучшили профайлер — теперь можно настраивать отображаемое количество фреймов. А ещё, теперь можно смотреть <a href="https://docs.unity3d.com/2019.3/Documentation/Manual/ProfilerCPU.html#allocation-callstacks">стек вызовов которые выделяют память</a>. Это классно, можно найти критичные места.</li> </ul> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Profile allocation manager</h3><h4 style="display: none;" itemprop="description">Profile allocation manager</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/managed-allocation-call-stacks.jpg" width="810" height="456" alt="Profile allocation manager" /> </div> <h2><a href="https://unity.com/releases/2019-3/editor-tools">Редактор</a></h2> <ul> <li>Новый Editor UI — всё плоское, иконки, шрифты, производительность, поддержка высоких разрешений.</li> <li>Быстрый поиск — Alt + ’ для поиска по файлам, префабам, настройкам и объектам на сцене.</li> <li>UIElements и UI Builder — новая концепция построения интерфейсов, я бы не торопился её использовать, пока нет отзывов о багах и производительности новой системы. Но я думаю, что там всё грустно.</li> </ul> <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/t4tfgI1XvGs" frameborder="0" allowfullscreen></iframe></div></div> <h2>Остальное</h2> <ul> <li><a href="https://blogs.unity3d.com/2019/10/14/introducing-the-new-input-system/">Новая Input System</a></li> <li><a href="https://youtu.be/5Fks2NArDc0">Incremental Garbage Collector</a> уже не Experimental</li> <li><a href="https://unity.com/unity/features/arfoundation">AR Foundation</a> для работы с ARKit и ARCore</li> <li><a href="https://blogs.unity3d.com/2019/09/27/speed-up-mobile-iteration-with-the-new-device-simulator/">Device Simulator</a></li> <li><a href="https://blogs.unity3d.com/2019/06/17/add-features-powered-by-unity-to-native-mobile-apps/">Unity as a Library</a> для встраивания всех возможностей Unity в нативное приложение</li> <li><a href="https://unity3d.com/unity/whats-new/2019.3.0">Список всех багфиксов, обновлений и улучшений</a></li> </ul> Trello для gamedev 191 https://mopsicus.ru/all/trello-gamedev-board/ Mon, 27 Jan 2020 12:20:22 +0300 Игорь Лопатин https://mopsicus.ru/all/trello-gamedev-board/ <p>Trello — удивительный сервис, при всей свой простоте, в нём можно вести практически любые процессы, например, процесс разработки игры.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Trello board kanban gamedev</h3><h4 style="display: none;" itemprop="description">Trello board kanban gamedev</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/trell-board.png" width="1680" height="886" alt="Trello board kanban gamedev" /> </div> <p>У меня есть как рабочие доски, так и личные, где я веду проект в одного, как например доска на превью. Это достаточная простая доска: есть бэклог, куда скидываю все подряд, задачи, мысли, какие-то замечания, ссылки, баги и т. д. Ну а дальше, карточка начинает свой путь по столбцам: to do, doing (progress), need test, done (complete), future, canceled. Для меня стал удобен такой набор столбцов, но это всё индивидуально.</p> <p>То что к каждой карточке можно добавить комментарии, подзадачи, вложения, метки, подключить других участников — делает его универсальным инструментом.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Trello plugins</h3><h4 style="display: none;" itemprop="description">Trello plugins</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/trello-tune.png" width="1548" height="891" alt="Trello plugins" /> </div> <p>Также, к каждой доске можно подключить дополнительные сервисы для автоматизации, аналитики и прочее. Я пользовался такими расширениями:</p> <ul> <li>Сountdown</li> <li>Voting</li> <li>Board Export</li> </ul> <p>И всё это бесплатно. Платные расширения конечно есть, как и «Gold» тариф, который снимает некоторые ограничения и добавляет расширенные функции автоматизации.</p> <h3>Что ещё можно попробовать для управления процессом разработки?</h3> <p><a href="https://hacknplan.com">https://hacknplan.com</a><br /> Заточенный именно под gamedev сервис: канбан доски, ведение ГД и прочее.</p> <p><a href="https://basecamp.com">https://basecamp.com</a><br /> Стал бесплатным для персонального использования.</p> <p><a href="https://asana.com">https://asana.com</a><br /> Старый, но годный сервис от чувака из Фейсбука.</p> <p><a href="https://notion.so">https://notion.so</a><br /> Уже <a href="https://mopsicus.ru/all/about-notion/">писал про</a> него. Не смог туда перелезть в итоге :( Хотя внешне нравится.</p> <p><a href="https://www.openproject.org">https://www.openproject.org</a><br /> Упомянул про этот сервис <a href="https://mopsicus.ru/all/monthly-newsletter-unity/">в рассылке</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> Как извлечь ассеты и C# код из APK 182 https://mopsicus.ru/all/extract-assets-code-unity-apk/ Thu, 07 Nov 2019 10:58:03 +0300 Игорь Лопатин https://mopsicus.ru/all/extract-assets-code-unity-apk/ <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/extract-apk.jpg" width="482" height="494" alt="" /> </div> <p>Две небольшие статьи одного автора, про то, <a href="https://dev.to/apavlinovic/how-to-extract-assets-from-unity-apk-4kbe">как извлечь ассеты из APK файл Unity проекта</a> и <a href="https://dev.to/apavlinovic/how-to-extract-c-code-from-unity-apk-3bg0">как получить C# код</a> от туда же. Конечно он будет не в идеальном виде, но всё же.</p> <p>Иногда интересно (и полезно) узнать, как устроены некоторые моменты в игре, таким образом можно расковырять его и поискать. Извлекать ассеты (картинки, звуки, модели) и использовать их в своих проектах, конечно не рекомендуется :)</p> <p>Если хотите хоть как-то усложнить жизнь таким «хакерам» и защитить свой проект, можно использовать обфускаторы кода, такие есть на Github и в Unity Asset Store.</p> Unity и DeltaDNA 178 https://mopsicus.ru/all/unity-delta-dna/ Mon, 30 Sep 2019 09:54:27 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-delta-dna/ <p>Собственно, новость уже не новость, зачем Unity нужна была DeltaDNA — понятно. Их Unity Analytics такая себе поделка, все всё равно используют сторонние сервисы. А тут неплохой инструмент. Вопрос, насколько глубоко он будет интегрирован во внутренние системы Unity Cloud и будет ли вообще.</p> <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/delta-dna-features.png" width="891" height="717" alt="" /> </div> <p><a href="https://blogs.unity3d.com/ru/2019/09/19/deltadna-joins-unity-offering-best-in-class-tools-to-engage-your-players/">В блоге пишут</a>, что будут использовать LiveOps функции, и что DeltaDNA останется доступна для других движков. По поводу всего остального — не понятно.</p> <p>Из отечественных продуктов мне нравится devtodev. Пока не удалось в полной мере протестировать, но на следующий проект хочу подключить её.</p> Новые штуки в Unity 2020.x 179 https://mopsicus.ru/all/new-features-unity-2020-x/ Fri, 27 Sep 2019 11:37:07 +0300 Игорь Лопатин https://mopsicus.ru/all/new-features-unity-2020-x/ <p>Недавно прошла конференция Unite и там представили роадмап по следующим версиям и функциям Unity. <a href="https://drive.google.com/file/d/1h4u_vHmm6ISxwn6-NAlcwOsuvVqb4iyK/view">Презентация в PDF по ссылке тут</a>, а запись трансляции ниже:</p> <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/hRJUt3voDHQ" frameborder="0" allowfullscreen></iframe></div></div> <p>Кроме того, что снова добавят/улучшат/поломают/перепишут свой ECS и все data-oriented штуки, были и другие интересные вещи связанные с редактором, например, <a href="https://blogs.unity3d.com/ru/2019/09/27/speed-up-mobile-iteration-with-the-new-device-simulator/">Device Simulator</a>:</p> <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/unity-device-simulator.gif" width="1826" height="930" alt="" /> </div> <p>Это новое окно, где будут готовые пресеты девайсов, можно быстро симулировать разрешения экранов, менять ориентацию во время игры, выводить информации об устройстве, отображать сейф-зоны, вырезы, чёлки, капли и прочее. Его добавят уже в 2019.3.</p> <p class="note">Много чего было анонсировано, особенно кому интересен DOTS, поэтому лучше посмотреть трансляцию.</p> <p>В Unity 2020.x UI Elements станут одним инструментом для создания UI, как для редактора, так и для рантайма. Теперь для кнопок внутри игры можно будет писать стили на псевдо-CSS и описывать элементы в UXML. Плюс к этому добавят UI Builder, чтобы можно было мышкой перетаскивать компоненты, виджеты и вот это вот всё. Как это будет в плане производительности — пока не понятно.</p> <p>Также подвезут Visual Scripting для DOTS, который все время откладывают (снова Experimental ха-ха) и который все почему-то очень ждут... ¯\_(ツ)_/¯</p> <p>LWRP превратится в URP с вроде как улучшенными и переписанными пост-эффектами и поддержкой VFX Graph. А для HDRP будет рейтрейсинг, правда пока preview.</p> <p>А ещё недавно добавили поддержку Apple Sign in, вместе с iOS 13. Если у вас в приложении или игре есть авторизация через соцсети, то должна быть возможность и через Apple Sign in (это требование Apple). Как это сделать и где взять <a href="https://assetstore.unity.com/packages/tools/sign-in-with-apple-154202">нужный плагин</a>, написано <a href="https://blogs.unity3d.com/ru/2019/09/19/support-for-apple-sign-in/">в блоге Unity</a>.</p> Плагины VS Code для Unity 159 https://mopsicus.ru/all/vs-code-plugins-unity/ Fri, 05 Apr 2019 17:50:41 +0300 Игорь Лопатин https://mopsicus.ru/all/vs-code-plugins-unity/ <p>Уже довольно долгое время я пользуюсь VS Code и он, до сих пор меня не разочаровал :) Это отличный быстрый редактор с кучей разнообразных плагинов. Для работы с Unity использую вот эти:</p> <h2><a href="https://marketplace.visualstudio.com/items?itemName=Unity.unity-debug">Debugger for Unity</a></h2> <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/vscode-debugger-list.png" width="600" height="489" alt="" /> </div> <p>В общем-то, нет смысла придумывать сложное описание, обычный дебагер и он работает. Можно конечно отлаживать и через Debug.Log :) Можно, но не нужно.</p> <h2><a href="https://marketplace.visualstudio.com/items?itemName=Leopotam.csharpfixformat">C# FixFormat</a></h2> <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/leopotam-csharpfix.gif" width="600" height="468" alt="" /> </div> <p>Эта штука must have, сколько времени она сэкономила сложно посчитать. Форматирует C# код со всеми отступами и переносами. Товарищ <a href="https://leopotam.com">Leopotam</a> постарался.</p> <h2><a href="https://marketplace.visualstudio.com/items?itemName=k--kato.docomment">C# XML Documentation Comments</a></h2> <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/unity-docomment.gif" width="967" height="557" alt="" /> </div> <p>Плагин для генерации XML комментариев, нужно ввести только 3 слеша и IntelliSense всё расскажет о методе или классе.</p> <h2><a href="https://marketplace.visualstudio.com/items?itemName=eppz.eppz-code">eppz! (C# theme for Unity)</a></h2> <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/eppz-theme.png" width="727" height="727" alt="" /> </div> <p>Это не плагин, а тема оформления. Приятная цветовая гамма в пастельных тонах, для любителей тёмных тем.</p> <h2><a href="https://marketplace.visualstudio.com/items?itemName=kleber-swf.unity-code-snippets">Unity Code Snippets</a></h2> <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/unity-snippets.gif" width="1082" height="758" alt="" /> </div> <p>Плагин с коллекцией Unity сниппетов. Позволяет быстро сгенерировать метод с параметрами.</p> <p>А ещё, я поставил себе <a href="https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions">шрифт Fira code с лигатурами</a>. Нраица.</p> Про Notion 154 https://mopsicus.ru/all/about-notion/ Thu, 04 Apr 2019 12:06:54 +0300 Игорь Лопатин https://mopsicus.ru/all/about-notion/ <p><i>Обновлено 27.05.2020</i><br /> <i>Теперь Notion бесплатен для личного пользования, без ограничений!</i></p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Notion</h3><h4 style="display: none;" itemprop="description">Notion</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/notion-use-case-screenshot-wiki.png" width="1920" height="1080" alt="Notion" /> </div> <p>Я давно слышал про <a href="https://notion.so">Notion.so</a>, и на VC.ru и в <a href="tg://resolve?domain=internet9000">телеграмм-канале</a> его дизайнера читал, зарегался давно, но всё никак попробовать времени не хватало.</p> <p>Вообще, уже долгое время хочу систематизировать все свои записи, заметки, напоминания и списки в одном месте. Сейчас многое хранится в Pocket, Google Keep, Docs и Drive. Думал развернуть у себя что-то типа MediaWiki, DokuWiki, чтобы был поиск, вложенные страницы, таблицы и вот это вот всё. Но так до этого дело и не дошло. Зато, до Notion добрался.</p> <p>Если коротко:</p> <p class="loud">сначала не понятно и сложно, потом интересно и многообещающе :)</p> <p>Это такой инструмент «всё в одном». Действительно, из-за того что возможностей много, не сразу понимаешь, что и как себе организовать, с чего начать. Разработчики это тоже понимают, поэтому у них есть <a href="https://www.notion.so/Guides-FAQs-e040febf70a94950b8620e6f00005004">несколько начальных шаблонов</a>. Но никто вас не ограничивает в «творчестве», можно начинать и с чистого листа. Кроме того, появились уже <a href="https://notionpages.com">сайты со сторонними шаблонами</a>, которые можно легко к себе продублировать. Также, можно импортировать документы в разных форматах.</p> <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/notions-use-case-screenshot-task.png" width="1920" height="1080" alt="" /> </div> <p>Планирую туда перенести базу знаний по своим проектам, также таблицы из Trello, списки задач и диздоки. Ну и личные всякие штуки. Есть мобильные приложения и проги для Windows и MacOS. Ещё удобно отправлять в Notion ссылку на какой-нибудь сайт/статью/видео через встроенную функцию «Поделиться» на Android или iOS, как я делал это с Pocket. Возможностей по внутренней организации и оформлению страниц — море.</p> <p>Эта штука бесплатна для личного пользования с ограничением в 1000 блоков, всё что больше — платно, $4 в месяц. Если нужен доступ для нескольких пользователей, с обсуждениями и админскими опциями, то $8.</p> <p>Было бы классно, если была self-hosted версия, как например DokuWiki или Gitlab, но пока отсутствует. Посмотрим, как быстро кончатся «бесплатные» блоки :)</p>