Как реализовать паттерн Команда (Command) в Unity?

Поделиться
HTML-код
  • Опубликовано: 1 июн 2024
  • Поддержи канал, бро!
    www.donationalerts.com/r/game...
    paypal.me/gamedevlavka
    Команда - это всегда круто. А паттерн, так вообще сказка! Есть множество вариантов применения паттерна, и в новом видео я рассказываю один из таких вариантов - как сделать порядок действий, с последующей возможностью отмены действий. Вот такая бабуйня!
    Присаживайтесь, гости дорогие, будем разбираться!
    ___
    Лавка Разработчика в других соц. сетях, добавляйтесь!
    t.me/gamedevlavka - телеграм канал Лавки Разработчика
    t.me/gamedevtavern - ламповый чат
    / discord - дискорд
    gamedevlavka - вконтактик
    __________
    0:00 Вступление. Пример применения
    1:05 Сетап сцены с примером - для понятности
    2:15 Пишем абстрактную команду для движения
    3:52 Реализация шага по прямой
    4:51 Реализация шага по диагонали
    6:32 Реализация примера

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

  • @TheJoker-hm2ip
    @TheJoker-hm2ip 2 месяца назад +2

    Спасибо!!! Очень помог!

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

    Потрясающе, спасибо Вам!

  • @alexsklyarov6792
    @alexsklyarov6792 Год назад +7

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

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

    Круто) Спасибо за видео!) Даешь больше паттернов!)

  • @RimuruDev
    @RimuruDev Год назад +3

    Как обычно, великолепный гайд. За использование List так вообще 👍 Пол года назад когда между делом смотрел про данный паттерн (просто из интереса) там использовали Queue + сам пример был переусложнен, из-за чего как то не отложилось в голове за этот паттерн. Тут же достаточно глянуть этот 10-ти минутный ролик, да же без открытия IDE все локонично и просто. Понял суть паттерна и его Simple Implementation раз и навсегда) Благодарю❤

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

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

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

    А я только-только конспект начал записывать по этому паттерну, спасибо большое за видео

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

    Спасибо вам за ролики, очень помогаете!

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

    Второй раз благодарю. Как раз пришлось использовать паттерн для ручного Map Editor, чтобы можно было быстро убрать)

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

    Спасибо за паттерн. Разобрал, выучил и смог использовать в коммерческом проекте. Спасибо большое ❤️

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

    Спасибо за интересный и полезный ролик.
    Мне только не очень понятна причина по которой для записи команд используется List. Мне кажется здесь больше подходит Stack. Или есть какие-то нюансы о которых я не знаю?

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

    Спасибо за объяснение

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

    Спасибо за видосик. Было бы интересно в будущем увидеть видосик по Zenject, Enject и вот этому вот. Вообще непонятно зачем это нужно и какие преимущества дает.

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

    Спасибо за ролик! Отличный контент которого не хватает на youtube

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

    Уже месяц как не дома( Завтра вернусь, посмотрю обязательно)

  • @Nik-cv5bi
    @Nik-cv5bi Год назад

    Спасибо за видео, интересно было бы посмотреть на использование Zenject в твоём объяснении. Сейчас как раз пытаюсь понять как при спауне кого либо передавать им таргет, пока что пришел к тому что сам спаунер при создании внедряет ссылку на объект. Слышал что Zenject решает такие вопросы, вот только как пользоваться не могу разобраться)

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

    2 недели назад познакомился с этим паттерном. В статье был пример пульта и телевизора, что замотивировало меня сделать симулятор бати

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

      Как успехи? С пультом тоже хороший пример, по его аналогии можно сделать активную абилку, просто переставлять нужную абилку в слот, используя паттерн Команда

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

      @@gamedevlavka никак не могу продолжить из-за моего дикого ржача :D

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

    Привет, будет продолжение видео-уроков с созданием инвентаря?

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

      Привет!
      Скорее будет ремейк. Есть лучшее решение, чем есть в текущих уроках. По всем фронтам)

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

      @@gamedevlavka буду ждать)

  • @HelloWorld-ln5cy
    @HelloWorld-ln5cy Год назад +1

    О круто, было все понятно. Спасибо за ролик.

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

    Если я не ошибаюсь, не обязательно каждый раз пересоздавать команду. Её можно создать один раз. В списке/стеке по сути хранится только последовательность вызова. По крайней мере, в этом примере можно не пересоздавать. А в целом... Не уверен.

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

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

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

    Спасибо за урок, но остался вопрос.
    Есть причина по которой Вы не использовали Stack?

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

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

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

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

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

      @@dmitriygordeev8776 ну или дело вкуса. многие не используют стэк так как считают его просто урезанной версией динамичного массива. ведь по факту все, что ты можешь сделать со стэком можно делать и с динамическим массивом. при этом в последнем случае есть еще и доп. функционал

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

      И все же почему не стек?) Было бы лаконичней и по скорости работы быстрее нет? lastMove = moveJournal.Pop(); lastMove.Undo();

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

      @@inskips потому что аудитория, знающая и понимающая принцип работы листа шире, чем аудитория, знающая и понимающая принцип работы стэка. И чтобы не отвлекаться от темы паттерна, используется лист)

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

    Привет, можешь записать пожалуйста видео, как сделать поворот игрока от первого лица с новой системой ввода. Там непонятная какая-то схема контроля положения мыши на экране, в отличие от старого "mouse X", "mouse Y". Также хотелось бы послушать про всякие возможные варианты хорошей реализации сочетания клавиш.

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

      я видел реализацию комбинаций через словарь клавиша-bool, потом во время нажатия в методе Update проверяется эта клавиша, а в методе Late Update все bool переводят в false, но это как-то криво

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

      Хорошие темы, поковыряю, разберу) было бы больше времени, было бы быстрее, конечно)

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

    Сделай донейшен алертс с минимальной суммой поменьше

  • @aleksey8405
    @aleksey8405 9 месяцев назад +2

    Было бы классно, если бы вы сначала объяснили принцип, просто на пальцах. Например, блок-схемой какой-нибудь, или хотя бы просто проговорили. А потом уже к коду переходили. Сейчас это выглядит так: "Этот паттерн пригодится там, где мы работаем с порядком действий. У нас есть вот такая сцена, вот такие кнопочки. А теперь создадим абстрактный класс, это будет наша команда." Зачем мы создаём абстрактный класс? Какая команда? Как я должен следить за логикой происходящего? Мне нужно посмотреть всё до конца, а потом самому как-то это всё осознать? Вы принцип паттерна объясните. А код я сам напишу. К коду переходить - это самое последнее дело, когда уже понятно, что нужно делать. Посмотрите youtube-канал codaza. Это будет идеальный пример того, как надо делать туториалы.

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

    Абстрактный класс выглядит коряво. Лучше бы сделал интерфейс, а в конструкторе бы прокидывал направление

    • @rtrry-hj5xb
      @rtrry-hj5xb Год назад

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

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

      Если я захочу сделать движение буквой Г, то история с интерфейсом не сработает

    • @gerh667
      @gerh667 Год назад +3

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

    • @rtrry-hj5xb
      @rtrry-hj5xb Год назад

      @@gerh667 вектор это деталь реализации конкретной команды, смысл ее прокидывать клиенту

    • @HelloWorld-ln5cy
      @HelloWorld-ln5cy Год назад +1

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