Архитектура проекта в Unity. Часть 1

Sdílet
Vložit
  • čas přidán 28. 08. 2024
  • Поддержи канал, бро!
    paypal.me/game... - мир
    boosty.to/game... - рф
    И даже криптой (пока только Ethereum):
    0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77
    Первый урок из цикла Архитектура проекта. Один из множества способов организации способов, чтобы везде был порядок, и одновременно, мы могли из разных мест получать ссылки на разные механики, места, скрипты. Архитектура кода - важнейшая составляющая разработки больших и средних проектов. Не претендую на использование исключительно моего варианта, но полезных практик и мыслей встретится достаточно!
    ----------
    Поковыряться в моей архитектуре можно скачав проект с GitHub:
    github.com/vav...
    ----------
    Архитектура. Часть 2: • Архитектура проекта в ...
    Архитектура. Часть 3: • Архитектура проекта в ...
    Архитектура. Часть 4: • Архитектура проекта в ...
    Архитектура. Часть 5: • Архитектура проекта в ...
    ___
    Лавка Разработчика в других соц. сетях, добавляйтесь!
    gamedev... - вконтактик
    t.me/gamedevlavka - телеграм канал Лавки Разработчика
    t.me/gamedevta... - ламповый чат
    / discord - дискорд сервер

Komentáře • 92

  • @eugene8863
    @eugene8863 Před 3 lety +53

    Спасибо, недавно начал изучать юнити с целью саморазвития в геймдеве и столкнулся с проблемой, что мало инфы про архитектуру и структуру проектов. Очень хотел бы увидеть архитектуру на каком то простом, но правильном продакшен примере, дабы не изобретать свой велосипед и не гавнокодить. Буду ждать следующие части, не забрасывай.

  • @tigerjustice
    @tigerjustice Před měsícem +1

    Это невероятно полезная тема. Большое спасибо Вам за эту серию уроков

  • @Jourdfdf
    @Jourdfdf Před 2 měsíci +1

    Перерыла весь ютюб в поиске это инфы, спасибо!

  • @HelloWorld-ln5cy
    @HelloWorld-ln5cy Před 3 lety +7

    Твой канал прямо находка, спасибо за видео, годнота.

  • @KirillBreuss
    @KirillBreuss Před 3 lety +27

    Как не хватает такого материала на ютубе.) Однозначная подписка с колокольчиком. Только не останавливайся!

    • @gamedevlavka
      @gamedevlavka  Před 3 lety +2

      Сейчас небольшой перерыв, занимаюсь переездом, но скоро вернусь)

    • @AndrewDreamKeeper
      @AndrewDreamKeeper Před 2 lety +2

      Поддерживаю твои слова! ) Честно, я даже не догадывался о таком способе. Меня это заставило переосмыслить свой код..

  • @josephlevy3348
    @josephlevy3348 Před 3 lety +5

    Это просто сокровище какое-то

  • @supeskok8224
    @supeskok8224 Před 3 lety +2

    После прохождения junior pathway на unity learn не мог найти хорошие уроки, это то что мне нужно, спасибо за крутой обучающий контент!)

  • @bombilovka16gd17
    @bombilovka16gd17 Před rokem +1

    Ух, это было мощно!)
    Продолжай в том же духе, у тебя все круто получается!!!

  • @Fenix72rus
    @Fenix72rus Před 3 lety +3

    Обожаю этот канал

  • @sequerience
    @sequerience Před rokem +4

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

  • @vladisslavss
    @vladisslavss Před 2 lety +4

    Хороший урок.
    Было бы круто если бы вы объяснили про абстракции и назначение абстракций объектам. Но и так не плохо!)
    Добра вам)

  • @bagi_bk
    @bagi_bk Před 3 lety +3

    Очень хорошая подача материала!!! Спасибо!!!

  • @artemvah2210
    @artemvah2210 Před 2 lety +1

    Очень интересно! Спасибо за урок!

  • @MikhailKolobovGamedevForge

    "Репозиторий - это просто название, которое так уж сложилось в жизни что данные будут храниться в репозитории..."
    Репозиторий - это вполне конкретный паттерн, который абстрагирует хранение данных от предметной логики. То есть предоставляет необходимый интерфейс для приложения с необходимыми ему методами (например: выбрать по id, выбрать все по какому-то признаку, удалить и тд), но само хранение данных делает деталью реализации.
    Таким образом предметной области становится без разницы, где лежат данные (в scriptable object, в json на устройстве или на сервере) и как они обрабатываются.

  • @homelessandhungry4529
    @homelessandhungry4529 Před rokem +1

    Отличные и полезные уроки!👍

  • @mihailpmv1569
    @mihailpmv1569 Před 3 lety +1

    Было очень интересно) Жду следующего видео!

  • @aema02004
    @aema02004 Před 3 lety +2

    Ты крутой. Продолжай

  • @DeadRabbitCanDance
    @DeadRabbitCanDance Před měsícem

    Хорошие у тебя лекции!
    Подскажи пожалуйста, а есть у тебя что то по архитектуре сетевого взаимодействия? Организация обновления мира, состояний и т.д. Как организовать клиент-серверную архитектуру правильно, чтобы важные вычисления, влияющие на основной геймплей (например попадания) считались на сервере, а клиент занимался только отрисовкой красот?

  • @yuriimokryi3935
    @yuriimokryi3935 Před 2 lety +1

    Очень полезно!

  • @user-io6tp1ob3p
    @user-io6tp1ob3p Před 3 lety +1

    оч полезно. Крутотень

  • @user-eh4fm7ux5z
    @user-eh4fm7ux5z Před 3 měsíci

    Добрый день! Такой вопрос, вы оставили свойство Coins с публичным сеттером, правильно ли это? Мы же сможем изменить его из любого класса или я что то не понял...

  • @great8814
    @great8814 Před 2 lety +2

    Привет! После просмотра второго видео заметил сущность Bank и там статика. Зачем она нужна? Если можно просто в тестере обращаться что-то типо такого:
    _bankInteractor.AddCoins(10);
    Просто смысла в этой статике не вижу

  • @qwerty6vov
    @qwerty6vov Před 2 lety +2

    хороший урок и диктор, спасибо! Не подскажешь, твой подход имеет что-то общее с подходами MVVM или MVP или еще чем-то, или он совсем уникальный? Хочется понять немного близко ли это к стандартизированным подходам? Насколько такой подход востребован в студиях?
    Заранее спасибо!

    • @gamedevlavka
      @gamedevlavka  Před 2 lety +1

      Есть общее с MVC, где View - это UI, controller это интерактор, в Model - это репозиторий. Так как я выводил эту архитектуру самостоятельно, то сходства весьма слабые, но очевидные. Сейчас перепиливаю архитектуру с нуля, делаю все гораздо лучше :)

    • @qwerty6vov
      @qwerty6vov Před 2 lety +2

      @@gamedevlavka спасибо) надеемся тоже расскажете потом в видео новые версии, очень интересно было бы)

    • @user-xl2tf4gq1g
      @user-xl2tf4gq1g Před 2 lety +1

      @@gamedevlavka я не гейм-дев, но с Android. То, что ты показал, относится к Clean Architecture. Клин - не замена MVC/MVP/MVVM/MVI. Клин - общий. В клине есть место для презентационного слоя, куда входят MV* типы архитектур.
      И одно не понял с передачей sender в interactor: зачем интерактору знать про какие-то эффекты? Не должно ли это находиться в презентационном слое?

  • @theoctan8569
    @theoctan8569 Před 3 lety +5

    По сути очень напоминает MVC структуру. По сути репозиторий, это модель(Model). Interactor это контроллер(Controller), а вся остальная игровая логика, это представление(View).

    • @gamedevlavka
      @gamedevlavka  Před 3 lety

      Согласен, напоминает. Но я бы не стал проводить аналогию между View и геймплеем

    • @Sv9zlsT
      @Sv9zlsT Před 3 lety +1

      Да на первый взгляд как mvc но если присмотреться то Вью нету по сути интерактор и репозиторий выполняют роль модели, геймплей возможно как контроллер а Вью просто нету)

    • @theoctan8569
      @theoctan8569 Před 3 lety

      @@Sv9zlsT я бы в качестве представления (view) предложил бы интерфейс, так как, по сути, это и есть представление игровых данных, то есть модели, которой управляет геймплей в качестве контроллера. Как вам такой вариант?

  • @developerazcom
    @developerazcom Před 3 lety +4

    Спасибо за видео. очень интересно. Хочу спросить один вопрос, такой уровень навыка программирование в рабочей сфере(например в компаниях) должен быть у каждого джуниора или это уже навыки мидла?

    • @gamedevlavka
      @gamedevlavka  Před 3 lety +3

      Это уже навыки мидла. Если джуниор умеет в архитектуру, то это скорее всего уже не джуниор)

    • @developerazcom
      @developerazcom Před 3 lety

      @@gamedevlavka понятно, спасибо

    • @goga19980
      @goga19980 Před 3 lety +2

      @@gamedevlavka Раз тут вопрос про джуна) Что на практике нужно уметь джуну по юньке - чтобы устроиться на работу?) Я просто проект для портфолио делаю (полностью свой, а не по гайдам или тип того), парочка механик уже сделана (строительство, взаимодействие с интерфейсем, отправка советников в регионы и доставка в регионы к ним приказов (генерация курьера), управление камерой (2d), экономика базовая).

    • @gamedevlavka
      @gamedevlavka  Před 3 lety +6

      Смотря в какой геймдев рвешься. Больше требуются в мобильный.
      - Опыт любых проектов приветствуется. Коммерческий проект в приоритете - все платформы
      - Знание и понимание ООП, более менее красивый и читабельный код - все платформы
      - Любой опыт запуска проекта в стор (Google Play, App Store) - мобильные платформы
      - Умение использовать плагины (настраивать внутреигровые покупки, рекламу, аналитику) - все платформы, кроме монетизации.
      - Умение собирать билды для GP и/или AppStore - мобильные платформы.
      С таким набором можно куда-то приткнуться, но честно скажу, чем лучше код (четкое понимание ООП, использование паттернов в правильных местах, красивый и читаемый код), тем больше шансов. Даже если остальное недотягивает. Ибо остальное подучить - дело быстрое, а обучить программированию дольше.

    • @goga19980
      @goga19980 Před 3 lety +1

      @@gamedevlavka если дам доступ посмотреть на гитхабе проект, дашь оценку?)))

  • @_Otets_
    @_Otets_ Před rokem

    В общем чем-то напоминает UI - BLL -DAL структуру из бизнес приложений.

  • @user-hq2wg8pg1l
    @user-hq2wg8pg1l Před 2 lety +1

    Спс

  • @AcidFloor90
    @AcidFloor90 Před 2 lety +1

    Ну в общем классика - MVC (Model, View, Controller)
    Только что называется иначе

  • @sigvist6228
    @sigvist6228 Před 3 lety +2

    А можно где-то найти мануалы или книги про то как нужно проектировать в Юнити или в других игровых движках?

    • @dehaproject
      @dehaproject Před 9 měsíci

      Спустя 2 года спрошу, как успехи?

  • @uralfansoft
    @uralfansoft Před 2 lety

    В других курсах интеракторы называют сервисами, а репозиторий - ассет провайдером

  • @quieteroks
    @quieteroks Před rokem

    В конце прозвучала плохая фраза "отделять данные от их обработки". Это один из вариантов, но он приносит к сожалению много боли и дублирования кода. Ну а репозиторий желательно должен предоставлять доступ к сущности, а не к данным.

  • @aleksalex1479
    @aleksalex1479 Před 2 lety +1

    Спасибо за видео!
    Только есть вопрос: это ECS ? И если нет, то можно ли сочетать эту архитектуру и ECS?

    • @user-cx1vt1kp1j
      @user-cx1vt1kp1j Před 2 lety +2

      Это однозначно не ECS. У ECS дргуие слои. E это Entity (Сущьность), C - Component (Компонет), S - System (Система). Они тоже взаимоимодействуют друг с другом. Но по особому

  • @ilgiz2616
    @ilgiz2616 Před 2 lety +2

    Автор похоже не из шарпа пришел в программироdание - стиль кода что то на JS похоже ))) Особенно скобки на одной строке и публичные поля с маленькой буквы )

    • @vlader776
      @vlader776 Před rokem

      Скорее, в компании, в которой он работает такой КодСтайл

  • @Sv9zlsT
    @Sv9zlsT Před 3 lety +1

    Надеюсь список сущностей архитектуры будет собираться через рефлексию? Не зря же им как метка был сделан базовый абстрактный класс..., Хотя и через интерфейс можно было)

    • @gamedevlavka
      @gamedevlavka  Před 3 lety

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

  • @qweerval
    @qweerval Před rokem

    Для меня произошла какая-то магия
    почему данные сохранились при повторном старте игры? где именно это прописано?

  • @DarkW1zard
    @DarkW1zard Před 2 lety

    Мужик в сером на фоне красного ковра :)

  • @Malryni
    @Malryni Před rokem

    Доброго времени суток, вопрос по архитектуре. Разве должен bankInteractor знать кто его юзает? Его функция ведь в добавлении монеток, а знание кто его юзает - ему не нужно. Или создание некого "GameController" который раскидает по евентам функцию добавления монеток по кол-ву, и затем при условном подборе мы просто заколим евент на подобранную сумму - это плохо? Если да - то чем?

  • @domingo2407
    @domingo2407 Před 2 lety

    Ты когда то писал приложения для android? Репозиторий популярный шаблон там)

  • @shyxiaolong
    @shyxiaolong Před 2 lety

    А можно ссылку на урок про который вы говорили про ивенты? не нашел у вас на канале

  • @user-pq9pv5vd3m
    @user-pq9pv5vd3m Před 3 lety +2

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

    • @gamedevlavka
      @gamedevlavka  Před 3 lety +2

      Вот здесь, я писал, почему я пишу this везде:
      t.me/gamedevlavka/15

    • @user-pc1bs1xy2q
      @user-pc1bs1xy2q Před 3 lety

      Да, я тоже удивился. Потому что привык к нижнему подчёркиванию.

    • @nickicool
      @nickicool Před 2 lety

      тоже пишу с this.

  • @star_killer121
    @star_killer121 Před rokem

    Зачем ты используешь this при обращении к полям класса?
    Методы и переменные находятся в единой зоне видимости в классе

  • @zeverz9621
    @zeverz9621 Před 8 měsíci

    Не совсем понимаю зачем нам сущность дробить на интерактор и репозиторий. Не проще ли реализовать сущность с помощью интерфейсов (интерактор и репозиторий) и мы также сможем всем этим управлять, только уже через интерфейсы и не надо будет дублировать инициализацию.

  • @Nikolai2033
    @Nikolai2033 Před 3 lety +1

    Почему ты сделал абстрактные классы, а не интерфейсы?

    • @gamedevlavka
      @gamedevlavka  Před 3 lety

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

  • @dmitriybelousov7246
    @dmitriybelousov7246 Před 2 lety

    День добрый ! Интересно с вами пообщаться на тему совместной работы над проектом...

    • @gamedevlavka
      @gamedevlavka  Před 2 lety

      Приветствую! По таким вопросам удобнее общаться в телеграм: @vavilichev

  • @Tornado-ln7fq
    @Tornado-ln7fq Před rokem

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

    • @vlader776
      @vlader776 Před rokem +1

      Все в разработке строится на ООП. Каждый игровой объект описывается в классе, в котором прописываешь основную логику этого объекта. Грубо говоря, есть войн у которого есть health, damage, он может принимать дамаг и умирать. А есть игрок, который тот же войн, только управляется через userInput и есть враг, который управляется с помощью ии. Зачем делать дубляж кода для Врага и Игрока, если можно создать абстракцию (шаблон), которым ты опишешь общую логику двух объектов, а потом дополнишь в другом классе их особенности. Но ужаснее всего описывать логику врага и игрока в рамках одного класса..

    • @Tornado-ln7fq
      @Tornado-ln7fq Před rokem

      @@vlader776 Вот я про это и говорю.

  • @paimonc8593
    @paimonc8593 Před 9 měsíci +1

    что за ide?

  • @GameStormable
    @GameStormable Před rokem

    Так это же обычный MVC, нет?

  • @mixer9524
    @mixer9524 Před rokem

    А каким образом в репозитории сохраняется информация после завершения программы?

    • @newgrafon5185
      @newgrafon5185 Před rokem +1

      загугли что такое PlayerPrefs в юнити

  • @AmbassadorOfLogic
    @AmbassadorOfLogic Před 2 lety +1

    Правильно ли я понимаю, что файл "репозиторий" - по сути - база данных?

    • @gamedevlavka
      @gamedevlavka  Před 2 lety

      Скорее контейнер с данными. Их можно передавать и забирать откуда-то.

  • @ProCLickM
    @ProCLickM Před rokem +1

    ПОдписка)

  • @hardlandingtac
    @hardlandingtac Před 2 lety

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

  • @proggerpro4
    @proggerpro4 Před 6 měsíci

    Зачем столько лишних this?

  • @ArtsevDmitry
    @ArtsevDmitry Před rokem

    Мне эта архитектура не понравилась, создание репозитория в MonoBehavior это зашквар. А где DI контейнер? А как же тесты потом гнать если всё во вьюхах? А почему mediator не применить для развязки? А почему Command и транзакционную обработку не применить, для модификации моделей? ... ??? не буду продолжать ??? ...

  • @morons9156
    @morons9156 Před 2 měsíci

    Данная информация всё ещё актуальна и полезна начинающим разработчикам (коим являюсь я)? Такой же вопрос к плейлисту "Устарело. На пересъёмку". Я начал смотреть, для новичка выглядит очень полезно, но название "устаревшее" немного смущает.

    • @chernos
      @chernos Před 2 měsíci

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

    • @chernos
      @chernos Před 2 měsíci

      Сейчас видеоблогер снимает серию видео по созданию игры, рекоммендую к просмотру.