Как реализовать паттерн Команда (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 Реализация примера
Спасибо!!! Очень помог!
Потрясающе, спасибо Вам!
Привет, спасибо, очень полезно, запиши про мультисцены ролик, и с примерами где лучше использовать такой подход)
Круто) Спасибо за видео!) Даешь больше паттернов!)
Как обычно, великолепный гайд. За использование List так вообще 👍 Пол года назад когда между делом смотрел про данный паттерн (просто из интереса) там использовали Queue + сам пример был переусложнен, из-за чего как то не отложилось в голове за этот паттерн. Тут же достаточно глянуть этот 10-ти минутный ролик, да же без открытия IDE все локонично и просто. Понял суть паттерна и его Simple Implementation раз и навсегда) Благодарю❤
Все правильно, здесь лучше было бы использовать очередь вместо листа!
А я только-только конспект начал записывать по этому паттерну, спасибо большое за видео
Спасибо вам за ролики, очень помогаете!
Второй раз благодарю. Как раз пришлось использовать паттерн для ручного Map Editor, чтобы можно было быстро убрать)
Спасибо за паттерн. Разобрал, выучил и смог использовать в коммерческом проекте. Спасибо большое ❤️
Спасибо за интересный и полезный ролик.
Мне только не очень понятна причина по которой для записи команд используется List. Мне кажется здесь больше подходит Stack. Или есть какие-то нюансы о которых я не знаю?
Спасибо за объяснение
Спасибо за видосик. Было бы интересно в будущем увидеть видосик по Zenject, Enject и вот этому вот. Вообще непонятно зачем это нужно и какие преимущества дает.
Спасибо за ролик! Отличный контент которого не хватает на youtube
Уже месяц как не дома( Завтра вернусь, посмотрю обязательно)
Спасибо за видео, интересно было бы посмотреть на использование Zenject в твоём объяснении. Сейчас как раз пытаюсь понять как при спауне кого либо передавать им таргет, пока что пришел к тому что сам спаунер при создании внедряет ссылку на объект. Слышал что Zenject решает такие вопросы, вот только как пользоваться не могу разобраться)
2 недели назад познакомился с этим паттерном. В статье был пример пульта и телевизора, что замотивировало меня сделать симулятор бати
Как успехи? С пультом тоже хороший пример, по его аналогии можно сделать активную абилку, просто переставлять нужную абилку в слот, используя паттерн Команда
@@gamedevlavka никак не могу продолжить из-за моего дикого ржача :D
Привет, будет продолжение видео-уроков с созданием инвентаря?
Привет!
Скорее будет ремейк. Есть лучшее решение, чем есть в текущих уроках. По всем фронтам)
@@gamedevlavka буду ждать)
О круто, было все понятно. Спасибо за ролик.
Если я не ошибаюсь, не обязательно каждый раз пересоздавать команду. Её можно создать один раз. В списке/стеке по сути хранится только последовательность вызова. По крайней мере, в этом примере можно не пересоздавать. А в целом... Не уверен.
Согласен, в этом случае не обязательно. Если дистанция передвижения разная - то уже просто очередь не пойдет. Это не сильно важно, для демонстрации, но замечание хорошее 👍
Спасибо за урок, но остался вопрос.
Есть причина по которой Вы не использовали Stack?
логичный ответ - наглядность примера для новичков, которые не знают специфические структуры данных. а так да - тут стэк зашел бы на ура
@@gerh667 Промелькнула такая мысль, но не назвал бы стек специфичным, а данную практику полезной. Наоборот, это было бы хорошей демонстрацией использования, позволяющей понять принцип его работы новичкам.
@@dmitriygordeev8776 ну или дело вкуса. многие не используют стэк так как считают его просто урезанной версией динамичного массива. ведь по факту все, что ты можешь сделать со стэком можно делать и с динамическим массивом. при этом в последнем случае есть еще и доп. функционал
И все же почему не стек?) Было бы лаконичней и по скорости работы быстрее нет? lastMove = moveJournal.Pop(); lastMove.Undo();
@@inskips потому что аудитория, знающая и понимающая принцип работы листа шире, чем аудитория, знающая и понимающая принцип работы стэка. И чтобы не отвлекаться от темы паттерна, используется лист)
Привет, можешь записать пожалуйста видео, как сделать поворот игрока от первого лица с новой системой ввода. Там непонятная какая-то схема контроля положения мыши на экране, в отличие от старого "mouse X", "mouse Y". Также хотелось бы послушать про всякие возможные варианты хорошей реализации сочетания клавиш.
я видел реализацию комбинаций через словарь клавиша-bool, потом во время нажатия в методе Update проверяется эта клавиша, а в методе Late Update все bool переводят в false, но это как-то криво
Хорошие темы, поковыряю, разберу) было бы больше времени, было бы быстрее, конечно)
Сделай донейшен алертс с минимальной суммой поменьше
Было бы классно, если бы вы сначала объяснили принцип, просто на пальцах. Например, блок-схемой какой-нибудь, или хотя бы просто проговорили. А потом уже к коду переходили. Сейчас это выглядит так: "Этот паттерн пригодится там, где мы работаем с порядком действий. У нас есть вот такая сцена, вот такие кнопочки. А теперь создадим абстрактный класс, это будет наша команда." Зачем мы создаём абстрактный класс? Какая команда? Как я должен следить за логикой происходящего? Мне нужно посмотреть всё до конца, а потом самому как-то это всё осознать? Вы принцип паттерна объясните. А код я сам напишу. К коду переходить - это самое последнее дело, когда уже понятно, что нужно делать. Посмотрите youtube-канал codaza. Это будет идеальный пример того, как надо делать туториалы.
Абстрактный класс выглядит коряво. Лучше бы сделал интерфейс, а в конструкторе бы прокидывал направление
и какой смысл ему извне прокидывать направление
Если я захочу сделать движение буквой Г, то история с интерфейсом не сработает
по той же логике можно было в MoveCommand вообще сразу вектор движения передавать и тем самым сократить кол-во классов. но тут же все для наглядности делается. по-моему пример получился очень понятным, так что главная цель видео достигнута.
@@gerh667 вектор это деталь реализации конкретной команды, смысл ее прокидывать клиенту
Не знаю, как по мне абстрактный класс тут к месту. И достаточно обосновано. Интерфейсы это конечно хорошо и классно. Но в этом примере это был бы какой-то овер-инженеринг чтоли))