#mopsicus

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

Buffer icon Проекты

Рассылка по 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 коммента готов.

 1 комментарий    1606   3 мес   блог   ссылки

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 и ещё какой-то популярной игре. Приятно что этим пользуюсь не только я.

Статистика по рассылке

Небольшая статистика за год рассылки.

Понятно, что первые выпуски прочитали больше, соответственно, больше голосов. Поэтому такой тренд на уменьшение количества голосов.

Статистика рассылки за год

Статистика рассылки за год

Статистика рассылки за год
Статистика по голосам за каждый выпуск

В среднем, рассылку открывают 40-50% подписчиков, но надеюсь, что веб-версию прочитало больше людей :) Несколько раз ссылки на выпуски попадали в телеграм канал по Unity, там было много просмотров, но ссылку давали сразу на Mailchimp, поэтому в статистике это не видно :(

Переходы по коротким ссылкам

Переходы по коротким ссылкам

Переходы по коротким ссылкам
Статистика по переходам с коротких ссылок

Вообще, оказалось, что это не так уж и просто делать рассылку 😅 Но интересно. Постараюсь в этом году сделать её интересней и полезней.

📩 Все выпуски: 1 2 3 4 5 6 7 8 9 10 11 12

Рассылка по играм и Unity #12

Dirty bomb design document

Dirty bomb design document

Dirty bomb design document

Закрытие сезона, подведение итогов и анонс планов! Всё читайте в 12 выпуске. А также:

  • уроки Unity ECS
  • performance marketing
  • Unity 2020.2
  • за кадром Among Us
  • Unity + ARKit + LIDAR
  • и другие интересности

Читать итоговый выпуск 📩

Предыдущие выпуски: 1 2 3 4 5 6 7 8 9 10 11

→→ Подписаться ←←

Командный бой на Unity (пример)

Так и не придумал как будет правильней назвать этот пример :)

Unity team fight example

Ограниченное поле из клеток и две команды. Юниты появляются рандомно на своей половине и начинается бой.
Каждый юнит ищет противника, как сонар у подводной лодки. Найдя, строит к нему путь с помощью волнового алгоритма и начинает движение. Так как за ход многие юниты могут поменять свое расположение, путь перестраивается каждый раз.

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

Из положительных моментов: почти не выделяется память, только на корутины анимации (но это можно убрать) и все отрисовывается за 2-4 DC.

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

Ранее Ctrl + ↓