background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "Clean Code using the Strategy Pattern"

input logo icon
Теги видео
|

Теги видео

unity tutorial
unity arcade game
unity game tutorial
unity
game development
game dev
game development unity
programming
c#
software development
learn to code
learn programming
unity tutorials
unity devlog
indiedev
gamedev
unity3d
unity strategy pattern
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:00
сегодня мы рассмотрим
00:00:02
шаблон стратегического программирования и рассмотрим
00:00:03
простую реализацию, давайте посмотрим
00:00:06
на код, в котором вся логика
00:00:07
переключена в метод произнесения заклинаний, это
00:00:10
стена, которую невозможно прочитать с
00:00:12
первого взгляда, в ней есть пять вилок. логика
00:00:15
также называется катической сложностью, кроме того,
00:00:18
этот класс нарушает все твердые
00:00:21
принципы. теперь давайте посмотрим, как это должно выглядеть на
00:00:23
самом деле. Мне
00:00:32
не нужно ничего знать о
00:00:34
поведении любого из заклинаний на панели,
00:00:36
только то, что при нажатии на заклинание мы
00:00:38
собираемся выполнить стратегию для этого
00:00:40
заклинания, давайте займемся
00:00:45
[Музыкой],
00:00:48
прежде чем мы начнем, я хочу
00:00:50
крикнуть адрес rjb, чей комментарий вдохновил нас на
00:00:53
сегодняшние примеры, давайте
00:00:55
очень быстро взглянем на диаграмму классов, прежде чем переходить к
00:00:57
деталям реализации;
00:00:59
игрок знает о стратегиях заклинаний, но
00:01:03
вообще не знает никаких подробностей реализации; все, что он знает, это то, что существует
00:01:06
открытый метод называемое заклинание приведения, которое оно
00:01:07
может использовать, детали реализации будут
00:01:09
скрыты в конкретных
00:01:11
реализациях каждой стратегии, которую я
00:01:14
собираюсь отделить или закодировать и сделать
00:01:15
очень
00:01:18
модульной, поэтому я собрал самый простой
00:01:21
код отображения хедз-апа, который только мог
00:01:22
придумать, который это просто сохранить все
00:01:24
кнопки в массиве, добавить прослушиватели
00:01:27
событий onclick, чтобы они публиковали событие,
00:01:29
которое может содержать их индексный номер, вот и все,
00:01:31
мы собираемся сделать все
00:01:32
очень простым, здесь наша стратегия заклинаний
00:01:35
будет абстрактным классом у него
00:01:37
есть только один абстрактный метод cast Spell, один
00:01:40
параметр, который будет указывать, откуда
00:01:42
берется заклинание в этом примере,
00:01:45
которое будет
00:01:46
преобразованием игрока, поэтому давайте сначала начнем с
00:01:48
самой простой стратегии, которая
00:01:50
будет стратегией щита, никуда не перемещается.
00:01:52
просто нужно создать
00:01:53
экземпляр, мы создадим новую стратегию,
00:01:55
которая расширяет стратегию заклинаний, и я позволю
00:01:58
второму пилоту заполнить это здесь, потому что это
00:02:00
очень просто, это просто
00:02:01
создание экземпляра чего-то, но давайте добавим,
00:02:03
давайте добавим здесь продолжительность, чтобы мы уничтожили
00:02:05
щит, как только продолжительность
00:02:09
истечет, я собираюсь использовать
00:02:12
здесь метод расширения, который является частью нашей общей
00:02:14
библиотеки, которую мы часто используем на этом
00:02:15
канале, и он заключается в том, чтобы просто опустить сферу
00:02:18
немного вниз, просто чтобы это было любезно
00:02:19
частично в земле, что-то вроде
00:02:23
полукупола, я перенесу его в отдельный файл,
00:02:26
давайте настроим для него атрибут меню создания ресурсов,
00:02:32
да, выглядит нормально, это действительно
00:02:35
все, что нам нужно, давайте перейдем к
00:02:36
классу героя и заполним это значит, что нашему герою
00:02:38
понадобятся ссылки на любую из этих
00:02:40
стратегий, которые мы хотим выполнить, и
00:02:42
так далее.
00:02:51
выполним стратегию по заданному
00:02:53
индексу, вернемся в Unity. Я
00:02:56
собираюсь добавить компонент героя к нашему
00:02:58
герою здесь, а затем у меня
00:03:01
здесь будет новая папка для заклинаний, и я собираюсь
00:03:02
немного уйти за пределы экрана. здесь, но
00:03:04
создайте один из этих экземпляров
00:03:06
стратегии заклинания щита, и я назову
00:03:08
его заклинанием «Синий щит».
00:03:10
Теперь я уже настроил для
00:03:13
этого префаб, он готов к работе, я просто
00:03:15
перетащу ссылку в стратегию, а
00:03:17
затем перетащите стратегию в
00:03:21
список заклинаний героя, если я пойду играть и применю ее,
00:03:24
вуаля, так что это действительно
00:03:26
модель стратегии в двух словах, герой
00:03:29
ничего не знает о внутренней работе
00:03:30
различных заклинаний и способностей,
00:03:32
все, что он знает, это то, что это имеет способности
00:03:34
и может их выполнять, давайте
00:03:37
подчеркнем, что, создав здесь еще одну,
00:03:38
давайте создадим ту, которая будет просто запускать
00:03:40
огненный шар прямо перед игроком, поэтому
00:03:42
я думаю, что эту мы можем просто назвать
00:03:44
стратегией спаунера снарядов, теперь второй пилот
00:03:47
заполнил это довольно хорошо, но я собираюсь
00:03:49
изменить некоторые имена и хочу, чтобы он шел
00:03:51
прямо перед игроком, поэтому я
00:03:53
собираюсь создать здесь еще одну переменную
00:03:55
Vector 3, которая будет на две единицы впереди
00:03:58
игрока, хорошо, давайте поместим это в
00:04:00
вызов создания экземпляра, но давайте поднимем
00:04:02
его, возможно, до уровня глаз игрока,
00:04:05
теперь второй пилот неправильно догадался, что у меня
00:04:07
есть твердое тело на моем Огненном шаре, но у меня его
00:04:09
нет, но я создал небольшой вспомогательный
00:04:11
класс, который будет продвигать частицу
00:04:13
вперед, и я просто назвал его
00:04:15
двигатель частиц, поэтому мы добавим двигатель частиц в
00:04:18
наш Fireball. Теперь у моего механизма перемещения частиц есть
00:04:21
инициализированный метод, с помощью которого мы можем отправить
00:04:23
нашу скорость, так что давайте сделаем это, а
00:04:26
затем у меня есть еще один компонент, который мы можем
00:04:28
добавить к этому, который самоуничтожит нашу
00:04:30
Огненный шар через определенное время,
00:04:32
чтобы мы могли добавить и этот компонент, а
00:04:34
затем установить там его продолжительность. Теперь это
00:04:37
выглядит немного
00:04:39
сложнее, и, вероятно,
00:04:40
в будущем это станет еще сложнее, поэтому
00:04:42
конструкция нашего снаряда
00:04:44
должна действительно быть сделано в построителе и
00:04:46
сделать его очень простым для чтения, мы можем
00:04:48
абстрагировать всю эту сложность в
00:04:51
другой класс, поэтому в конце видео
00:04:53
я собираюсь разместить ссылку на видео
00:04:55
о шаблоне программирования Builder, а
00:04:57
пока я Я просто позволю второму пилоту заполнить это,
00:04:58
просто бегло взглянув на
00:05:00
него и убедившись, что оно правильное. Вы можете
00:05:02
приостановить видео, если хотите, но я
00:05:03
продолжу здесь и заменю всю
00:05:05
эту логику построения кодом,
00:05:08
который выполняет методы Builder, и
00:05:11
я собираюсь сделать этот
00:05:12
класс Builder общедоступным, я думаю, потому что
00:05:16
в будущем мы, вероятно, будем создавать множество других снарядов для нашей игры,
00:05:18
и мы, вероятно, сможем просто
00:05:20
использовать его для множества других вещи, поэтому
00:05:22
я сделаю это общедоступным, перенесу его в отдельный
00:05:24
файл здесь, а затем продолжу, поэтому я добавлю
00:05:27
сюда меню создания ресурсов,
00:05:30
чтобы мы могли их создавать. Я просто
00:05:31
тоже собираюсь переименовать, я думаю,
00:05:33
это действительно должно быть называется
00:05:35
стратегией заклинания снаряда, поэтому я также переименую класс
00:05:38
и файл, вот и
00:05:40
все, а затем еще одна вещь,
00:05:44
э-э, мы могли бы также отправить нашу продолжительность
00:05:46
прямо сюда, потому что мы создали
00:05:47
для нее метод построения, и нет необходимости
00:05:51
жестко запрограммировать его так что мы можем сделать здесь общедоступное плавающее пространство
00:05:54
на
00:05:55
время, да, вот и все, теперь мы можем
00:05:57
настроить
00:05:58
его
00:06:01
здесь в единстве. Я собираюсь создать
00:06:03
еще один экземпляр нового
00:06:05
объекта с поддержкой сценариев, который является снарядом, поэтому я
00:06:07
назову его Fireball потому что я
00:06:09
уже сделал префаб огненного шара и перетащил
00:06:11
его
00:06:13
туда, а затем мне нужно перетащить
00:06:15
стратегию огненного шара в
00:06:18
героя. Теперь я уже подключил
00:06:20
кнопки, так что все пошло так, каждый раз, когда я нажимаю на него,
00:06:23
появляется огненный шар и, конечно же, наш
00:06:25
Щит все еще работает. Я еще
00:06:27
ничего не делал с первой
00:06:28
кнопкой, но мы доберемся до нее
00:06:30
через
00:06:32
минуту, хорошо, поэтому для третьей стратегии
00:06:35
я хочу создать три
00:06:37
огненных шара, которые вращаются вокруг игрок, поэтому
00:06:40
я назову это
00:06:42
стратегией орбитального заклинания, и поэтому она
00:06:45
также расширит стратегию заклинания, давайте просто быстро переместим это
00:06:47
в отдельный файл, теперь мы
00:06:50
можем начать с переопределения одного метода,
00:06:52
который нам нужен для произнесения
00:06:55
заклинания давайте здесь сделаем ссылку на
00:06:58
нашу сборную сферу,
00:07:00
нам нужно решить, сколько сфер мы
00:07:02
на самом деле хотим иметь, как далеко они
00:07:05
должны быть от игрока, как быстро они
00:07:07
должны
00:07:09
вращаться, и давайте посмотрим, может быть, да, как долго
00:07:13
должно длиться все заклинание, чтобы заставить
00:07:16
эти вещи вращаться вокруг того, что я собираюсь
00:07:17
сделать, это создать родительский элемент, и сам родительский элемент
00:07:21
будет просто вращаться на месте, причем каждый
00:07:24
из огненных шаров находится на определенном расстоянии
00:07:26
от этого, таким образом, мы не
00:07:28
рассчитываем траектории или что-то еще, что мы
00:07:30
можем просто покрутите родительский объект,
00:07:33
и он будет вращать все объекты, давайте создадим
00:07:34
метод, который создаст родительский объект,
00:07:37
хорошо, это просто, мы просто
00:07:38
создадим его прямо там, где находится игрок, теперь
00:07:41
нам нужен другой метод, который будет
00:07:42
фактически вращать эту вещь, мы можем
00:07:45
просто назовите его родительским элементом Rotate Orb, теперь все, что
00:07:47
нужно сделать, это вращаться на месте,
00:07:49
но я думаю, что я собираюсь сделать, чтобы вращать
00:07:51
эту штуку, - это использовать D Tween, потому что
00:07:53
в будущем мы могли бы сделать это немного интереснее,
00:07:54
поэтому мы установите здесь скорость вращения,
00:07:57
основанную на нашей скорости вращения и
00:07:59
360 градусах, и мы собираемся
00:08:02
указать, что этот объект должен
00:08:04
непрерывно вращаться вокруг вертикальной
00:08:06
оси с этой
00:08:10
скоростью вращения, и он должен совершать каждый
00:08:12
оборот за 1 секунду, и мы хотим для него задан
00:08:17
бесконечный цикл, поэтому я собираюсь установить для него
00:08:19
отрицательное значение с инкрементным типом цикла,
00:08:23
а затем мы также хотим, чтобы он
00:08:25
вращался с постоянной скоростью, поэтому я
00:08:27
собираюсь установить здесь легкость на
00:08:28
линейность
00:08:30
давайте вернемся к нашему
00:08:33
методу произнесения заклинания, мы собираемся перебрать
00:08:34
количество сфер и создать другую
00:08:36
сферу вокруг исходной точки. Я также собираюсь
00:08:39
создать здесь несколько вспомогательных методов,
00:08:41
чтобы один из них мог быть для создания
00:08:43
orb, они примут здесь пару аргументов,
00:08:45
но мы сделаем еще один, чтобы
00:08:48
выяснить фактическое пространство вокруг
00:08:51
окружности этого круга, где мы
00:08:53
хотим, чтобы каждый шар был, чтобы мы могли вызвать его,
00:08:55
вычислить
00:08:57
положение появления сейчас, как раз перед тем, как я забудьте,
00:08:59
я собираюсь добавить вызов уничтожения,
00:09:01
чтобы мы удалили родительский элемент и все
00:09:04
дочерние сферы,
00:09:07
чтобы выяснить, где
00:09:10
по окружности мы собираемся
00:09:11
находиться, мы можем просто
00:09:13
вычислить в основном 2 пи, умноженные на
00:09:18
которые Индекс нашего цикла for, в котором мы находимся,
00:09:20
делится на общее количество сфер, а
00:09:23
затем, используя небольшое действие косинуса и S,
00:09:26
мы можем просто определить его положение
00:09:27
вокруг круга, поэтому для создания
00:09:30
все, что нам действительно нужно сделать, это создать экземпляр
00:09:33
префаба в его исходная точка, которую мы
00:09:35
только что рассчитали, и это действительно так, мы
00:09:38
можем создать его под родителем сферы
00:09:40
прямо
00:09:44
здесь, добавив меню создания актива, да, вот и
00:09:48
все, так что давайте вернемся в
00:09:52
Unity. Я собираюсь создать экземпляр
00:09:55
этого скриптового объекта, и мы можно назвать
00:09:57
это примерно так, как насчет заклинания «Огненный шар»,
00:10:02
и нам нужно снова перетащить туда наш префаб «Огненный шар»,
00:10:04
а затем,
00:10:07
конечно, нашему герою нужно знать о
00:10:09
стратегии, поэтому давайте снова возьмем нашу стратегию
00:10:12
и просто перетащим ее прямо сюда.
00:10:14
первая
00:10:18
позиция, так что теперь, когда мы играем там, мы
00:10:22
идем, выглядит довольно
00:10:26
хорошо, немного короче, возможно, придется
00:10:28
немного продлить эту продолжительность, но они
00:10:30
все работают хорошо, давайте просто убедимся, что
00:10:31
они все работают
00:10:33
вместе, теперь, очевидно, в полномасштабной
00:10:36
системе способностей, которую вы мне бы хотелось крутых даунов и
00:10:38
всяких других причудливых вещей, но
00:10:40
это тема для другого
00:10:43
видео, просто чтобы сделать это немного
00:10:46
интереснее. Я хотел показать
00:10:47
кое-что еще. Я добавил еще один метод
00:10:49
в орбитальную стратегию, который будет перемещать
00:10:51
сферы вверх. и вниз, и он также использует D twe,
00:10:53
я просто собираюсь поместить это на
00:10:55
экран, так что, если кому-то интересно,
00:10:57
он просто перемещает их вверх и
00:10:59
вниз в случайном диапазоне, чтобы они выглядели
00:11:00
немного по-другому, и он использует Вектор
00:11:03
3. Отражение, о котором, я думаю, многие люди
00:11:05
не знают, но по сути он
00:11:07
определяет касательную нормаль по
00:11:09
направлению взгляда, поэтому, поскольку у моих снарядов
00:11:12
есть маленькие хвосты, на самом деле
00:11:14
они поворачиваются лицом к
00:11:16
камере, которую вы могли бы сделать. они тоже могут быть обращены
00:11:19
внутрь к игроку, что
00:11:20
может быть
00:11:22
круто, поэтому после того, как я закончил записывать эту
00:11:24
часть, я начал больше играть с
00:11:26
различными заклинаниями и всем остальным, и я
00:11:27
подумал, что, возможно, в
00:11:29
конце будет интересно поговорить немного о том, как
00:11:30
Теперь легко внести разнообразие в
00:11:32
игру, когда у нас
00:11:34
реализован шаблон стратегии, все, что вам действительно нужно
00:11:36
сделать, это сделать больше версий ваших
00:11:38
скриптовых объектов, и вы можете использовать
00:11:40
разные префабы, вы можете изменить все
00:11:42
настройки и еще много чего, так что я' Я только что
00:11:43
заменил все действия на панели на
00:11:46
другие, например, этот Щит,
00:11:48
сферы. Я сделал больше сфер с
00:11:50
другой сборной, другая скорость, и
00:11:52
снаряд, движущийся вперед,
00:11:54
тоже немного отличается, теперь имейте в
00:11:56
виду, что я не сделал любые изменения кода
00:11:58
вообще, единственный раз, когда вам придется вносить
00:12:00
изменения в код, если вы хотите совершенно
00:12:02
другую стратегию или, может быть, вы хотите
00:12:04
добавить другую стратегию к вашим существующим
00:12:06
стратегиям, например, ваши
00:12:08
стратегии заклинаний могут иметь
00:12:10
стратегии нацеливания, поэтому некоторые из них могут стрелять
00:12:12
точно вперед, но некоторым из них может
00:12:14
потребоваться некоторая информация от пользователя, чтобы можно было
00:12:16
вложить ваши стратегии или
00:12:18
объединить их вместе, чего мы не будем
00:12:19
касаться в этом видео, но это
00:12:21
пища для размышлений, если вы заинтересованы в
00:12:24
других шаблонах, которые я собираюсь чтобы разместить
00:12:25
на экране пару ссылок на другие видео
00:12:27
на этом канале, поэтому нажмите кнопку «Нравится»
00:12:30
и подпишитесь, и увидимся в
00:12:31
следующем видео.

