#mopsicus: заметки с тегом расширение https://mopsicus.ru/tags/extension/ об играх, разработке на Unity и личном опыте Игорь Лопатин ru E2 (v3572; Aegea) Игорь Лопатин об играх, разработке на Unity и личном опыте 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 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> Форматирование С# кода в 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> GitHub для Unity 119 https://mopsicus.ru/all/github-for-unity/ Thu, 21 Jun 2018 10:37:14 +0300 Игорь Лопатин https://mopsicus.ru/all/github-for-unity/ <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/github-unity.gif" width="1920" height="1080" alt="" /> </div> <p>Юнитеки озадачились и выпустили из беты <a href="https://assetstore.unity.com/packages/tools/version-control/github-for-unity-118069">Github for Unity</a>. Как понятно из названия, это расширение для работы с Github. Теперь все операции можно делать прямо из редактора. Кроме того, есть ряд приятных мелочей:</p> <ul> <li>большие файлы загружаются в отдельное хранилище LFS (Large Files Storage)</li> <li>отображение различий в файлах с использованием различных предустановок</li> <li>строка с быстрыми действиями в Git</li> <li>уведомления с обновлениями</li> </ul> <p><a href="https://unity.github.com">Исходный код расширения</a> доступен на Github (где же ещё :).</p> Riddut. Возвращение. 99 https://mopsicus.ru/all/riddut-returns/ Sat, 03 Feb 2018 21:22:31 +0300 Игорь Лопатин https://mopsicus.ru/all/riddut-returns/ <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/riddut-image.png" width="610" height="550" alt="" /> </div> <p>В 2015 году я сделал для себя небольшой плагин для браузера — он вырезал из ленты ВК и ФБ ненужные мне записи по стоп-словам. Всё работало очень просто: находил в ленте слово и удалял пост.</p> <p>Потом, я добавил поддержку морфологии, чтобы не добавлять кучу слов с разными окончаниями. Ещё скрипт научился удалять контекстную рекламу и фильтровать выдачу поисковых систем. И итогом стала — фильтрация любого сайта. Иногда от этого страдает вёрстка, но оно того стоит. Новостной сайт после фильтра хоть можно читать...</p> <p>После этого, я успешно про него забыл. И вот 2018 год: выборы, санкции, олимпийцы — пришло время снова очистить своё информационного пространство от, и смахнуть пыль со старого кода.</p> <p class="loud">Riddut</p> <p>Так называется расширение. Да, оно ограждает от нескончаемого потока информационного шума. Это такой персональный AdBlock для контента.<br /> Вот что умеет:</p> <ul> <li>удалять любое упоминание стоп-слова на любом сайте</li> <li>удалять посты и рекламу из соц. сетей Фейсбук, ВКонтакте, Одноклассники, Твиттер по ключевым словам</li> <li>удалять позиции в выдаче и рекламу поисковых систем Яндекс, Гугл, Бинг</li> <li>фильтровать дозагруженный контент</li> <li>работать с белыми списками сайтов</li> <li>понимать русскую и английскую морфологию (не полностью)</li> <li>синхронизироваться между браузерами</li> <li>показывать красивую статистику «сэкономленного» времени :_)</li> </ul> <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/riddut-how-to.jpg" width="914" height="289" alt="" /> </div> <p>Сейчас всё это дело в бета версии, так что, если расширение окажется вам полезным — напишите на <a href="mailto:mail@mopsicus.ru">mail@mopsicus.ru</a>, что добавить, убрать, исправить, улучшить. Захотите поучаствовать? Буду рад.</p> <p>Есть версии для Chrome, Safari и Opera. С Firefox пока не разобрался в чём проблема, но думаю решу.</p> <p>Подробнее на <a href="https://riddut.mopsicus.ru">https://riddut.mopsicus.ru</a></p> <p class="foot">Заметка чтобы попереживать. Да, расширение отправляет на сайт слова, чтобы с помощью библиотеки морфологии, получить в ответ все его формы и отфильтровать страницу. Ещё оно скачивает актуальные данные по вёрстке. Это всё. В любом случае, всё что отправляет и получает расширение можно посмотреть через консоль. Если вас это не устраивает, что ж, вы можете не использовать моё расширение :)</p> <p><b>Riddut</b> — это не баннерорезалка. Удаление некоторой рекламы, это приятный бонус, а не основная функция. Но вы легко можете использовать и то и другое вместе.</p> PopClip для Mac OS 81 https://mopsicus.ru/all/popclip/ Mon, 15 Jan 2018 11:34:44 +0300 Игорь Лопатин https://mopsicus.ru/all/popclip/ <p>Эта небольшая утилита для Mac OS добавляет к выделенному тексту контекстное меню, как на iPhone. Есть огромное количество расширений — уже <b>больше 100</b>. Например:</p> <ul> <li>копирование/вставка/изменение регистра/форматирование текста</li> <li>конвертация из Markdown в HTML</li> <li>поиск в различных поисковых системах</li> <li>перевод текста в разных переводчиках</li> <li>сохранение текста в различные сервисы, приложения и todo-списки (Trello, OneNote, OmniFocus, Wunderlist, etc)</li> <li>сокращалка url</li> <li>взаимодействие с приложения (отправка почты, поиска на картах, поиск музыки, звонок в Skype)</li> <li>поиск в Google картинках, IMDb, Amazon, и ещё куча других</li> <li>и многое другое<br /> Кроме того, если есть желание — можно сделать своё расширение!<br /> Приложение платное ($9.99), но оно того стоит.</li> </ul> <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/popclip-screenshot.png" width="917" height="102" alt="" /> </div> <p>Также оно прекрасно работает в редакторах кода и IDE — оборачивание в скобки, кавычки, запуск команд в терминале. Я использую именно так :)</p> <p><a href="http://pilotmoon.com/popclip/">http://pilotmoon.com/popclip/</a></p> Визуальное программирование в Unity 79 https://mopsicus.ru/all/visual-scripting-unity/ Fri, 03 Nov 2017 12:47:49 +0300 Игорь Лопатин https://mopsicus.ru/all/visual-scripting-unity/ <p>Для Unity уже давно существует ассет <a href="http://u3d.as/1Az">Playmaker</a>, который позволяет создавать сценарии игры без написания кода. У него есть свои пользователи и их достаточно много. Я никогда не пользовался такими инструментами и думаю, что какой-либо более-менее серьезный проект невозможно сделать без написания кода.</p> <p>Однако, для каких-то отдельных элементов и частей игры, такой подход вполне может сократить время разработки. Так недавно появился ещё один инструмент для визуального программирования, похожий на Blueprints из движка Unreal — <b><a href="http://u3d.as/NoX">Bolt</a></b>.</p> <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/4eZuZhcRxoU" frameborder="0" allowfullscreen></iframe></div></div> <p>Выглядит красиво, требует одну из последних версий Unity 2017.1.0 и говорят, работает быстро. Плагин функциональный и может:</p> <ul> <li>два типа графов: как в Unreal Blueprints и конечные автоматы как в Playmaker</li> <li>группировка, слои и зум</li> <li>события, макросы, плагины</li> <li>live-редактирование</li> <li>поддержка всех типов</li> <li>встроенная документация</li> </ul> <p>Кроме того, судя по <a href="http://support.ludiq.io/forums/5-bolt/topics/392-roadmap/">плану разработки</a> — у этого инструмента будет много полезных и удобных функций. Ещё есть <a href="http://support.ludiq.io/forums/4-bolt-manual/topics/222-compare-visual-scripting-tools-for-unity/">сравнительная таблица</a> с другими визуальными редакторами.</p> <hr /> <p>А вот что касается использования визуальных средств для создания сложных шейдеров, то тут я «за» :) Таких инструментов много, цены на них приемлемые и результат достойный.</p> <ol start="1"> <li><a href="http://u3d.as/y3X">Amplify Shader Editor</a></li> <li><a href="http://u3d.as/6cc">Shader Forge</a></li> <li><a href="http://u3d.as/Luo">Shader Weaver</a></li> </ol> <p>Если хочется начать с чего-нибудь попроще и получить красивый результат, есть ассет <a href="http://u3d.as/R85">Minimalist</a>. Привет, <i>Monument Valley</i>!</p> <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/IDSmufLPt84" frameborder="0" allowfullscreen></iframe></div></div> <p>Можно применять разные цвета на разные стороны объекта с одним материалом, использовать градиенты, есть встроенный редактор материалов, стоит недорого и есть версия Free.</p> <p>Думаю что для мини-игр визуальное программирование отлично подойдет, комбинированный вариант тоже. А редакторы шейдеров определенно стоит попробовать!</p> Добавление Google Play Services в Unity проект https://mopsicus.ru/all/plugin-google-play-services-dependencies-unity/ https://mopsicus.ru/all/plugin-google-play-services-dependencies-unity/ Mon, 30 Jan 2017 11:18:03 +0300 Игорь Лопатин https://mopsicus.ru/all/plugin-google-play-services-dependencies-unity/ <p>Прошло время ручного копирования JAR файлов и ресурсов в папку с проектом. Все плагины для Android теперь надо компилить в AAR модули. Кроме того, если в плагине реализуются какие-то функции для работы с Google сервисами, например, пуш-уведомления, сохранение в облако, или авторизация, то нужно подключать к модулю зависимости.</p> <p>Раньше (до 5 версии Unity, по-моему), в папку с проектом добавляли JAR файл со всеми Google сервисами, размером 5-6 мб, что конечно «не очень» оптимально. Теперь все сервисы разделены на отдельные AAR модули, которые хранятся в папке с SDK.</p> <p>Google сделал специальное расширение для Unity, которое само подгружает нужные модули и зависимости в проект. Достаточно указать, что вы собираетесь использовать. Это очень удобно.</p> <pre class="e2-text-code"><code class="">Google.VersionHandler.InvokeInstanceMethod( svcSupport, &quot;DependOn&quot;, new object[] { &quot;com.google.android.gms&quot;, &quot;play-services-games&quot;, &quot;10.0.1&quot; }, namedArgs: new Dictionary&lt;string, object&gt;() { {&quot;packageIds&quot;, new string[] { &quot;extra-google-m2repository&quot; } } });</code></pre><p><a href="https://github.com/googlesamples/unity-jar-resolver">https://github.com/googlesamples/unity-jar-resolver</a></p> Sitemap для Эгеи https://mopsicus.ru/all/sitemap-for-aegea/ https://mopsicus.ru/all/sitemap-for-aegea/ Tue, 22 Nov 2016 15:16:39 +0300 Игорь Лопатин https://mopsicus.ru/all/sitemap-for-aegea/ <p><i>Обновлено для последней беты</i></p> <p>Знаю, что Илья Бирман, разработчик <a href="http://blogengine.ru">движка для блога Эгея</a>, «против» нативной генерации sitemap файла, поэтому пришлось сделать небольшой PHP скрипт для себя. Добавил задание в Cron, чтобы раз в неделю генерил новый файл. Квест пройден.</p> <pre class="e2-text-code"><code class="">&lt;? $domain = 'mopsicus.ru'; // домен $db_user = 'login'; // логин к БД $db_password = 'password'; // пароль к БД $db_database = 'blog'; // название БД $db_host = 'localhost'; // адрес БД $db = new mysqli($db_host, $db_user, $db_password, $db_database); $xml = '&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;'; $xml .= &quot;\n&quot;; $xml .= '&lt;urlset xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns=&quot;http://www.sitemaps.org/schemas/sitemap/0.9&quot; xsi:schemaLocation=&quot;http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd&quot;&gt;'; $result = $db-&gt;query(&quot;SELECT MAX(`LastModified`) AS `LastModified` FROM `notes` WHERE 1&quot;); while ($row = $result-&gt;fetch_assoc()) { $xml .= &quot; &lt;url&gt; &lt;loc&gt;http://$domain&lt;/loc&gt; &lt;priority&gt;1.0&lt;/priority&gt; &lt;lastmod&gt;&quot;.date('Y-m-d\TH:i:s\Z', $row['LastModified']).&quot;&lt;/lastmod&gt; &lt;/url&gt;&quot;; } $result = $db-&gt;query(&quot;SELECT OriginalAlias, LastModified FROM `notes` WHERE IsPublished = 1 AND isvisible = 1&quot;); while ($row = $result-&gt;fetch_assoc()) { $page = $row['OriginalAlias']; $xml .= &quot; &lt;url&gt; &lt;loc&gt;http://$domain/all/$page&lt;/loc&gt; &lt;priority&gt;0.8&lt;/priority&gt; &lt;lastmod&gt;&quot;.date('Y-m-d\TH:i:s\Z', $row['LastModified']).&quot;&lt;/lastmod&gt; &lt;/url&gt;&quot;; } $xml .= &quot; &lt;/urlset&gt;&quot;; $db-&gt;close(); $fp = fopen('sitemap.xml', 'w'); fwrite($fp, $xml); fclose($fp); echo &quot;ok&quot;; ?&gt;</code></pre> Раскрашиваем папки в Unity https://mopsicus.ru/all/unity-rainbow-folders/ https://mopsicus.ru/all/unity-rainbow-folders/ Fri, 11 Nov 2016 14:39:30 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-rainbow-folders/ <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-rainbow-folders.png" width="813" height="401" alt="" /> </div> <p>Просто супер расширение для редактора Unity. Позволяет назначать папкам различные цвета. Очень удобно. Рекомендую!</p> <p><a href="https://github.com/PhannGor/unity3d-rainbow-folders">https://github.com/PhannGor/unity3d-rainbow-folders</a></p> Применение материала к нескольким объектам https://mopsicus.ru/all/apply-material-multiple-objects-unity/ https://mopsicus.ru/all/apply-material-multiple-objects-unity/ Mon, 15 Aug 2016 12:48:11 +0300 Игорь Лопатин https://mopsicus.ru/all/apply-material-multiple-objects-unity/ <p>На самом деле, заголовок не полностью отображает возможности этого скрипта — изменять можно не только материал, а вообще производить над объектами какие-либо манипуляции: изменение параметров, добавление компонентов, и т. д. Нужно лишь немного изменить код.</p> <p>Суть в том, что когда сцена построена, а вам необходимо применить изменения к 30 объектам (или больше), то это может занять время. Конечно, нужно обязательно все делать через префабы, чтобы такие случаи свести к минимуму, но все же, ситуации бывают разные.</p> <pre class="e2-text-code"><code class="">using UnityEngine; using System; using UnityEditor; using UnityEngine.UI; public class AssignMaterial : ScriptableWizard { public bool isRecursively = true; public Material material; string label = &quot;Select Game Objects&quot;; GameObject[] objects; void OnWizardUpdate () { helpString = label; isValid = (material != null); } void OnWizardCreate () { objects = Selection.gameObjects; foreach (GameObject go in objects){ changeMaterial(go); } } void changeMaterial (GameObject go) { if (go.GetComponent&lt;YOUR_COMPONENT&gt; ()) { go.GetComponent&lt; YOUR_COMPONENT&gt; ().material = material; } if (isRecursively) { for (int i = 0; i &lt; go.transform.childCount; i++) { changeMaterial(go.transform.GetChild(i).gameObject); } } } [MenuItem (&quot;Custom/Assign Material&quot;, false, 4)] static void assignMaterial () { ScriptableWizard.DisplayWizard (&quot;Assign Material&quot;, typeof(AssignMaterial), &quot;Assign&quot;); } }</code></pre><p>Создав такой скрипт и положив его в папку <b>Editor</b> вы создадите свой пункт в главном меню Unity. Выбираете <b>Custom → Assign Material</b> и появляется окно применения материала. Выбираете нужный материал, а на сцене объекты к которым его применить и жмете <b>Assign</b>. Готово.</p> <p>В данном примере, я применял новый материал к компоненту <b>Image</b>.</p>