Паттерны стратегия в unity3D

2020 ж. 17 Қаз.
27 752 Рет қаралды

Я начинаю рубрику принципов проектирования, паттернов и чистого кода. В этом выпуске мы разберем стратегию, как один из самых распространенных и в тоже время простых дизайн паттернов.
Поддержка канала:
Patreon - www.patreon.com/user?u=32502669
В крипте:
BTC - 16WmTb4VTFGYrwEjjnMKNNMMzsMB1rPEqD
ETH - 0x8d35406f8317b846528d0a9ea4a34ce59968dff2
XRP - rLW9gnQo7BQhU6igk5keqYnH3TVrCxGRzm (TAG - 1438215071)
LTC- MNSWdzdVsUMnozSU5HhUPEscfxaUK3Fdck
#unity3d #observer #patterns #gamedev #ityoutubersru

Пікірлер
  • Дуже крутий приклад, дякую

    @user-kh2fd9gp2b@user-kh2fd9gp2b9 ай бұрын
  • Очень приятно видеть паттерны в контексте геймдева и часто возникающих задач. Хороший материал

    @ell_pavel@ell_pavel2 жыл бұрын
  • Огромное спасибо за полезную и отлично поданную инфу. Часто не хватает примеров из реальной разработки, а тут отличный пример с жителями города. Однозначно лайк и подписка :D

    @bogdankulikov2214@bogdankulikov22143 жыл бұрын
  • Спасибо! Больше всего мне понравилось именно в этом видео, что автор сначала на пальцах показал дорогу в ад, а потом - паттерн как решение. Сразу узнаешь свои кейсы, и становится понятно не только для чего нужен паттерн, но и в какой момент его лучше использовать.

    @ilyanazarov7001@ilyanazarov70012 жыл бұрын
  • Большое спасибо за подробный и очень полезный урок!

    @ooDEFENDERoo@ooDEFENDERoo3 жыл бұрын
  • Большое спасибо за отличный урок!

    @AB-sm9zd@AB-sm9zd3 жыл бұрын
  • Спасибо! Лучшее видео по этому патерну

    @AliceMonUnitydeveloper@AliceMonUnitydeveloper2 жыл бұрын
  • Спасибо, очень полезный урок!

    @user-cz5rz8zs6v@user-cz5rz8zs6v2 жыл бұрын
  • Невыносимо полезное видео, не ожидал, спаcибо

    @Gekker42@Gekker423 жыл бұрын
  • нихоа не понял, но начинаю смотреть весь канал, лайк

    @BESprovodnoi@BESprovodnoi3 жыл бұрын
  • Спасибо за довольно интересный и полезный видос, пока еще трудно полностью осознать принцип работы данного паттерна, но благодаря этому видео,я стал на шаг ближе.

    @gameviewer5693@gameviewer56933 жыл бұрын
    • Частый признак для применения - свич, в котором применяется разная логика

      @gaitavr1992@gaitavr19923 жыл бұрын
  • супер! спасибо за урок!

    @arkon89gamedeveloper85@arkon89gamedeveloper853 жыл бұрын
  • Тема интересная, буду ждать продолжения! На мой взгляд, было бы круто интегрировать побольше примеров и продемонстрировать их реализацию более явно (например, напрямую с NPC, которые меняет поведение на наших глазах).

    @Diyozen@Diyozen3 жыл бұрын
    • Учту, спасибо!

      @gaitavr1992@gaitavr19923 жыл бұрын
    • +1

      @Veyron104@Veyron1043 жыл бұрын
  • Номенклатура паттернов, хорошо. Возьмем.

    @moivozmojnostyvsegdavmoupolzu@moivozmojnostyvsegdavmoupolzu Жыл бұрын
  • О да. Это топ. Вот такого я давно ждал на русском ютабе. Тебе бы ещё превьюшки получше делать (дизайн в просаде). Теперь ты мой любимчик и уважаемый сэр (:

    @tnak7947@tnak79473 жыл бұрын
    • Дизайн конечно не мой конек) Но мне нравится иногда отвлечься от программирования вечерком и повозится в фотошопе)

      @gaitavr1992@gaitavr19923 жыл бұрын
  • По сути здесь затронулся паттерн проектирования Мост, который и образуется благодаря паттернам Стратегия и Шаблонный метод. Спасибо за урок X_X

    @theoctan8569@theoctan85693 жыл бұрын
  • Классный выпуск 👍

    @vladimirkraft4315@vladimirkraft43152 жыл бұрын
  • комментарий в поддержку! спасибо за урок!

    @user-we6si4mi3x@user-we6si4mi3x Жыл бұрын
  • очень полезно, спасибо! пробовал похожую ситуацию разрулить без паттернов, по наитию, и собрал все грабли. После граблей и этого видео сразу понятно зачем оно все нужно и как решить задачу. И, кстати, уяснил как использовать интерфейсы, не повторяя сегменты кода.

    @user-xn8xf4jr8g@user-xn8xf4jr8g2 жыл бұрын
  • Рассказываешь хорошо

    @kirillsviderski4739@kirillsviderski47393 жыл бұрын
  • Читал и (частично) использовал это в энтерпрайзе, но когда описано применительно к игре это как-то усваивается и складывается лучше.

    @NoldoWalker@NoldoWalker3 жыл бұрын
  • супер, уже юзал такое, но не знал что это на самом деле был паттерн Стратегия, спасибо за поясния

    @alexeybolotov9857@alexeybolotov98572 жыл бұрын
  • Патерн дуже цікавий, надіюсь Ви будете знову ділитися своїм досвідом

    @angelldark6426@angelldark6426 Жыл бұрын
  • ОммммЮ патерны!! канонично!!

    @MrArtrynk@MrArtrynk3 жыл бұрын
  • Макс, спасибо!

    @user-sf9ib9wj7j@user-sf9ib9wj7j3 жыл бұрын
  • Очень интересная тема! Хотелось бы знать какие еще паттерны хорошо/удобно применять в ходе разработки на Unity.

    @user-wv3vi4dt1p@user-wv3vi4dt1p3 жыл бұрын
    • Следующее видео о декораторе будет)

      @gaitavr1992@gaitavr19923 жыл бұрын
  • Обьяснение похожее как в книге Head First Design Patterns

    @quelquel4898@quelquel4898 Жыл бұрын
  • Мне все интересно ( И было бы классно ещё уроки от 0 до создания первой игры змейки.

    @angelldark6426@angelldark64262 жыл бұрын
    • С нуля это не моя аудитория

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Тот момент когда ты понимаешь что у тебя в коде не только фабрика, а фаприка+стратегия применена :)

    @yuriisolopov9113@yuriisolopov9113 Жыл бұрын
  • Очень круто, немного видел попытки объяснить этот паттерн, понятным мне показался пока только твой) Скажи пожалуйста, ты часом не из Украины?

    @rahatbakum7852@rahatbakum7852 Жыл бұрын
  • Кстати, в чем разница между стратегией и стейт машиной?

    @_Otets_@_Otets_2 жыл бұрын
  • Вчера решал аналогичную проблему. Сначала налепил несколько классов с аналогичным функционалом. Осознал это. Отнаследовал от базового. Потребовалось добавить особый функционал нескольким типам, переделал в интерфейсы и закопался в переопределения. Кажется, я нашёл следующий этап...

    @egorvolkov3341@egorvolkov33412 жыл бұрын
  • Было бы не плохо на реальном примере показать.

    @user-nm5zh2zb8c@user-nm5zh2zb8c3 жыл бұрын
  • Хороший и полезный видос, можешь снять продолжение?

    @flashbackmovie8792@flashbackmovie87922 жыл бұрын
    • Есть другое паттерны на канале

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Видео супер! Только подскажите, пожалуйста, что нужно читать, чтобы понять, о чём в нём рассказывается?) А то вроде уроки и курсы по юнити прохожу, а как что-то глубже понять - на тебе!

    @nikitasavenko5431@nikitasavenko54313 жыл бұрын
    • Если вы еще сами не работаете пару лет(не важно фриланс или в команде) то сложновато будет понять проблему)

      @gaitavr1992@gaitavr19923 жыл бұрын
    • в гугле "design patterns книга"

      @TeaCakeGames@TeaCakeGames3 жыл бұрын
  • У меня вопрос. Если все торговцы в городе имеют не только метод реализации торговли, но и поля такие как деньги, скидка, количество лотов на витрине, то не легче сделать абстрактный класс Tradable вместо интерфеса ITradable ?

    @valerypopov4041@valerypopov40413 жыл бұрын
    • Торговля, как поведение вынесено под интерфейс, но никто не мешает добавить еще и абстрактный класс, если есть общее состояние.

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 понял, спасибо

      @valerypopov4041@valerypopov40413 жыл бұрын
  • Мне кажется что лучше объединить ITradable, ISpeakable итд под один интерфейс ICitezenAction и создать на основе него коллекцию. Тогда у нас не будут разрастаться методы взаимодействия и методы добавления и удаления и не будут оставаться ненужные NULL поля. А ещё лучше добавить Enum и при взаимодействии с Citizen вызывался бы такой метод PlayerAction(Player player, CitizenActionType actionType) и просто был бы перебор коллекции на совершения нужного действия.

    @user-rx1zn4zq7c@user-rx1zn4zq7c3 жыл бұрын
    • Неудобно будет копаться в этом огромном свиче действий. И, кстати, null невозможен в моем кейсе, так как применяется паттерн nullObject, когда используется мое обьект и он ничего не делает

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 я не говорю про свич. Я говорю про цикл перебора по коллекции, по тому же листу или использовать Dictinary. Вызов метода будет из классов как PlayerAction(player, CitizenActionType.Speaking). А в самом методе будет либо цикл, либо обращение к Dictinary. Плюс такое же удобное добавление и удаление в один метод, а не в изменения разных ITradable, ISpeakable

      @user-rx1zn4zq7c@user-rx1zn4zq7c3 жыл бұрын
    • А с движением что? Его нельзя использовать как действие над citizen, ему подобных поведений будет еще куча

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 ну у тебя движение если зависит от player и тебе никто не запрещает в IMoving добавить функционал зависящий не только от взаимодействия с Player. Просто у тебя получается что в citizen много ненужного что другие могут даже не использовать, но они это зачем то наследуют

      @user-rx1zn4zq7c@user-rx1zn4zq7c3 жыл бұрын
    • Во первых, каждый Citizen абстракцирует логику работы с плеером. Кто в вашей системе решает, какой enum действия вызвать? А если произошел некий триггер(квест, кража и т.д.) как вы будете этот экшн менять? Во-вторых, я спросил за IMovable, так как это одно из поведений жителя, но не взаимодействующее с плеером напрямую, не вижу ничего ненужного в Citizen, это довольно гибкая, пусть и высокоуровневая система. Если хотите, присылайте какой-то реальных код, можем на нем обсудить

      @gaitavr1992@gaitavr19923 жыл бұрын
  • Кстати тебе нужно развиваться в соц сетях,дискорд сервер сделать,группу вк и т.д

    @user-tb7yn5yy3g@user-tb7yn5yy3g3 жыл бұрын
    • Группа вк есть, но я особо в ней смысла не вижу. А так после 1к хотел следующий этап вводить. Но пока идет туговато)

      @gaitavr1992@gaitavr19923 жыл бұрын
  • Почему нельзя в этой концепции использовать просто более сложную систему наследованиях? Например: класс Citizen, от него наследуется IntractableCitizen, а от него Trader? Тогда все с кем мы можем взаимодействовать потенциально могу торговать.

    @TheTorston@TheTorston3 жыл бұрын
    • Получится перекрестная система, которую сложно поддерживать и легко сломать

      @gaitavr1992@gaitavr19923 жыл бұрын
    • А ты попробуй. Очень явно понимание паттернов и их необходимость происходит во время, собственно, проектирования. Например, как ты реализуешь немого торговца, шагающего кругами по центральной площади?)

      @Diyozen@Diyozen3 жыл бұрын
    • Diyozen Отнаследую от Trader класс SilentTrader в котором пропишу как он ходит, а метод Speak будет пустым?

      @TheTorston@TheTorston3 жыл бұрын
    • @@TheTorston ну вы же понимаете, что это ужасная структура?

      @gaitavr1992@gaitavr19923 жыл бұрын
    • Максим Крюков - разработка на unity а чем? Она же решает поставленную задачу

      @TheTorston@TheTorston3 жыл бұрын
  • Общее что то где то там промелькнуло,но без реальных примеров - не сильно понятно как это применить в проекте.

    @user-tb7yn5yy3g@user-tb7yn5yy3g3 жыл бұрын
    • Методы без наполнения уже не реальный пример? Обычно на всевдокоде показывают, а там еще меньше реального

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 Просто хочется увидеть как ты что то реализуеш длинное и кривое,которого полно на ютубе,а потом применяется "стратегия" и вместо 200 строчек спагетти получается 100 строчек легко читаемого кода,который легко поддерживать

      @user-tb7yn5yy3g@user-tb7yn5yy3g3 жыл бұрын
    • Принял, хорошо

      @gaitavr1992@gaitavr19923 жыл бұрын
  • Максим, учти в будущем, что concrete -- это бетон(см 4:32), а конкретный -- exact :)

    @SolidG-ne4jt@SolidG-ne4jt2 жыл бұрын
  • слишком сложно, лучше сделаь практические уроки с реальным примером и его рефакторингом. На практике показать почему конкретный подход неудобен.

    @maxarefev5686@maxarefev56863 жыл бұрын
KZhead