Buffer icon Проекты

Избранное

MoDI

MoDI. Lightweight IoC container for Unity.

MoDI. Lightweight IoC container for Unity.

MoDI. Lightweight IoC container for Unity.

MoDI — простой контейнер для внедрения зависимостей в Unity.

Когда я хочу в чём-то разобраться, я почти сразу перехожу к практической части. Если со старта не получается, тогда начинаю читать мануалы :) После этого, снова повторяю шаг №1 и так по кругу. Иногда это надоедает и я или ищу другие пути решения, или говорю себе, что это «не моё», мне это не надо — сдаюсь короче.

Решил я однажды разобраться как работать с Zenject и Ninject в Unity. Сделал несколько тестовых проектов — вроде работает. Начал копать дальше, понял принцип и решил, что хочу своё такое же, но попроще :) И чтобы было достаточно для всех моих разработческих потребностей. Так появился MoDI.

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

Это можно сказать и про ECS, да Leopotam? :)

MoDI можно подключить к проекту с помощью пакетного менеджера, через него же можно импортировать сцену с примерами. Ну или просто скачать архив и добавить в проект.

Простейший пример выглядит так:

using MoDI;
using UnityEngine;

public class QuickStart : MonoBehaviour {

    public void Start() {
        DI.Get().Bind<Hello>().WithArguments("Hi, I'm MoDI!");
        Hello hello = DI.Get().Resolve<Hello>();
    }
    
}

public class Hello {

    public Hello(string data) {
        Debug.Log(data);
    }

}

После запуска данного скрипта в консоли появится сообщение: «Hi, I’m MoDI!».

В документации можно найти ещё примеры и описание API.

Очередной велосипед для себя, но может кого-то заинтересует. Если хотите разработаться в этом как и я, пишите, помогу чем смогу 😉

Форматирование С# кода в VS Code

До недавних пор, весь код я форматировал с помощью расширения C# FixFormat. Оно старое, не поддерживается, но работает! И вполне себе работает.

Но после недавней переустановки VS Code, я ставил заново расширение для C# (OmniSharp) и погуглил на предмет выше. Как оказалось, OmniSharp уже умеет сам форматировать код, причем использует все необходимые параметры.

Для того чтобы всё это заработало, надо в корне проекта создать файл omnisharp.json и добавить туда параметры форматирования. Например:

{
    "FormattingOptions": {
        "newLine": "\n",
        "useTabs": false,
        "tabSize": 4,
        "indentationSize": 4,
        "NewLinesForBracesInTypes": false,
        "NewLinesForBracesInMethods": false,
        "NewLinesForBracesInProperties": false,
        "NewLinesForBracesInAccessors": false,
        "NewLinesForBracesInAnonymousMethods": false,
        "NewLinesForBracesInControlBlocks": false,
        "NewLinesForBracesInAnonymousTypes": false,
        "NewLinesForBracesInObjectCollectionArrayInitializers": false,
        "NewLinesForBracesInLambdaExpressionBody": false,
        "NewLineForElse": false,
        "NewLineForCatch": false,
        "NewLineForFinally": false,
        "NewLineForMembersInObjectInit": false,
        "NewLineForMembersInAnonymousTypes": false,
        "NewLineForClausesInQuery": false
    }
}

Также, не забудьте поставить в настройках VS Code:

  • Csharp → Format → true
  • Editor → Default formatter → ms-dotnettools.csharp

Для форматирования при вводе и сохранении:

  • Editor → Format On Type → true
  • Editor → Format On Save → true

И как бонус: OmniSharp также научился ставить XML комментарии, так что, минус ещё одно расширение. Просто вводите три слеша над методом и шаблон XML коммента готов.

Пароль от SSH ключа

Забыл пароль от SSH ключа. И такое бывает...

