Нодовая архитектура на Unity

Поделиться
HTML-код
  • Опубликовано: 24 дек 2024

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

  • @mstislav.pavlov
    @mstislav.pavlov Год назад +6

    Сомневаюсь, что такая архитектура это хорошая практика. Во первых, если речь о стратегия, то там MUST - dod, ибо перформенс. То что тут названо "нодами", это типичные контексты\скоупы, которые из коробки во всех известных DI-контейнерах. Ну и наконец про контекстые эвенты. Такой подход работает только в микро играх. В хоть сколько нибудь сложной игре, таких эвентов наберутся сотни и получится настоящий event-hell, а проект станет неподдерживаемым. Так что отмечу, что это концептуально не правильный подход. Ожидая эвент, мы как правило ожидаем, что какие то данные изменились, и нам нужно выполнить какие то действия, например обновить UI. Проблема в том, что это лишь предположение, которое держится на знаниях о проекте у разработчиков, но никак не поддерживается дизайном архитектуры. Следственно, если в проект добавить разработчика, то он может что то сломать, сам того не зная. Вместо эвентов, нужно отслеживать изменения данных которые реально нужны. Но что бы выстроить такой дизайн, как раз и нужно реально уметь в архитектуру.

    • @MikhailKolobovGamedevForge
      @MikhailKolobovGamedevForge Год назад

      Согласен!
      Как будто бы такая архитектура вылезает просто из нежелания разобраться в уже существующих подходах)

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  Год назад +1

      DOD и перформанс - это разные вещи. Задача DOD - разделить данные и логику, чтобы код механик можно было переиспользовать и собирать из них игровые модели как конструктор. Задача перформанса - увеличить производительность и уменьшить расходы памяти.
      По поводу эвентов, ивенты должны быть только системные. В остальных случаях применяется обычный паттерн "Наблюдатель", которые как раз и подписываются на изменения данных :)

    • @MikhailKolobovGamedevForge
      @MikhailKolobovGamedevForge Год назад +2

      ​@@CodeCraftUnityEdition Снова хромает матчасть. DOD только и создано для обеспечения перфоманса. Данные встают впереди абстракций и поддерживаемости только в целях производительности. К нему идут свою плюшки такие как параллельность и простота тестирования, но тестируемым кодом на видео и не пахнет)
      Само утверждение что "при DOD можно переиспользовать код" означает слабое понимание ООП и его возможностей...
      Жаль, что в настоящее время Senior Unity Developer'ы, создающие каждый день собственные архитектуры, так и не узнали что все архитектуры уже давно создали)

    • @mstislav.pavlov
      @mstislav.pavlov Год назад

      @@CodeCraftUnityEdition dod это data oriented design. Дизайн ориентированный на данные, это вовсе не про: "разделить данные и логику", а про организацию испольняемого кода (включая данные в памяти офк) таким образом, что бы он был кешлайн френдли, для извлечения перформенса который мы теряем при классическом подходе. А разделение данных и логики, это вообще база, которая относится чуть меньше чем к любому подходу. Что касается обычного паттерна наблюдателя, то обычная реализация должна реализовывать IObservable. Если этого не делается, значит это уже не обычная реализация. А если не обычная, то возникает вопрос, зачем? Вы используте IObservable? Если нет, то почему?

  • @германпопов-з2ь
    @германпопов-з2ь Год назад +3

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

  • @NoldoWalker
    @NoldoWalker Год назад +2

    Канал интересный, подача хорошая, спасибо за труды.

  • @Hidzikata
    @Hidzikata Год назад

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

  • @ДенисКаширин-ш9ч
    @ДенисКаширин-ш9ч Год назад +1

    О информацию про архитектуру, благодарю

  • @DiKarDev
    @DiKarDev Год назад

    Не могу выразить даже, как это круто и как это "ко времени" для меня!

  • @DekovirDekovir-is7wd
    @DekovirDekovir-is7wd 3 месяца назад

    А что если нужно посчитать дамаг игрока 1 по игроку 2 учитывая атаку игрока 1 и защиту игрока 2? Я хочу сказать, что когда я делал игру с двумя игроками мне пришлось сперва инжектить дочерние а потом родительские контексты. Потому что нужны были глобальные сервисы имеющие ссылки на сервисы обоих игроков чтобы организовывать их взаимодействие. У вас только стрелки вниз. Может я не понимаю как это сделать? Или у вас получается ecs косвенно ссылается на данные всех игроков?

  • @JanitorDoshiraak
    @JanitorDoshiraak Год назад +5

    Го видос про туман войны!

    • @JanitorDoshiraak
      @JanitorDoshiraak Год назад +2

      Реально годных ресурсов на эту тему на просторах просто нет.

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  Год назад +1

      Сделать бы еще туман войны... 😄

  • @Evgenyi_Kolovratov
    @Evgenyi_Kolovratov Год назад

    Круто! и доступно!

  • @infavi
    @infavi Год назад

    Сумасшедший контент, спасибо вам огромное за работу!

  • @Andrey-mr5wf
    @Andrey-mr5wf Год назад

    яхай! Снова годный контент по юньке подъехал. От души ❤

  • @ИгорьСлепков-х3с

    Спасибо.
    И ещё четыре слова.

  • @daemonstergames716
    @daemonstergames716 Год назад

    Шикарно 😊

  • @MrFtik
    @MrFtik Год назад

    КаеФ, спасибо за видео! 100500 лайков этому господину!🎉

  • @RealWof
    @RealWof Год назад +1

    Вызов событий у слушателей происходит в порядке добавления и если важен порядок вызова, то такая реализация не подходит.

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  Год назад

      В целом, все так, но обычно порядок вызова не важен :)

  • @KadykovDenis
    @KadykovDenis Месяц назад

    Разве Юнити не делалась для того что бы геймдизанеры и художники могли работать параллельно с программистами? Если Геймдиз подвигал и что то сломалось, то значит просто плохой прогер. Разве нет?

  • @Lucio11a
    @Lucio11a Год назад

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

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  7 месяцев назад +1

      Да, поэтому прелести Zenject'а можно вкурить только на большом проекте :)

  • @АнтонЕлумеев
    @АнтонЕлумеев Год назад +2

    За видосы по архитектуре можно по 10 лайков ставить, жаль нельзя!)

  • @родионпапиж
    @родионпапиж 7 месяцев назад

    Могу ли я использовать эту архитектуру не только к стратегии, но или например к рпг, экшену и тд?

  • @antigames4656
    @antigames4656 Год назад

    Эх нового видео долго нет. А люди ждут 😊

  • @Memstorm
    @Memstorm Год назад

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

  • @A113-t6k
    @A113-t6k Год назад

    Так и не стало понятно, почему не подошел ZEnject? Чего в нем не хватило?

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  Год назад +1

      Zenject можно юзать, я просто люблю велосипеды :)
      А так в Zenject'е нет системы игровых событий, ее нужно допиливать к нему

    • @A113-t6k
      @A113-t6k Год назад

      Понял, спасибо@@CodeCraftUnityEdition

    • @MikhailKolobovGamedevForge
      @MikhailKolobovGamedevForge Год назад +1

      @@CodeCraftUnityEdition В Zenject'e есть шина событий, просто называется она Signals)

  • @Ra5ta
    @Ra5ta Год назад +2

    Велосипедный спорт, но почему бы и нет

  • @alexkazimir3835
    @alexkazimir3835 Год назад

    Думал, что здесь какая-то вариация акторной модели для игростроя

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  Год назад

      Не оч понял про акторную модель

    • @alexkazimir3835
      @alexkazimir3835 Год назад

      @@CodeCraftUnityEdition название и постановка вопроса создали ложные представления

  • @GiftedMamba
    @GiftedMamba Год назад +6

    Не ври, все мы знаем, что ты делаешь велосипеды просто потому, что ты их любишь делать)!

  • @MrKingofTiger
    @MrKingofTiger Год назад

    а в чём прикол использовать старую систему ввода живущую в Update, а не новую на событиях?

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  Год назад

      Тут был просто пример на старой, особо на этом не фокусировал внимание :)

  • @РоманВоронин-н7и

    Ну, для меня, как для новичка, информация сложна. На малых проектах такое может и не нужно. Но, смотрю, опытные гуру в комментах тоже не довольны))

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  Год назад +1

      Привет!
      На малых проектах такое, действительно, не нужно. В моем случае проект большой, поэтому мне такое нужно :)

    • @РоманВоронин-н7и
      @РоманВоронин-н7и Год назад

      @@CodeCraftUnityEdition еще раз пересмотрел, спустя два месяца собственных подуг в разработке (я еще совсем новичок). По-другому восприниматеся. Сам столкнулся с проблемой инициализации компонентов в игре и с жесткой привязкой к монобехам. Попробую базовые принципы перенять. Спасибо. Ты молодец!

  • @MikhailKolobovGamedevForge
    @MikhailKolobovGamedevForge Год назад +2

    А зачем называть контексты "нодами"?) Типа чтобы выглядело как СОБСТВЕННАЯ НЕ ТАКАЯ КАК ВСЕ АРХИТЕКТУРА? А не просто как калька на любой DI фреймворк?
    Выглядит просто как попытка скрыть непонимание существующих принципов за "созданием новых решений"
    Жаль что видимо на хабре не сложилось засорять умы такими "революционными" решениями, пришлось идти на ютуб за более несмышленной аудиторией)

    • @CodeCraftUnityEdition
      @CodeCraftUnityEdition  Год назад

      На самом деле, это, действительно, собственная архитектура для моего проекта, и я ее назвал нодовой, потому что она фактически строится на одном классе контекста. А статья на хабре будет :)

    • @MikhailKolobovGamedevForge
      @MikhailKolobovGamedevForge Год назад

      ​@@CodeCraftUnityEdition Все еще не звучит как хоть какая-то разница между этим и любым DI-фреймворком) Скорее как неумение им пользоваться
      С тем же успехом можно назвать Model-View-Controller как Data-Presentation-Manager и назвать это "собственной архитектурой для моего проекта"

  • @admenmod
    @admenmod 3 месяца назад

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