Blueprints Урок 2

Опубликовал Konradvall
5-09-2018, 10:25
651
4
Blueprints Урок 2


И снова здравствуйте! Болезнь отступает, а это означает что гнусавости в голосе будет меньше. Итак, начнем мы с проверки домашнего задания из прошлого урока.
К сожалению, на момент написания текста всего один человек прислал мне свою работу, спишем это на то, что вы пока не сильно доверяете моей методе. Однозначно пользователь Maksim Maksim (надеюсь никнейм верный) получает плюс от меня, он не только сделал то, что я просил, но и нашел сторонний вариант выполнения логики, где была устранена специально допущенная мной ошибка. К сожалению, Maksim Maksim не указал именно на эту ноду, но все равно молодец. Привожу скриншоты с выполнением домашнего задания.
Итак, пример выполнения не устраняя ошибку:


И пример с устранением ошибки:


Ошибка заключалась в том, что я использовал ноду обеспечивающую вращение в рамках мира, здесь же указана верная нода – SetActorRotation.
Для чего я вам даю такие задания – я хочу выявить кто из вас на что способен, чтобы понимать – понимаете ли вы меня, а также это будет полезно вам самим.
Ну а теперь к самому уроку.
Создайте новый проект в стиле Side Scroll в версии движка 20 редакции 2. Первое что необходимо сделать, это создать новую тестовую локацию, предварительно создав для нее папку в браузере под названием Maps.


Откройте ее и наполните минимальным набором объектов – SkySphere, источник света – солнце, пол, задняя стена, а также боковые стены. Что бы найти небесную сферу необходимо выставить настройки отображения контента движка в опциях View Options в браузере, а в строку поиска просто вбить sky. На данный момент это все что нам понадобиться. Для любителей графония – не спешите наполнять мир красивыми ассетами и т.п. вещами, это не к чему, в первую очередь мы пишем логику, а уже потом будем накидывать все остальное, не усложняйте процесс разработки.


Далее перейдя в настройки проекта укажите что бы наша карта загружалась при старте проекта по умолчанию в редакторе, а также сделайте ее основной для запуска.
Пока вы находитесь в настройках проекта перейдем во вкладку Input и сразу укажем необходимые для нас клавиши управления персонажем. Далее запомните, что клавиши обработки событий назначаются именно здесь.
Давайте добавим кнопки управления для спринта и приседания. Для этого найдите подгруппу Action Mapping и нажав на плюс вы добавите обработчик нажатия клавиши – назовите его Sprint, в строчке ниже найдите left shift и выберите его. Правее от обработчика вы можете увидеть дополнительные чекбоксы, они предназначены для создания комбинации клавиш.


Так как прыжок у нас уже настроен, мы его не трогаем. По тому же принципу создайте клавишу обработки для приседания.
Ниже вы увидите подгруппу Axis Mapping – эта группа предназначена для назначения клавиш управления, направленных на постоянную поддержку состояния, в отличии от упомянутой подгруппы выше. Тут по умолчанию вы увидите уже настроенные клавиши для управления направлением передвижения персонажа.
Теперь вернемся в редактор и откроем SideScrollerCharacter и напишим для нашего персонажа дополнительную логику. Для начала мы настроем спринт. Для этого создадим переменные float – Sprint speed и Walk speed со значениями 600 для первой и 300 для второй соответственно. Также нам понадобиться переменная Sprinting типа boolean со значением по умолчанию – false.
Вызовите контекстное меню на чертежной доске и вбейте Sprint – вы увидите, что появилась переменная Sprint в разделе Action Event, выберите ее. Теперь мы будем плести паутину логики бега. Как это сделать вы увидите в видео, а сейчас я расскажу, что вообще здесь реализовано:


Мы имеем два branch которые принимают параметры от постоянной Crouching через ноду отрицания Not boolean. Это дает системе понять, что данная логика выполняется только в том случае если, мы еще не бежим. Далее у нас идут ноды типа Set для получения состояния, где при правиле что клавиша нажата – запустить логику бега, а вторая ветка – прекратить бег соответственно. Для передачи данных состояний в настройки персонажа мы используем Character Movement с извлеченной настройкой Max Walk Speed в состоянии Set, это позволит нам изменять скорость персонажа в зависимости от того зажата клавиша бега или нет. Далее мы цепляем на данные ноды переменные, ранее созданные нами, где мы указывали скорость для разных состояний. И, конечно, для отслеживания того, что логика срабатывает, в конце мы подвязываем ноды выводы информации Print string. Запустите проект и посмотрите, что получилось.
Отлично, теперь закомментируйте данную логику, для этого выделите ноды и нажмите клавишу C. Заведите привычку комментировать все что вы делаете – это поможет вам не запутаться в дальнейшем. Комментарии лучше оставлять на английском языке, движок, конечно, понимает и русский, но для улучшения взаимодействия и понимания забугорного лексикона, советую пользоваться только первым.
Почти по тому же принципу строиться логика для движения на карачках.


Различия – в начале через branch я указываю что логика должна сработать только в том случае если мы не бежим в данный момент. Вообще для движения в присядку в движке уже есть готовые скрипты – Crouch & Un Crouch. Как правило их и используют в большинстве случаев, мы поступили точно также. Далее, что бы логика срабатывала необходимо в настройках Character Movement найти опцию Can Crouch и установить ее в положение true. Запустите проект и посмотрите, что получилось.
Те, кто ковырялся в Character Movement явно заметили, что там уже есть настройки скорости передвижения персонажа, почему тогда мы создаем дополнительные переменные, которые будут выполнять практически те же функции. Все просто, данные переменные и постоянные мы будем использовать при построении логики анимации, контекстно зависимых действий, а также катсцен. Дело в том, что настройки персонажа по умолчанию невозможно менять динамически кроме как используя заранее созданные переменные, запомните это.
Теперь перейдите во вкладку Construction Script и вставьте данный код:


Это необходимо для того чтобы при загрузке нашего уровня, в нашем персонаже стартовала логика движения ходьбы по умолчанию. Для этого и необходим данный скрипт, здесь мы будем выставлять настройки, которые будут составлять базу для данного BP по умолчанию.
Идем дальше. Далее мы создадим логику здоровья и получения урона нашего персонажа. Для наяала создайте папку Components в обозревателе и создайте в ней Blueprint класса Actor Component. Сразу же создаем в нем две переменные float – Health со значением 100, MaxHealth с таким же значением, постоянную NotHealth со значением по умолчанию false. Также создайте диспатчер HtalthEnding.
Создаем функцию Health system и реализуем логику таким образом:


Здесь мы реализуем логику работы показателя здоровья персонажа. Далее создадим функцию Death таким образом:


Здесь логика построена таким образом – если здоровье меньше или равно нулю и если на данный момент показатель здоровья еще не нулевой, то срабатывает логика – здоровья нет и вызывается диспатчер HealthEnding. Диспатчер нужен для того что бы потом вызвать его как эвент в том BP где мы подсоединим наш компонент.
Советую создать функцию для дебагинга логики, объяснять не буду, код читается легко даже для новичка:


Единственное что хочу уточнить это пункт duration – время отображения информации, установите его на 0, далее вы поймете почему. Теперь перейдем в Event Graph и запитаем на отображение каждый тик информацию отладки а также смерти:


Теперь перейдем в нашего персонажа и добавим наш компонент в него, как это делается вы уже знаете. Для реализации получения урона я обычно создаю отдельную вкладку в BP но вы можете писать в основном окне. Сейчас нас интересует логика получения общего урона персонажем, поэтому мы будем использовать готовую ноду Event any damage. Что бы логика работала, необходимо умножать весь получаемый урон на -1, в противном случае урон не будут проходить, а противоположно будет прибавляться к показателю здоровья, выглядит это так:


Теперь мы создадим функцию которая будет отвечать за использование ragdoll при смерти персонажа. Выглядит построение таким образом:


Мы отключаем в данной логике коллизии у капсульного компонента, для меша назначаем симуляцию физики, включаем коллизию, а также на последок выставляем блокировку на реакцию столкновений с нашим мешем. Вообще эта функция может быть заменена на функцию проигрывания анимации смерти, заранее подготовленной для этого, но мы пойдем другим путем.
Создайте постоянную Dead со значением false по умолчанию – ей мы будем проверять мертв ли персонаж или нет. Теперь создайте функцию Death function и заполните ее таким образом:


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


Вызвав данный эвент киньте на него функцию смерти. Теперь нам осталось лишь проверить данную логику. Для этого перейдите в редактор уровня и в окне Models найдите Pain Causing Volume – разместите его на уровне по направлению движения персонажа, в настройках выставите значение damage per seconds на 25. Запустите проект и посмотрите, что получилось.
Детально вы можете посмотреть весь процесс в видео:

Прямая ссылка https://www.youtube.com/watch?v=2kFB_6mVn60&t=2138s

Отлично! Теперь домашнее задание. Если вы заметили, то после смерти управление персонажем работает как обычно, если, к примеру вы совершите прыжок то просто улетите за пределы игровой сцены, измените логику управления таким образом что бы при смерти персонажа, оно отключалось, при этом, не создавая новых переменных и постоянных а используя уже созданные. Как обычно скриншоты и видео присылайте на [email protected]

Для особо ленивых, я буду выкладывать проект каждый раз в связке с уроками на файлообменниках. Поэтому вы можете его скачать и запускать на своем ПК, главное что бы у вас стояла актуальная версия движка. Размер проекта 34 Mb.

Огромное спасибо тем кто внес свою лепту в развитие моей идеи, на данный момент для завершения обустройства студии мне не хватает 170 000 рублей (сейчас я почему то краснею и представляю что вы обо мне думаете), от данной суммы собрано 0,39%. На эти средства будет не только дооборудована студия но и реализована возможность создания отдельного сервера с репозиторием GIT, для СОВМЕСТНОЙ работы с вами! Как вы понимаете планы у меня большие. Также убедительная просьба если вы кидаете донат, то пишите свой никнейм, что бы я мог отблагодарить вас, если вы хотите остаться инкогнито в данном вопросе, то не волнуйтесь, публиковать тех, кто принес пожертвования я все равно не буду - это будет не красиво с моей стороны. Если вы хотите поддержать меня и мои начинания, то можете сделать это просто:
Яндекс. Деньги - 410014371649547;
QIWI - +79141970017;
WebMoney - R277462752505;

До встречи на страницах GFX-HUB.
Комментарии к новости
  1. Lolly.Blueprint9 сентября 2018 10:38
    Маленький вопрос - есть же способ как создавать ровно ноды, что бы красиво все выглядело. Это типо что то косметического украшения. Вы знаете как такое делать?
    1. Валентин
      Konradvall10 сентября 2018 01:54
      Привет, такая возможность есть, но я ей не пользуюсь. Если хотите настроить то вам необходимо пройти в настройки Preferences window и просмотреть назначенные горячии клавиши
      1. Lolly.Blueprint10 сентября 2018 22:19
        Не нашел что то((( Можешь скринами или подробно?)
        1. Валентин
          Konradvall11 сентября 2018 00:34
          Хорошо, посмотрю и напишу в следующем уроке
Добавить комментарий
Добавить свой комментарий:
Ваше Имя:
Ваш E-Mail:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
Введите два слова, показанных на изображении: *
Архив
«    Март 2019    »
ПнВтСрЧтПтСбВс
 123
45678910
11121314151617
18192021222324
25262728293031
Февраль 2019 (9)
Январь 2019 (85)
Декабрь 2018 (109)
Ноябрь 2018 (13)
Октябрь 2018 (33)
Сентябрь 2018 (98)
Опрос
ТОП Комментарии
alex
alex пишет:
Ок, перезалил - качайте.
alex
alex пишет:
Исправлено - качайте.
alex
alex пишет:
Hi! Fixed - full re-uploaded, try now
где файлы? ссылки не работают