Уже думал, что сейчас сделаю новый и потом буду обновлять ключ на всех серверах, на Github и прочих сайтах. Но, как оказалось в MacOS есть возможность посмотреть пароль.

  1. Открываете «Связку ключей»
  2. Ищите свой ключ (id_rsa или любой другой)
  3. Вводите пароль пользователя (скорее всего пользователь должен быть админом)
  4. Всё!
 Нет комментариев    455   9 мес   mac

Как освободить место на MacOS

Cleanup MacOS

Cleanup MacOS

Cleanup MacOS

Я уже как-то писал, как освободил кучу места на маке, почистив кеш Xcode. Есть даже специальная программа DevCleaner for Xcode, чтобы не ковыряться по папкам вручную, ей то я и пользуюсь теперь.

Как бы не хвалили MacOS, в сравнении с Windows, но система засирается также, как и ОС от Microsoft.

Но, время шло, а место на диске по чуть-чуть уменьшается и уменьшается. Даже не смотря на то, что я чистил кеш Xcode, логи и прочее. В какой-то момент, раздел Другое стал занимать больше 200 ГБ! Погуглил. Рекомендовали, запуститься в безопасном режиме и перезагрузить 🤷‍♂️. Да, это вообще не помогло, освободилось может пару сотен мегабайт. Скачал MacCleaner и посмотрел, что же там такого...

  1. Удалил кеши от старых программ в ~/Library/Caches (почему мак их не чистит сам — хз)
  2. Удалил папки от неиспользуемых программ в ~/Library/Application Support
  3. Удалил сам Xcode и папки, которые к нему относились
  4. Ещё мелочи всякие

Сколько читал и видел этой навязчивой рекламы MacCleaner, почти все писали, что это мусорный апп и т. п. Не знаю, первый раз запускал, но пользу он принёс.

Освободилось немного, но всё равно, раздел Другое был огромным. Потом, я запустил Disk Expert от того же MacCleaner и пошёл искать ещё. И в системных! папках было две, по 35 ГБ каждая: com.apple.Developer и com.apple.AppStore. Погуглил про них, я был не одинок :) Там были какие-то кеши старых приложений, Xcode опять же, и очень много другого. Удалил всё из них.

Потом ещё запускал App Cleaner & Uninstaller, этот апп, как я понял, как раз и занимается тем, что удаляет приложение и все его кеши, службы, временные папки, логи и т. д. Короче, то что в Windows делает Uninstall. Поэтому, заявление что в MacOS достаточно удалить программу из папки «Программы» — враньё. Не работает это так.

В итоге: перезагрузился, всё работает, +90 ГБ свободного места.

UPD: ещё есть апп OmniDiskSweeper, простой, но сразу видно где большие файлы и папки, рекомендую.

 1 комментарий    501   9 мес   apple   mac

Градиентный текст в Unity

В пакете TextMeshPro уже есть встроенная градиентная заливка, но для моей задачи она не совсем подходила, потому что работает для каждого символа отдельно. Выглядит это так:

Градиент для каждой буквы

Градиент для каждой буквы

Градиент для каждой буквы

Пришлось написать небольшой скрипт, который вешается на текстовый компонент, берёт цвета градиента из свойств и применяет его для всего текста. Стало выглядеть так:

Градиент для всего текста

Градиент для всего текста

Градиент для всего текста

Принцип простой: разбиваем градиент для количество букв и потом по порядку применяем для каждой буквы свой диапазон.

Исходник

Теперь будет гуглится по full text gradient unity :)

TabsView для Unity

Сегодня у нас раздел «Велосипедостроение» :)

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

Когда-то давно понадобилось сделать в UI горизонтальную прокрутку табами. В iOS есть такой стандартный элемент. В Android по-моему тоже. Для Unity как известно стандартные UI компоненты довольно скудны. Поэтому каждый придумывает себе, по мере надобности. Вот и получилось когда-то такое, довольно простое решение.

  • Управляется свайпами
  • Есть индикаторы состояния табов
  • Анимации можно делать любые, с помощью DOTween
  • На переключение таба можно повесить хук

