об играх, разработке на Unity и личном опыте

Buffer icon Проекты
Позднее Ctrl + ↑

Как использовать Git Submodules в Unity

И тут сразу возникает вопрос: почему не использовать пакеты и UPM? Это удобно, да и весь механизм уже встроен в Unity?

Но как оказалось, не всегда удаётся выделить какую-то часть приложения в отдельный пакет, чтобы у него было минимум зависимостей и он представлял из себя какую-то самостоятельную единицу. Проекты бывают разные, с различной архитектурой и набором дополнительных ассетов и прочего. А выделить какую-то общую часть (ядро) хочется, чтобы использовать её в других проектах... В общем, если по какой-то причине пакеты вам не подходят — попробуйте Git Submodules.

В чём отличие при работе с сабмодулями гита?
Unity использует скрипты и ассеты которые расположены в папке Assets. Если вы попробуйте подключить сабмодуль и указать путь, например Assets/Core, то ничего не получится, потому что папка Assets уже существует. Поэтому надо провернуть такой финт:

  1. Подключаете сабмодуль к проекту (как это сделать, тут описывать не буду, потому что есть разные клиенты SourceTree, Fork, GitKraken, просто консоль)
  2. В качестве директории можно указать Modules/your_module
  3. Переходите в папку Assets
  4. Устанавливаете симлинк (symlink) на новый сабмодуль. Всё! Он у вас в проекте, можно пользоваться.
cd Assets
ln -s ../Modules/Core Core

Выглядеть это будет примерно так:

Unity Git submodules

Unity Git submodules

Unity Git submodules

Теперь если в подключаемых сабмодулях, что-то меняется, надо просто спуллить обновления. В общем, кто привык работать с Git, то всё достаточно привычно и понятно.

Интеграция HMS SDK

Huawei AppGallery

Huawei AppGallery

Huawei AppGallery

Сделали интеграцию одной из наших игр в Huawei AppGallery. Пока большого прироста пользователей там не видим, но мы особо и не надеялись :) Заменили гугловские компоненты на хуавеевские и почти всё заработало как надо.

Заменили три основных: авторизацию через Google Sign-In, встроенные покупки и пуш уведомления. Надо сказать, что Huawei умеет хорошо списывать, получилось почти строчка в строчку. Но некоторые вещи работают только на Huawei девайсах, это надо иметь ввиду.

LeoEcsLite

LeoEcsLite for Unity

LeoEcsLite for Unity

LeoEcsLite for Unity

Leopotam выкатил сверхлегкую компиляцию ECS, обкатанную на многих проектах, зарефакторенную и оптимизированную до невозможности: кодобаза стала в 2 раза меньше, всё работает быстрее, нет ограничений на констрейнты в фильтрах — можно хоть сотню закинуть, кеши в фильтрах больше не нужны и т. п.

https://github.com/Leopotam/ecslite

 Нет комментариев    1995   2021   ecs

Рассылка по Unity #15

Unity shader example

Unity shader example

Unity shader example

Вышел последний выпуск рассылки :( Пока её придётся приостановить. В связи со своей загруженностью не смогу делать полноценные выпуски. Но надеюсь, что это временно.

Читать выпуск №15 ?

? Сезон №2: 1 2 3
? Сезон №1: 1 2 3 4 5 6 7 8 9 10 11 12

А ещё сейчас изучаю как выпускаться в Huawei AppGallery и интегрировать их сервисы в приложение. Вроде ничего суперсложного, на 95% они повторили Google сервисы :)

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.

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

Unity 2020 LTS

Unity timeline releases

Unity timeline releases

Unity timeline releases

Как и обещали, юнитеки выпустили LTS версию Unity 2020.3. Качаю, буду тестить. Вообще, в 2019.4 LTS всё работает и смысла пока переходить не вижу. Тем более в ближайшие 2-3 недели выйдет фикс, как это обычно бывает. Наверняка одно починили, другое поломали :)

А ещё вышел 14 выпуск рассылки! Читать ?

Рассылка #13

Compression types

Compression types

Compression types

Новый выпуск уже в почте. Что там:

  • введение про разработку плагинов
  • тутор по Unity и Photon
  • лучшие инди-игры 2020
  • типы сжатия картинок
  • от Soft Launch до $1 млн

Читать выпуск ?

Форматирование С# кода в 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 коммента готов.

200 звёзд на Github

Achievement unlocked!

Моё новое скромное достижение. Скрипт с data-driven прокруткой для Unity, получил 200 звёзд на Github. Спасибо S1ROZHA :)

Infinite scroll unity 200 stars

Infinite scroll unity 200 stars

Infinite scroll unity 200 stars

Мне как-то писали, что используют его в MTG Arena и ещё какой-то популярной игре. Приятно что этим пользуюсь не только я.

Ранее Ctrl + ↓