РЕВОЛЮЦИЯ В UNITY! НОВЫЙ ПАТТЕРН - ENTITY-STATE-BEHAVIOUR. СТРИМ

Поделиться
HTML-код
  • Опубликовано: 13 окт 2024
  • Всем привет! 👋
    В общем прошло полгода, и я сделал фреймворк для разработки игр на процедурной и функциональной парадигме, и скорость моей разработки игр выросла в 5 раз 🚀
    Если вкратце, то 6 лет я разрабатывал игры с помощью ООП и считал, что это самый лучший и правильный подход... Но оказалось не совсем так)
    Сегодня я пришел к тому, что ООП хорош в разработке отдельных компонентов, в которых важна инкапсуляция, но взаимодействие между этими объектами лучше описывать статическими методами, которые получают на вход данные из центрального реестра и выполняют над ними работу. Поскольку в процедурном программировании есть четкое разделение на данные и логику, то разработчик может легко переиспользовать любую процедуру или функцию в другой процедуре, и это существенно уменьшит дублирование кода и самое главное - упростит архитектуру!
    В результате этого я полностью отказался от Zenject и DI, потому что это гибче, проще и быстрее)
    Поэтому зовите всех знакомых, кто занимается разработкой игр на Unity!
    Уверен, что такой паттерн должен увидеть каждый разработчик, кто хочет делать игры быстрее и качественнее 💪
    -----------------------------------------------
    Что будет на стриме? 📺
    1. Проблематика ООП
    2. Что такое процедурное программирование
    3. Разработка персонажа на ПП
    4. Боевые примеры
    5. Выводы
    6. Ответы на вопросы
    Ссылка на мой телеграмм канал:
    t.me/unitycode...