Исходники на Github

Свой CI/CD для Unity

Mopsicus CI/CD bash script

Mopsicus CI/CD bash script

Mopsicus CI/CD bash script

Написал небольшую статью на Хабр про скрипт который получился в результате автоматизации сборки Unity проектов под Android и iOS. Раньше большинство операций делалось вручную, теперь всё сведено к минимуму.

Один запуск скрипта и:

  • скачиваются последние изменения с GIT
  • запускаются тесты
  • собирается APK для Android, в develop или release
  • собирается для iOS Xcode проект, в develop или release
  • компилируется
  • архивируется и экспортируется в IPA
  • генерируется манифест для него
  • генерируются HTML страницы для установки
  • всё это загружается на сервер с помощью sshpass
  • все логи записываются в отдельную папку
  • отсылается уведомление в Телеграмм, что всё готово

Вот такая интеграция и доставка :)

Исходники на Github

Рассылка по Unity

Mopsicus Newsletter subscribe

Mopsicus Newsletter subscribe

Mopsicus Newsletter subscribe

Решил сделать ежемесячную email рассылку по Unity, играм и разработке.

За месяц скапливается много черновиков, но не все они тянут на статью, а постить мелкие разрозненные заметки не хочется. Поэтому подумал в сторону рассылки.

Почему рассылка, а не телеграмм канал, например? Рассылка удобнее в плане неспешного чтения, тем более если она будет выходить раз месяц. В мессенджерах же всегда экшн, куча каналов, групп и уведомлений, полезная информация часто проскакивает мимо. Кроме того, рассылку удобнее структурировать, оформлять, ссылки, картинки, видео, да и почта, как-то больше предназначена для этого всего, как по мне.

Всего один раз в месяц вы будете получать ссылки на:

  • интересные статьи
  • обзоры
  • видео
  • аналитику
  • исходники
  • скрипты
  • игры
  • инструменты разработки
  • до сюда дочитали?
  • плагины и ассеты
  • мои комментарии ко всему этому

Присоединяйтесь!

📩 Ссылки на все выпуски можно найти по тегу: рассылка.

Как делать шрифты для TextMeshPro

TextMeshPro уже давно часть Unity и его можно бесплатно установить через пакетный менеджер. Не буду описывать все преимущества перед старым текстовым компонентом, это примерно как, сравнивать Блокнот и Word.

Шрифт который используется по-умолчанию поддерживает основные символы, но он обычный/скучный/дефолтный, примерно как китовый объектив у фотоаппарата :) Чтобы добавить в свою игру новый красивый/необычный/яркий шрифт, надо проделать все пару операций.

TMP Font Creator

TMP Font Creator

TMP Font Creator

Итак, что необходимо:

  • Сам шрифт TTF (OTF), не забывайте про лицензию ☝️
  • Unity с установленным TMP
  • Набор символов или unicode range, который будете использовать
  • Надо понимать, что во многих шрифтах может не быть необходимых символов
  • У Google есть бесплатные Noto Fonts которые тоже немного скучные, но поддерживают все языки :)
  1. Добавляете файл шрифта в проект, открываете TMP Font Asset Creator и перетаскиваете его в поле Source Font File
  2. Теперь можно выбрать набор символов, для этого есть меню Character Set:

Select character set type for TMP

Select character set type for TMP

Select character set type for TMP
Всё что идёт до Custom Range — понятно, это разновидности ASCII и символы. После это опции где можно выбирать откуда брать символы: из файла, просто перечислить в поле, указать промежуток, последовательность и т. д.
  1. Выберем Unicode Range (HEX) и укажем, например 0020-007F — это базовые латинские символы, ренжи можно указывать через запятую
  2. Теперь можно нажать Generate Font Asset

Окно после настроек и генерации шрифта, должно выглядеть как-то так:

Complete font generation for TMP

Complete font generation for TMP

