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

Скачать "Create a Role playing game in Unreal Engine Part 24 - Damage collision"

input logo icon
Обложка аудиозаписи
Подождите немного, мы готовим ссылки для удобного просмотра видео без рекламы и его скачивания.
console placeholder icon
Теги видео
|

Теги видео

Unreal Engine 4
Unreal Engine 5
Game system
Game development
Tutorial
Ability
Abilities
Create a game system
Beginner
Intermediate
Advanced
Damage
Great
XP
Experience points
Animation
Animations
Status effects
Free course
RPG
Role playing game
Combat
Component
Flexible
Scalable
Good practice
Buffs
Debuffs
Stats
Attributes
Properties
Gameplay tags
Full game
Foundation
Create a game
Experience
Status effect
Class
Statuseffect
Buff
Debuff
Weapon
Base
Collision
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:01
[Музыка]
00:00:05
прежде чем мы продолжим видео, если вам
00:00:07
нравится то, что я делаю здесь, на этом канале,
00:00:09
пожалуйста, рассмотрите возможность подписки, это
00:00:12
в любом случае очень поможет каналу, давайте вернемся к видео,
00:00:15
добро пожаловать обратно в мою серию ролевых игр
00:00:18
в этом эпизоде, мы будем
00:00:20
глубже погрузимся в часть боя, мы
00:00:22
будем говорить о
00:00:24
боевых столкновениях и тому подобном, чтобы
00:00:26
определить, кого мы на самом деле раним,
00:00:29
хм,
00:00:30
но я хочу немного предварить это
00:00:32
тем, что эта конкретная часть
00:00:34
будет немного немного сложнее, когда дело доходит до
00:00:36
структуры, потому что если вы посмотрите
00:00:38
на те
00:00:39
компоненты, которые мы сделали до сих пор, наши
00:00:41
возможности у них не так много
00:00:43
функций,
00:00:44
они довольно чистые, довольно маленькие,
00:00:47
они очень масштабируемы, все очень похоже на
00:00:51
аккуратный и аккуратный,
00:00:53
однако этот компонент теперь предназначен для
00:00:55
боя, я сделаю один,
00:00:58
может быть, два больших
00:01:01
компонента,
00:01:03
просто чтобы мы могли иметь более простой обзор,
00:01:05
если вы захотите позже,
00:01:08
например, разбить его на разные части,
00:01:11
которые вы чувствуете, что они более удачно названы и
00:01:13
разделены по разделам, когда дело доходит до нашей
00:01:15
функциональности, не стесняйтесь делать это,
00:01:17
конечно,
00:01:18
в любом случае, давайте начнем с
00:01:21
создания папки, которую
00:01:24
мы назовем этим боем,
00:01:27
внутри здесь мы создадим компонент чертежа под названием
00:01:31
компонент актера, мы называем его bpc-боем,
00:01:37
мы перейдем к нашему персонажу от третьего лица
00:01:39
и немедленно добавим его, так что
00:01:41
bbc-бой
00:01:46
и открытие bbc-боя теперь у нас
00:01:49
есть
00:01:50
кое-что, что нужно сделать,
00:01:53
самое первое, что нам нужно
00:01:55
немного обсудить, это э-э,
00:01:57
обнаружение столкновений, как мы решаем,
00:01:59
подверглось ли что-то атаке с
00:02:02
нашей стороны, теперь это можно сделать множеством
00:02:05
разных способов, и они варьируются от
00:02:07
хороших до плохих в зависимости от ситуации, в которой
00:02:10
вы их используете,
00:02:12
и мы будем мы можем продемонстрировать несколько из
00:02:13
них, и
00:02:15
мы можем начать с того, что если у вас есть
00:02:17
персонаж от третьего лица,
00:02:19
вы могли бы добавить что-то вроде
00:02:21
куба,
00:02:22
а на самом деле не куб-куб, мы хотим
00:02:24
иметь что-то вроде
00:02:28
столкновения коллизий, вы могли бы у вас есть что-то
00:02:30
вроде этого, и вы могли бы
00:02:33
разместить его перед ним, что-то вроде
00:02:34
этого,
00:02:37
увеличьте его и скажите, что
00:02:39
когда это определенная точка в вашей
00:02:40
анимации,
00:02:42
проверьте, не перекрывается ли что-нибудь в этом
00:02:44
поле, и
00:02:46
если это так, то нанесите ущерб этому,
00:02:49
это вполне возможно, что это самая худшая
00:02:53
система обнаружения боя, которую вы можете
00:02:55
создать, она
00:02:56
не только очень
00:02:59
элементарна, но и будет очень
00:03:02
неточной, потому что,
00:03:04
скорее всего, у вас не будет атаки,
00:03:06
соответствующей этому, это
00:03:08
то, что, возможно, сработает для
00:03:10
игры например,
00:03:12
я не знаю легенды о Зельде или
00:03:14
что-то в этом роде, когда у вас есть персонаж, расположенный сверху вниз,
00:03:15
и у него очень маленькая
00:03:18
атака, а у вас есть только одна
00:03:19
атака, у него только один и тот же шаблон, но
00:03:22
как только у вас что-то есть например,
00:03:24
две разные атаки или что-то в
00:03:26
этом роде, это потерпит
00:03:28
неудачу и будет
00:03:29
очень невосприимчивым и
00:03:32
неточным, когда дело доходит до определения того,
00:03:34
какой тип
00:03:36
поврежденной сделки вы на самом деле
00:03:38
выполняете,
00:03:40
поэтому мы избавимся от этого,
00:03:43
есть и другие,
00:03:45
если мы перейдем к нашему
00:03:48
если я перейду к нашей сетке, например,
00:03:51
давайте перейдем к нашим анимациям, у нас
00:03:53
есть анимация, потому что мы сделали ее для
00:03:56
великой атаки мечом здесь, так что у нас
00:04:00
здесь есть лабиринт, по которому мы ударяем,
00:04:03
так что в этом случае, например, если мы у нас есть
00:04:05
такая атака,
00:04:07
и мы замахиваемся,
00:04:09
затем
00:04:10
мы
00:04:13
увидим, что мы идем сверху справа,
00:04:14
а затем в нижний левый угол, по сути, так что по
00:04:17
тому, что находится здесь, внизу
00:04:19
справа, мы не обязательно
00:04:21
попали бы по тому, что находится вверху. слева
00:04:23
- это вещи, которые мы, вероятно, не хотим
00:04:25
затрагивать в
00:04:26
игре, например, Dark Souls, ну,
00:04:30
по большей части мы бы использовали что-то, э-э,
00:04:33
объемы, когда дело доходит до такого рода
00:04:37
обнаружения попаданий,
00:04:39
это особенно актуально, когда дело
00:04:41
касается боссов, которые у
00:04:42
них есть определенная часть их
00:04:44
анимации или несколько частей в их
00:04:46
анимации, где они генерируют, возможно,
00:04:49
сферу, коробку или что-то в этом роде,
00:04:51
поэтому, возможно, они сгенерируют сферу
00:04:53
вокруг этой позиции здесь в
00:04:56
лабиринте здесь, а затем одну здесь и
00:04:59
затем точно так же, как постоянно
00:05:01
делайте
00:05:02
несколько сфер, чтобы проверить, есть ли
00:05:04
в этой
00:05:05
сфере что-то, чему я должен нанести ущерб,
00:05:08
например,
00:05:11
так что это один из способов сделать это,
00:05:13
и это работает для многих разных
00:05:16
случаев, если честно,
00:05:18
если вы немного гибкий, гм,
00:05:21
еще один случай, который мы
00:05:22
собираемся использовать, это то, что у
00:05:25
вас есть, например, когда мы
00:05:27
начинаем раскачиваться, вы можете видеть, что
00:05:30
теоретически мы можем рассуждать, что
00:05:32
все, что находится между
00:05:34
ручкой
00:05:35
и вершиной булавы, является чем-то
00:05:38
это будет повреждено,
00:05:39
поэтому мы можем каждый тик войти и сказать,
00:05:43
перекрывается ли что-нибудь,
00:05:45
перекрывается ли что-нибудь, перекрывается ли что-нибудь,
00:05:47
перекрывается, и просто
00:05:48
постоянно делать это, а затем
00:05:50
определить, что это
00:05:53
цели, которые мы действительно должны нанести урон, э-
00:05:57
э, вы могли бы сделать это также по-другому,
00:05:59
и это, возможно, лучший способ сделать
00:06:01
это, но мы не будем делать это в этом
00:06:03
эпизоде, но я
00:06:05
немного расскажу о том,
00:06:06
как вы можете это сделать, если вы предпочитаете
00:06:08
делать это таким образом,
00:06:09
и это вы можете сделать что-то подобное,
00:06:15
например, отслеживая несколько разных точек вдоль вала,
00:06:16
а затем в каждом кадре вы будете проверять,
00:06:18
какое положение он занимает сейчас, а затем
00:06:20
перемещаете кадр вперед, чтобы на следующем
00:06:22
тике вы проверяли
00:06:24
между последней точкой там, где это было, и в
00:06:26
новой точке, где она находится сейчас, вы можете
00:06:28
перетаскивать
00:06:30
трассы между ними,
00:06:32
чтобы у вас были похожие линии, которые
00:06:34
на самом деле следуют за
00:06:35
колебанием, поэтому
00:06:39
в этом случае они будут идти в этом направлении по диагонали,
00:06:42
гм, и точность там будет конечно,
00:06:46
состоит из того, сколько разных точек
00:06:48
вы выберете, чтобы провести линию
00:06:49
справа,
00:06:52
так что
00:06:53
сила
00:06:55
такой системы в том, что она будет иметь
00:06:58
довольно
00:07:00
точные попадания, а
00:07:04
недостатки в том, что вы можете
00:07:07
получить предмет, оружие
00:07:09
попало в вас где-то между двумя из тех
00:07:11
точек, которые вы указали,
00:07:13
и если след линии не попадает
00:07:15
куда-то там, то вы
00:07:16
вообще не зарегистрируете попадание, например,
00:07:19
наравне с системой, которую мы
00:07:21
собираемся сделать сейчас мы будем создавать
00:07:23
линии, идущие по всей
00:07:27
длине оружия, а это означает,
00:07:30
что
00:07:32
если у нас в
00:07:35
какой-то момент анимация пропускается, у
00:07:36
нас
00:07:37
может быть
00:07:39
часть анимации, где она прыгает, поэтому
00:07:41
скажем, вот здесь
00:07:44
анимация. а затем по какой-то
00:07:45
причине частота кадров падает, поэтому мы
00:07:48
понимаем,
00:07:50
что следующий кадр должен быть похож на
00:07:52
кадр здесь или что-то в этом роде,
00:07:53
тогда все, что между этими двумя
00:07:55
разными кадрами, может быть чем-то, что
00:07:57
мы должны были поразить, но мы не сделали этого. сделайте
00:08:00
там реальную трассировку линии, чтобы мы
00:08:01
ее не обнаружили,
00:08:03
поэтому
00:08:05
у различных подходов есть много плюсов и минусов,
00:08:07
которые вы, возможно, захотите
00:08:10
использовать, когда дело доходит до чего-то
00:08:12
подобного, но, надеюсь, теперь у вас есть
00:08:14
понимание
00:08:15
некоторых из них. доступны,
00:08:17
и какой из них, возможно, подходит вам
00:08:19
лучше всего
00:08:21
и все такое, а также, вероятно, держитесь подальше
00:08:23
от того, кто
00:08:25
создает объем прямо перед вами,
00:08:26
потому что это, честно говоря,
00:08:29
довольно мусор, потому что я имею в виду, представьте, что у
00:08:32
вас есть горизонтальная черта, которая выглядит вот
00:08:34
так,
00:08:36
тогда вы у меня было бы оружие, которое
00:08:38
на самом деле выходит за пределы этого объема,
00:08:40
хм,
00:08:42
и
00:08:43
если у вас есть косая черта, идущая
00:08:45
сверху вниз,
00:08:47
они, по сути, не будут должным образом совпадать с
00:08:48
анимацией,
00:08:51
так что да, давайте
00:08:53
с этим покончено, давайте
00:08:55
перейдем к реальной логике поэтому мы на данный
00:08:57
момент закроем это,
00:09:00
и вы, возможно, заметили, что я говорил
00:09:01
о том, что мы собираемся использовать галочку,
00:09:04
и это то, что я
00:09:05
неоднократно повторял во всех
00:09:08
своих уроках, об этом говорилось, что это то,
00:09:10
что вам следует избегать
00:09:12
как можно большего, если только вы не можете
00:09:14
этого избежать, и в этом случае мы
00:09:17
не сможем этого избежать, но мы все равно будем
00:09:20
очень внимательно относиться к тому, как мы на самом деле
00:09:22
используем это, и
00:09:25
как нам это сделать
00:09:26
ну, мы создадим несколько пользовательских событий,
00:09:29
первое из которых мы назовем началом
00:09:31
обнаружения повреждений, и именно тогда мы
00:09:34
решим, что хотим начать проверку
00:09:37
на предмет нанесения ущерба, и в то же время мы
00:09:38
захотим иметь еще одно пользовательское событие,
00:09:40
которое мы назовем
00:09:42
остановкой обнаружения повреждений,
00:09:46
вот так
00:09:47
и единственное, что мы собираемся
00:09:48
сделать в этом случае, это
00:09:50
включить
00:09:55
галочку установки компонента.
00:09:58
Мы собираемся сделать это для обоих из
00:10:00
них,
00:10:02
поэтому, когда мы приступим к
00:10:04
обнаружению повреждений, мы мы собираемся поставить галочку включения,
00:10:06
и когда мы достигли остановки
00:10:08
обнаружения повреждений, мы сделаем ее
00:10:10
ложной, смысл в том, что если мы
00:10:12
снова вернемся к анимации, то
00:10:14
если у нас есть подобная анимация,
00:10:16
мы не Прежде всего,
00:10:18
мы не хотим, чтобы он работал все
00:10:19
время, это просто данность, но даже
00:10:22
во время анимации атаки мы, возможно, не
00:10:24
захотим, чтобы он проверял все время,
00:10:27
потому что,
00:10:28
например, эта анимация здесь она только
00:10:31
делает смысл, что, может быть, с этого момента нужно
00:10:33
начать проверять наличие повреждений, и только
00:10:36
когда мы, возможно, достигнем этой точки,
00:10:38
перестанем проверять наличие повреждений, так что нам
00:10:41
нужно сделать это гибким, чтобы позволить нам
00:10:43
разные точки, где мы
00:10:45
действительно хотим использовать галочку,
00:10:47
так что это один
00:10:49
это своего рода основа для того, как мы
00:10:51
собираемся держать галочку, э-э,
00:10:55
как бы в себе,
00:10:56
чтобы сделать это применимым и,
00:11:00
например, заставить его
00:11:05
работать с самого начала,
00:11:06
нам нужно на
00:11:08
самом деле настроить этот
00:11:12
компонент,
00:11:14
чтобы этот компонент не имел его по
00:11:17
умолчанию, мы не делаем не потому, что
00:11:20
мы не удалили все тиковые
00:11:22
события из предыдущих вещей, которые мы
00:11:24
делали в серии руководств,
00:11:26
ну, раньше,
00:11:27
но тик все еще включен по умолчанию, поэтому,
00:11:30
если мы перейдем к настройкам класса по умолчанию, вы
00:11:32
увидите
00:11:33
начало с включенной галочкой, и пока
00:11:35
мы ее не используем, это не так уж и важно,
00:11:38
но в данном случае мы на самом деле собираемся
00:11:40
использовать галочку, поэтому мы хотим
00:11:42
убедиться, что для начала для нее установлено значение false,
00:11:44
чтобы она работала не
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:03
и мы можем перейти к нашим тегам игрового процесса, и
00:12:06
мы можем сказать, что хотим, например, иметь другой тип
00:12:08
атаки,
00:12:11
поэтому давайте создадим тег, и мы можем перейти
00:12:13
сюда, мы можем сказать, добавить подтег, и мы можем
00:12:15
сказать, что тогда вы получите подтеги до этого
00:12:18
момента, так что вы можете просто добавить что-то,
00:12:20
и мы можем сказать что-то вроде
00:12:22
оружия,
00:12:24
я все еще правильно это написал,
00:12:27
я не
00:12:30
переименовывал,
00:12:34
вроде так,
00:12:36
окей,
00:12:38
окей, видимо, нужно перезагрузить компьютер, когда
00:12:40
это произойдет, так что увидимся через минуту,
00:12:42
здесь мы Опять же, надеюсь, это не
00:12:44
опечатка, как я, в любом случае теперь мы можем
00:12:46
закрыть настройки проекта и
00:12:48
перейти к нашим
00:12:50
тегам игрового процесса, чтобы наш игровой процесс
00:12:53
помечал компоненты чертежа, и теперь мы
00:12:55
хотим добавить функциональность, например
00:12:58
наличие прослушивателя
00:13:00
послушайте этот конкретный тег, который мы только что
00:13:01
добавили, и чтобы
00:13:05
сделать то, что мы сейчас собираемся
00:13:07
сделать, мы, по сути, собираемся
00:13:10
показать, как теперь вы можете расширить
00:13:12
систему типов игрового процесса,
00:13:14
извините,
00:13:15
с помощью совершенно нового тега и всей его
00:13:17
функциональности
00:13:19
и
00:13:21
когда дело доходит до этого, не потребуется много шагов,
00:13:23
поэтому
00:13:24
нам нужно будет
00:13:29
добавить прослушиватель тегов, например, нам нужно
00:13:31
иметь это и здесь у нас
00:13:34
будет диспетчер событий, поэтому мы
00:13:36
позаботимся о том, чтобы получить один из тех, которые
00:13:39
мы назовем этим
00:13:41
[Музыка]
00:13:47
изменение атакующей веб-бомбы,
00:13:49
надеюсь, мы сделали подпись, мы сделали
00:13:51
отлично, мы можем скомпилировать,
00:13:53
сохраните, мы можем перетащить его сюда мы можем сказать: позвони,
00:13:57
нет, не звони, извини, извини, мы свяжем
00:14:01
вот так, и мы собираемся
00:14:03
сделать перенаправление здесь, чтобы мы могли подключить его вот
00:14:05
так,
00:14:07
и теперь нам нужно убедиться, что у нас
00:14:09
действительно есть смысл здесь наш
00:14:11
определенный тег для
00:14:13
реализации этой функциональности, поэтому мы переходим
00:14:15
к макросу
00:14:17
и здесь мы хотим по существу
00:14:19
добавить эту функциональность, и здесь
00:14:22
она становится немного
00:14:23
не такой чистой, как раньше, но
00:14:27
вот что мы делаем, мы
00:14:28
проверяем правильность состояния
00:14:31
атакующего оружия,
00:14:34
что означает, что нам нужен еще один вывод, что
00:14:36
означает, что мы добавляем его сюда и говорим
00:14:39
[Музыка]
00:14:42
изменение атакующего оружия,
00:14:47
это то имя, которое я хотел иметь, но я
00:14:49
хотел, чтобы оно было таким, как
00:14:51
есть,
00:14:52
и мы не будем имея это как исполняемый файл,
00:14:55
мы можем переместить его вверх, так что это немного
00:14:56
нет, это не то, что я хотел, а затем
00:14:59
изменить верхнюю атакующую там
00:15:02
вот так,
00:15:03
и мы просто подключим его вот так, так что
00:15:06
если совпадение, если оно соответствует состоянию
00:15:08
атакующее оружие, теперь мы скажем, что это
00:15:10
изменение атакующего оружия, в противном случае оно
00:15:12
переходит к другим
00:15:13
значениям по умолчанию, я не знаю, откуда мы его взяли,
00:15:15
поэтому давайте удалим эту
00:15:17
компиляцию и сохраним, поэтому вернемся к
00:15:20
нашему предыдущему,
00:15:24
давайте сделаем это,
00:15:26
давайте также сделаем это
00:15:29
Итак, теперь мы можем подключить сюда контакт выполнения
00:15:31
для привязки события, поэтому теперь
00:15:32
мы можем сказать, что
00:15:34
если кто-то отправит этот тег, мы
00:15:36
собираемся отправить эту информацию,
00:15:38
поэтому уведомите об изменении тега одинаково здесь, вы
00:15:41
можете видеть, что у нас есть атака смена оружия
00:15:44
сейчас, поэтому в данном случае мы будем называть это
00:15:46
здесь,
00:15:49
и как только мы это сделаем,
00:15:51
мы закончили,
00:15:53
и когда дело доходит до контекста тега игрового процесса,
00:15:55
мы создаем его здесь, чтобы
00:15:57
мы могли
00:15:59
найти способ изменить оружие. подключите его вот так, это
00:16:01
немного красивее,
00:16:02
поэтому теперь мы также обработали вызов
00:16:05
диспетчера событий,
00:16:09
и это почти все, что
00:16:11
нам нужно сделать, и теперь мы
00:16:13
существенно расширили тег геймплея
00:16:15
еще одним тегом,
00:16:17
чтобы теперь мы могли перейдите к нашему бою PPC, и
00:16:20
мы можем сказать, что
00:16:23
отсюда давайте получим владельца компонента,
00:16:27
и от владельца мы можем сказать, что мы
00:16:30
хотим
00:16:33
получить компонент по классу,
00:16:36
и мы можем сказать, что мы хотим иметь
00:16:38
компонент типа игрового процесса, который
00:16:41
имеет все наши свойства,
00:16:43
и если это действительно,
00:16:45
мы можем сказать,
00:16:48
что хотим добавить сюда прослушиватель,
00:16:55
поэтому, когда этот компонент будет создан,
00:16:57
мы добавим
00:16:58
прослушиватель к тегу для
00:17:02
атаки с помощью оружия,
00:17:03
хорошо,
00:17:06
нам нужно подключиться к событие, поэтому
00:17:09
мы освободим здесь немного места, мы
00:17:11
перетащим, мы создадим
00:17:13
такое событие, и мы назовем это,
00:17:16
э-э, где
00:17:19
смена оружия атаки, помните, что это происходит
00:17:22
каждый раз, когда мы добавляем или удаляем
00:17:24
тег, поэтому нам нужно убедитесь, что мы
00:17:25
действительно
00:17:26
добавили тег, поэтому
00:17:29
здесь мы сломаем это,
00:17:30
потому что здесь у нас есть доступные активные теги,
00:17:34
и на основе этого мы проверим, есть
00:17:36
ли у него тег
00:17:40
атакующего оружия в настоящее время находится в нем, а это
00:17:42
означает, что на данный момент он все еще
00:17:44
включен, и мы позаботимся о том, чтобы оно
00:17:46
точно совпадало здесь, на случай, если
00:17:48
мы захотим специально найти его, у нас
00:17:51
здесь будет ветка, которая будет проверять соответствие
00:17:53
в результате этого
00:17:56
и отсюда мы теперь можем вызывать наши
00:17:58
функции, которые мы создали, или, скорее,
00:18:00
не функции, а события в данном случае,
00:18:02
но
00:18:03
поэтому, если у нас есть тег, мы начинаем
00:18:05
обнаружение повреждений, а если у нас нет тега,
00:18:07
мы прекращаем повреждение обнаружение
00:18:09
и чтобы проверить это, мы можем
00:18:11
распечатать
00:18:13
и сказать «
00:18:16
нанести ущерб»,
00:18:19
затем мы скопируем это и скажем «
00:18:27
поменять местами повреждения»,
00:18:29
хорошо,
00:18:30
отлично, так что теперь у нас
00:18:33
здесь есть базовое тестирование отладки, поэтому, когда мы
00:18:35
начнем, мы добавим
00:18:37
прослушиватель тегов, если получим тег на нас,
00:18:40
тогда мы
00:18:43
начнем проверять,
00:18:46
наносим ли мы урон, поэтому простой способ
00:18:48
проверить это - если мы перейдем к нашему,
00:18:52
давайте закроем то и это и
00:18:57
перейдем к нашему,
00:19:02
мы хотим перейти к нашей способности для нашей
00:19:04
косой черты который мы создали,
00:19:06
поэтому здесь мы можем добавить, например,
00:19:09
в нашу функциональность тега, мы можем сказать, что
00:19:13
вместо добавления состояния пользовательского тега мы собираемся
00:19:15
атаковать, мы собираемся изменить
00:19:17
его на атаку с помощью оружия,
00:19:21
поэтому, если мы сейчас нажмем на какую клавишу я вообще
00:19:24
это надел я даже не помню
00:19:26
хм
00:19:30
вот мы
00:19:32
и собираемся провести атаку
00:19:38
клавиша e мы используем способность окей,
00:19:41
давайте нажмем клавишу e и посмотрим, что
00:19:42
произойдет
00:19:44
вы можете видеть нанесение урона и прекращение урона, когда
00:19:47
мы добавляем и удаляем эти теги,
00:19:50
хорошо,
00:19:51
так что, похоже, это работает, так что
00:19:53
все хорошо, однако мы добавляем этот тег,
00:19:56
извините, этот тег здесь и
00:19:59
тег состояния оружия в начале этого взлома
00:20:01
и затем удаляем его в конце,
00:20:04
и это может быть не то, что нам нужно,
00:20:06
потому что мы хотим иметь только часть
00:20:08
проверки анимации, но мы можем заняться
00:20:11
этим позже, а сейчас
00:20:13
мы можем затем
00:20:15
добавить нашу функциональность к тому, что мы
00:20:17
должны быть по сути, делаем по нашему тику,
00:20:18
поэтому, когда мы делаем наш тик,
00:20:22
мы хотим сделать несколько вещей, которые мы хотим
00:20:24
сначала проверить
00:20:26
[Музыка] по
00:20:27
сути сделать трассировку линии, чтобы
00:20:30
сделать это, мы хотим иметь наше оружие,
00:20:34
и мы будем это очищать
00:20:36
немного, я думаю позже, но сейчас мы можем сделать,
00:20:43
я действительно не хочу делать заброс,
00:20:48
давайте
00:20:49
сделаем это так, я добавляю
00:20:58
сюда экипированное оружие в бою,
00:20:59
и это будет представлять собой быстрое
00:21:02
оружие, которое у нас на самом деле есть Итак, мы
00:21:03
сделаем это из базы оружия BP.
00:21:05
Нет, мы сделали кодовую базу, мы называем это
00:21:07
оружием,
00:21:08
так что это базовое предложение,
00:21:11
поэтому мы перетащим это сюда и
00:21:13
скажем, возьми оружие, и щелкнем правой кнопкой мыши, чтобы
00:21:15
убедиться что он уже проверен,
00:21:17
поэтому он действителен, когда мы
00:21:19
пытаемся его использовать,
00:21:22
и отсюда мы действительно можем создать
00:21:24
пользовательский интерфейс, я думаю, поэтому мы создадим
00:21:26
его в бою, мы скажем, что на
00:21:29
самом деле он принадлежит оружию Итак,
00:21:31
давайте создадим его здесь,
00:21:33
когда мы перейдем к
00:21:35
интерфейсу чертежа, мы назовем это
00:21:38
подчеркиванием bpi,
00:21:40
получим места повреждений,
00:21:44
вот так,
00:21:45
и
00:21:47
допустим,
00:21:50
мы хотим вернуться, в этом случае мы хотим
00:21:52
сделать трассировку между двумя точками, поэтому нам
00:21:54
нужно получить две точки назад вправо,
00:21:57
поэтому мы можем создать
00:21:59
структуру для заполнения этой информации, поэтому
00:22:02
мы переходим к чертежам
00:22:03
и вызываем структуру,
00:22:06
подчеркиваем
00:22:08
места повреждений,
00:22:11
мы убеждаемся, что у нее есть две
00:22:12
переменные,
00:22:14
и мы можем называть это как угодно, но,
00:22:16
скажем, это a и b или что-то в этом роде,
00:22:18
или вы можете назвать это верхом и низом или
00:22:20
как хотите, но нам нужно иметь
00:22:22
их как векторы, потому что они будут такими
00:22:24
позициями в мире, которые
00:22:28
закрываются, и
00:22:30
теперь мы можем перейти
00:22:32
к нашему
00:22:35
bpi получает места повреждений и говорит, что
00:22:37
мы хотим вернуть
00:22:41
структуру расположения повреждений с подчеркиванием,
00:22:45
однако у вас может быть несколько кратных значений
00:22:47
в зависимости от оружия, меч имеет
00:22:49
смысл, и имеет смысл своего рода изумление,
00:22:52
что у вас есть давайте
00:22:55
посмотрим здесь,
00:22:57
позвольте мне увидеть меч, который
00:22:59
он создает имеет смысл иметь что-то вроде
00:23:00
рукояти и что-то сверху, чтобы
00:23:02
убедиться и проверить это, но если бы у
00:23:04
вас было что-то совершенно
00:23:06
другое в качестве оружия [Музыка],
00:23:09
например,
00:23:13
топор, возможно, не имело бы особого смысла
00:23:16
проверять здесь, поэтому вы можете захотеть
00:23:17
провести одну проверку здесь или, возможно, вам
00:23:19
захочется провести дополнительную проверку здесь
00:23:21
и дополнительную проверку, например,
00:23:23
несколько проверок, чтобы убедиться, что
00:23:25
это немного более точно,
00:23:27
поэтому мы можем захотеть иметь этот
00:23:30
бит на дюйм возвращайте не одну структуру, а
00:23:33
множество из них, так что да, по сути, вы можете
00:23:34
иметь несколько наборов этих
00:23:37
позиций трассировки линий,
00:23:40
поэтому давайте просто назовем
00:23:43
места повреждений, поскольку имя
00:23:48
закрывается, мы перейдем к нашей
00:23:51
базе оружия, мы скажем,
00:23:53
реализуем этот интерфейс, который мы создали,
00:23:56
чтобы ppi получал такие места повреждений,
00:24:00
и
00:24:02
это, в свою очередь,
00:24:05
затем
00:24:06
вернет нам эти позиции, но как
00:24:08
нам хорошо получить эти позиции,
00:24:11
если мы возьмем, например, наш меч,
00:24:14
который является единственным оружием, которое мы создали
00:24:15
до сих пор, и
00:24:16
мы можем пойти к
00:24:19
скелетной сетке,
00:24:21
открывая скелетную сетку, мы можем
00:24:23
здесь создать несколько сокетов,
00:24:26
чтобы мы могли сказать,
00:24:28
вызовите этот сокет a, а затем создайте
00:24:31
другой
00:24:33
и вызовите тот,
00:24:35
например, b,
00:24:36
и теперь вы можете расположить их в
00:24:38
положениях, где вы хотите, чтобы они имели
00:24:40
Представьте, что мы можем иметь один здесь, в
00:24:42
начале рукоятки, и мы можем иметь
00:24:43
еще один, например, на кончике
00:24:46
меча, так что теперь они будут
00:24:47
проходить между точками a и точкой b
00:24:50
здесь,
00:24:53
так что, закончив это, мы можем затем войдите в
00:24:55
наш меч и скажите
00:24:58
здесь с нашим интерфейсом, мы не называли
00:25:02
наш интерфейс, кажется, что-то,
00:25:06
э-э, оружие,
00:25:08
ppi, оружие, давайте назовем это,
00:25:11
получим
00:25:15
файл местоположения повреждений, сохраните, вернитесь к нашему мечу, мы видим,
00:25:18
хорошо, мы не видим, давайте скомпилируем там мы
00:25:21
идем получать места повреждений,
00:25:23
поэтому мы реализуем это, так что это будет так, как
00:25:25
это будет
00:25:26
представлено в мече, поэтому вы должны
00:25:28
реализовать это по-разному для каждого из
00:25:29
разных дочерних элементов, поэтому топор, молот,
00:25:31
меч и т. д. и т. д.,
00:25:34
так что в этом случае мы можем просто сделать, чтобы у нас было
00:25:36
здесь очень простой случай, поэтому мы создадим
00:25:40
массив, мы
00:25:44
создадим место повреждения,
00:25:45
и места, которые мы хотим иметь здесь,
00:25:47
будут сокетами этого,
00:25:51
чтобы мы могли получить
00:25:54
git расположение сокета
00:25:59
два из них и первый один мы называем a,
00:26:01
второй мы называем b,
00:26:05
потому что это то, как мы назвали наши сокеты,
00:26:08
и мы просто направляем их в эти
00:26:10
позиции вот так,
00:26:11
так что теоретически это должно быть
00:26:14
то, что нам нужно сейчас, чтобы получить эти местоположения,
00:26:17
поэтому вернемся к нашему компоненту чертежа
00:26:18
еще раз
00:26:21
это
00:26:25
Теперь
00:26:26
мы можем сказать: «
00:26:28
Получите
00:26:31
сообщение о местах повреждений», и мы получим здесь возврат,
00:26:34
который представляет собой массив, и мы можем сказать
00:26:37
цикл на нем,
00:26:41
и для каждого из этих элементов мы
00:26:44
собираемся сделать трассировку линии, поэтому мы
00:26:47
просто перейдем к
00:26:49
многострочная трассировка,
00:26:54
и причина этого в том, что мы можем поразить
00:26:56
несколько объектов, и мы можем захотеть
00:26:58
повредить несколько объектов, тогда, когда мы нажимаем на
00:27:01
них
00:27:02
и нарушаем это, мы теперь получаем наши
00:27:05
позиции, которые мы можем сказать, например, между a и b,
00:27:07
и именно здесь мы прорисуйте нашу
00:27:09
линию, а затем,
00:27:12
в дополнение к этому, мы можем захотеть
00:27:14
нарисовать ее для постоянного отображения, чтобы мы
00:27:17
увидели, что на самом деле происходит,
00:27:19
поэтому давайте пойдем и посмотрим, работает ли это, это
00:27:21
не сработает, потому что у
00:27:23
нас нет
00:27:27
экипированного меча,
00:27:30
поэтому мы сначала нужно экипировать меч, поэтому
00:27:31
давайте быстро добавим для этого функциональность,
00:27:34
давайте создадим событие
00:27:39
и, скажем, экипируем
00:27:41
оружие,
00:27:44
скажем, в качестве входных данных требуется класс
00:27:47
оружия BP
00:27:50
[Музыка],
00:27:52
вот так, чтобы
00:27:56
экипировать,
00:27:58
а затем здесь мы, по сути, хотим сделать
00:28:00
то, что мы сделал это в предыдущем уроке, и в
00:28:05
первую очередь мы хотим создать актера
00:28:08
из класса,
00:28:10
который будет таким,
00:28:12
а затем мы
00:28:13
разделим преобразование, а затем мы можем установить
00:28:17
это как наше экипированное оружие, вот
00:28:22
так,
00:28:23
и после этого нам нужно чтобы
00:28:26
прикрепить это к
00:28:28
гитарной сетке, по сути, так же, как мы это делали в
00:28:30
нашем персонаже от третьего лица, что означает,
00:28:32
что нам нужно
00:28:33
найти нашего владельца и посмотреть, есть ли у вас сетка, у
00:28:36
нас есть интерфейс под названием get
00:28:39
mesh,
00:28:40
поэтому он вернет скелетную сетку,
00:28:42
которая является компонентом скелетной сетки.
00:28:44
актера, если у него реализован интерфейс,
00:28:48
а затем, используя это, мы можем сказать, что
00:28:51
прикрепить актера к компоненту
00:28:55
- это не так, как оно пишется, я думаю, что это
00:28:58
прикрепить актера,
00:29:05
что, если мы перетащим этот один, прикрепим после
00:29:10
этого, давайте
00:29:11
проверим третий компонент
00:29:13
и родительский компонент
00:29:14
в данном случае это будет скелетная сетка,
00:29:18
и имя сокета, к которому мы собираемся
00:29:23
его прикрепить, будет тем, которое мы
00:29:24
используем здесь,
00:29:27
и именно здесь мы создаем оружие, которое
00:29:29
используем правой рукой. гнездо для оружия вот так,
00:29:33
да, поэтому мы
00:29:35
снова перейдем к компоненту,
00:29:37
вот так, и мы убедимся, что эти
00:29:40
привязки к цели привязываются к цели привязываются к
00:29:42
цели и сваривают моделируемые тела, это
00:29:44
должно быть, по сути, то, что мы делали здесь,
00:29:46
прежде чем мы щелкая его здесь,
00:29:48
мы создаем его здесь,
00:29:50
поэтому вместо того, чтобы делать
00:29:52
это, мы будем
00:29:54
делать это, вместо этого мы называем наш
00:29:56
боевой BBC, мы говорим «
00:29:59
Оборудованное оружие»,
00:30:02
и вместо этого оружия мы собираемся
00:30:03
сказать, что мы мы собираемся экипировать меч,
00:30:05
так что теперь теоретически мы должны получить
00:30:07
меч, когда мы начнем,
00:30:09
и вы видите, что мы получаем меч,
00:30:12
поэтому
00:30:13
нажимая e, теперь вы можете видеть, что
00:30:15
мы
00:30:16
получаем много разных линий,
00:30:19
которые будут выровнены по
00:30:22
мечу. в этом случае,
00:30:24
э-э, в каждом кадре, который он имел, и вы можете
00:30:26
видеть, что он на самом деле делает много
00:30:28
трассировок строк, хотя мы, возможно, не хотим
00:30:30
их иметь,
00:30:31
но опять же, мы вернемся к этому и
00:30:33
очистим это немного позже, а пока
00:30:35
это нормально,
00:30:38
я знаю, что этот эпизод был немного более
00:30:40
продолжительным по сравнению с другими,
00:30:42
но это довольно большая тема, и я
00:30:44
действительно хочу убедиться, что вы
00:30:46
правильно понимаете,
00:30:49
почему мы что-то делаем, а также чтобы вы Вы
00:30:51
можете сами определить,
00:30:52
как лучше всего двигаться
00:30:54
дальше, если вы создаете систему повреждений,
00:30:56
но я думаю, что на данный момент
00:30:58
этого достаточно для этого эпизода,
00:31:01
и я надеюсь увидеть вас в следующем,
00:31:04
надеюсь, нашел это видео полезно, если
00:31:06
вам понравилось видео, поставьте лайк, если оно вам
00:31:08
не понравилось, оставьте дизлайк, оставьте
00:31:10
свои предложения или комментарии
00:31:12
внизу, подпишитесь и поделитесь этим
00:31:13
видео, если вы хотите видеть больше подобных видео в
00:31:15
будущем, на этом пока все, продолжайте во время
00:31:17
обучения береги себя
00:31:19
[Музыка]