Описание:

Unity C# Architecture: Strategy Programming Pattern in Unity C# using expert Software Engineering Principles. Modularize behaviour and enforce the Single Responsiblity Principle! 🔔 Subscribe for more Unity Tutorials https://www.youtube.com/@git-amend ▬ Contents of this video ▬▬▬▬▬▬▬▬▬▬ 0:00 The Strategy Pattern 1:20 Shield Spell Strategy 3:38 Projectile Strategy 6:30 Orbital Spell Strategy Extension Methods and Utils https://github.com/adammyhre/3D-Platformer/tree/master/Assets/_Project/Scripts/Utils *Assets Shown In This Video* (Affiliate Links) Odin: https://assetstore.unity.com/publishers/3727?aid=1101lw3sv Dungeon Mason Tiny Hero Duo: (FREE): https://assetstore.unity.com/packages/3d/characters/humanoids/rpg-tiny-hero-duo-pbr-polyart-225148?aid=1101lw3sv Chromisu: Handpainted Forest MEGA Pack https://assetstore.unity.com/packages/3d/vegetation/handpainted-forest-mega-pack-248421?aid=1101lw3sv SineVFX: Better Crystals https://assetstore.unity.com/packages/vfx/shaders/better-crystals-235002?aid=1101lw3sv Starry MoMo Shield Bubbles https://assetstore.unity.com/packages/vfx/particles/magic-shield-bubbles-230461?aid=1101lw3sv Kyeoms Shoot and Hit https://assetstore.unity.com/packages/vfx/particles/stylized-shoot-hit-vol-1-216558?aid=1101lw3sv DOTween (FREE) https://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676?aid=1101lw3sv *Follow me!* https://linktr.ee/gitamend

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "Clean Code using the Strategy Pattern"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "Clean Code using the Strategy Pattern" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "Clean Code using the Strategy Pattern"?mobile menu icon

  • Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

mobile menu iconКак скачать видео "Clean Code using the Strategy Pattern" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Clean Code using the Strategy Pattern"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "Clean Code using the Strategy Pattern"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

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