Complete font generation for TMP
  • Из указанного ренжа было добавлено 95 из 96 символов, не добавился 007F — ␡, его нет в этом шрифте.
  • В результате, для атласа 512×512 получился Point Size = 69, потому что в настройках было указано Auto Sizing.
  • Можно указать размер шрифта вручную, но тогда надо следить чтобы все влезли в атлас и при необходимости увеличить размер атласа.
  • Также, можно разбить свои шрифты на несколько ассетов, например, сделать один (базовый) с часто используемыми символами, второй с математическими знаками, третий с армянским языком. И при необходимости TMP сам будет использовать нужный атлас. Для этого к базовому ассету нужно добавить поддержку остальных:

TMP fallback view

TMP fallback view

TMP fallback view

Как сделать поддержку Emoji в Unity, я уже писал. Ещё недавно на форуме один товарищ опубликовал свое решение проблемы с модификаторами в эмоджи. Напомню, что до сих не работают модификаторы, т. е. если вы сделаете атлас с эмоджи, то всякие флаги, цвет кожи и т. п. будут отображаться некорректно. Автор TMP обещал всё это допилить к версии 2019.3, но пока этого нет. Вариант с форума работает правильно.

Разные unicode ranges для создания своих шрифтов можно подглядеть тут.

Backstage WWDC 2019

Вернулся из Сан-Хосе, был на WWDC 2019, хотелось бы поделиться некоторыми деталями от участника.

В марте «выиграл в лотерею» билет на WWDC и начал оформление доков. Об этом можно написать отдельный пост, если интересно, как сейчас в России получить американскую визу (не быстро, но может повезти). Всё успел, в конце апреля уже была готова виза :)

Три перелёта и я в Сан-Хосе. Сама конфа проходила в McEnery Convention Center, в центре города. Как пишет википедия, Сан-Хосе третий по численности населения в штате, после Лос-Анджелеса и Сан-Диего и десятый в США, а так и не скажешь О_о

Регистрация, получения бейджика, подарков и гоу ту презентация. Начало выглядело как-то так:

Вообще, уровень организации конференции просто супер! Всё очень чётко: сессии, доклады, свет, звук, работа волонтеров, приложение с расписанием и новостями, лаборатории, еда/напитки, всё работало, как часы. Было пару раз когда у докладчиков что-то не компилировалось или не получалось подключиться, но на этот случай были записаны специальные ролики в симуляторе с «нормальной» работой приложения (видимо ранее были прецеденты).

Про саму презу Keynote, думаю особого смысла нет говорить, все всё уже двадцать раз рассказали в подробностях. После, когда смотрел запись, не нашёл на ней как зал смеялся после объявления цены на подставку для нового Mac Pro, это было громко, видимо такие звуки приглушают :)

После Keynote, Тим который Кук, вышел к прессе показать новые возможности AR. Выглядело это вот так:

В холле, между докладами обычно очень людно, но это только в первый день:

Надо сказать, что очереди были везде, из-за большого количества участников: на вход, на доклады, в WWDC Store была отдельная очередь которая начиналась далеко на улице:

После входа в сам магазин, на покупку было ещё 8 очередей с двух сторон, но двигались они достаточно быстро, хотя может мне повезло. Из ассортимента: майки ($35), кепки ($40), свитера ($60), наушники, переходники, зарядки и т. д.

У всех были бейджи, даже у собак :)

Не попал на Bash в четверг :( Был в это время в Сан-Франциско. По фоткам было классно. Жаль конечно...

И немного про доклады. Их было много и темы самые разные. Каждый день с 9 до 17. Много было про SwiftUI и как его использовать, про AR, новые возможности Xcode и iOS 13. На все естественно не было возможности попасть, потому что они шли одновременно в трех залах. Но потом обязательно посмотрю записи.

Ну а сам Сан-Хосе так себе, по сравнению с Сан-Франциско :) Но всё равно очень красиво и интересно.

Ранее Ctrl + ↓