Описание:

This is the series to watch if you want to create a role playing game in Unreal engine with rich, deep RPG systems and advanced functionality. In this episode we will be looking at how we can go about doing collision detection for the purpose of damage. Beginner tutorial series: https://www.youtube.com/playlist?list=PLNBX4kIrA68nyGfIKgyizftebllhKc4ZX Creating game systems: https://www.youtube.com/playlist?list=PLNBX4kIrA68lvWElEzhRaCOtCjZ7L05xv Join the Discord server here: https://discord.com/invite/zBeebU7uv3 Support the work of LeafBranchGames on Patreon here: https://www.patreon.com/LeafBranchGames

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

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

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

mobile menu iconКак можно скачать видео "Create a Role playing game in Unreal Engine Part 24 - Damage collision"?mobile menu icon

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

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

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

mobile menu iconКакой формат видео "Create a Role playing game in Unreal Engine Part 24 - Damage collision" выбрать?mobile menu icon

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

mobile menu iconПочему компьютер зависает при загрузке видео "Create a Role playing game in Unreal Engine Part 24 - Damage collision"?mobile menu icon

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

mobile menu iconКак скачать видео "Create a Role playing game in Unreal Engine Part 24 - Damage collision" на телефон?mobile menu icon

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

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Create a Role playing game in Unreal Engine Part 24 - Damage collision"?mobile menu icon

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

mobile menu iconКак сохранить кадр из видео "Create a Role playing game in Unreal Engine Part 24 - Damage collision"?mobile menu icon

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

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

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