Комментарии • 32

  • @francheskodown
    @francheskodown 15 дней назад

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

  • @djedai5
    @djedai5 2 месяца назад +1

    Это как из анекдота: сколько ни делаем ECS, а всё равно Аtomic Design получается.
    Шутка 😁
    Шикарный стрим. Очень много для себя вынес. Спасибо!

  • @LawnManMoscow
    @LawnManMoscow 2 месяца назад +1

    спасибо за проделанную работу! ) 6 часов - это сильно )
    по сути -
    осталось вместо atomic variable использовать атомарные IComponentData (в вашей парадигме)
    и систему с withchangefilter для реактивности
    и singleton для проброса данных из ECS в UI Monobehavior
    понимаю тягу к атомарности и сохранению работы в редакторе, но ECS требует MindShift и как только он произойдет - все будет круто без переизобретения )
    public struct FloatData : IComponentData
    {
    public float value;
    }
    public struct Health : IComponentData
    {
    public FloatData health;
    public FloatData healthMax;
    }
    Для дизайнерского удобства вот здесь можно что-то придумать что-бы таскать IComponentData в редакторе
    типаа словаря name-floatData
    public class HealthAuthoring : MonoBehaviour
    {
    public float healthInit;
    public float heatlhMaxInit;
    public class HealthAuthoringBaker : Baker
    {
    public override void Bake(HealthAuthoring authoring)
    {
    var entity = GetEntity(TransformUsageFlags.None);
    AddComponent(entity,
    new Health()
    {
    health = new FloatData() { value = authoring.healthInit },
    healthMax = new FloatData() { value = authoring.heatlhMaxInit }
    });
    }
    }
    }
    public partial struct HealthShowSystem : ISystem
    {
    public void OnUpdate(ref SystemState state)
    {
    foreach (var health
    in SystemAPI.Query()
    .WithChangeFilter())
    {
    PlayerStatsPresenter.Instance.SetPlayerHealth(health.ValueRO).ToString("F2");
    }
    }
    }

  • @ТимурГанеев-н8ч
    @ТимурГанеев-н8ч 2 месяца назад

    Спасибо за такой детальный разбор. Как раз искал какой то подход для быстрых прототипов. Полностью поддерживаю идею разделения данных и поведения.
    По поводу инсталлеров и тп. однотипного кода: современные IDE поддерживают кастомные снипеты (названия могут отличаться) для таких целей, как вариант =)

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  2 месяца назад

      Благодарю за фидбэк! Да, можно настроить снипетты, в Rider они называются Live Templates

  • @yummybunny7351
    @yummybunny7351 2 месяца назад +1

    Игорь, спасибо за такой огромный стрим. Приятно что у тебя формат часто в видео презентации.

    • @ГерманПопов-х1й
      @ГерманПопов-х1й 2 месяца назад

      да, Игорь нереально крут.

    • @FrunzaVerde-k8c
      @FrunzaVerde-k8c 2 месяца назад

      Перевод логических элементов на русском и английском добавлю через пару месяцев

  • @DarkIllusoire
    @DarkIllusoire 2 месяца назад +1

    Инкапсуляция, это не сокрытие чего-либо, а выделение методов и полей в отдельную сущность - объект, а скрывать там что-то или нет, выбор программиста или ограничение языка

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  2 месяца назад

      У инкапсуляции два определения 🙂
      en.wikipedia.org/wiki/Encapsulation_(computer_programming)

    • @DarkIllusoire
      @DarkIllusoire 2 месяца назад +1

      @@CodeCraftUnityEdition я в курсе, только одно нормальное, а второе тупорылое, причем второе видимо всем ближе, иначе не могу понять, почему его форсят

    • @DarkIllusoire
      @DarkIllusoire 2 месяца назад

      @@CodeCraftUnityEdition и писал статью в вики чувак, который видимо не в курсе, что существуют ООП языки, в которых нет в принципе ограничений видимости. Ну это конечно можно объяснить, что для таких языков первое определение)) Вы не понимаете, это другое

  • @ivanlemming5821
    @ivanlemming5821 2 месяца назад +5

    6 часов отборной дичи про изобретение велосипеда задом на перед

  • @ГерманПопов-х1й
    @ГерманПопов-х1й 2 месяца назад

    тяжело ли будет интегрировать твое решение с steamworks + mirror+ unity? Очень понравились твои рассуждения, но меня тянет постоянно на создание кооперативных игр). Хотелось бы побольше кейсов разработки по твоему фреймворку. Для меня еще не понятен момент насколько удобно будет применять различные эффекты от способностей допустим, анимаций и т.д.

    • @ГерманПопов-х1й
      @ГерманПопов-х1й 2 месяца назад

      Дополняя свой комментарий. Эта тема хорошо зашла на канале, за 2 дня около 1.5к просмотров. Хотелось бы комплексные взаимодействия увидеть в тестовых проектах. Благодарность Игорю за вебинары, приятно контент смотреть (грамотно поставленная не душная речь + презентация).

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  2 месяца назад

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

  • @ArnCiS96
    @ArnCiS96 2 месяца назад

    For demo add more complex interactions, such like multi-story elevator with platform, call button and doors

  • @Lucio11a
    @Lucio11a 2 месяца назад

    А обещанная в начале ссылочка на гит будет? :) Чтоб потыркать и поучиться... А то в телеге нет, тут нет, на репозитории старом тож только атомик последний...

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  2 месяца назад +3

      github.com/StarKRE22/unity-atomic

    • @Lucio11a
      @Lucio11a 2 месяца назад

      @@CodeCraftUnityEdition Благодарствую! Очень интересная тема, по этому хочется пощупать))

    • @FrunzaVerde-k8c
      @FrunzaVerde-k8c 2 месяца назад

      Перевод логических элементов на русском и английском добавлю через пару месяцев

    • @ИванШарычев-о1ъ
      @ИванШарычев-о1ъ 10 дней назад

      @@CodeCraftUnityEdition это ведь не то, тут ссылка на атомик

  • @greenbox674
    @greenbox674 2 месяца назад

    Насчет кодогенерации инсталеров, как вариант можно сделать галочку, которую если убрать, то класс сгенерирован не будет

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  2 месяца назад +2

      А я, кстати, подумал после стрима и сделал универсальный инсталлер, который ставится сразу в испектор!

  • @dmitriikonarev
    @dmitriikonarev 2 месяца назад

    А в чём преимущество этого паттерна перед ECS?

  • @timurnikolaev1438
    @timurnikolaev1438 2 месяца назад

    лайк