February 8

GameDev 3.0. Этап 2.1. Дальний бой. Урок 4. Механика передвижения

  1. Повороты персонажа на месте с анимацией
  2. Настройка камеры персонажа
  3. Ускорение персонажа на Shift
  4. Замедление персонажа на Alt
  5. Ограничение наклона камеры
  6. Замедление времени на клавишу для поиска багов

Повороты персонажа на месте с анимацией

Сейчас создадим довольно-таки сложную функцию, она нужна для поворота персонажа на месте.

Заходим в BP_ThirdPersonCharacter, вызываем Get Control Rotation

мы

выз

подключим к

Далее выделим все вместе и ПКМ-> Collapse to Function

Назовем эту функцию LimitRotation

Заходим внутрь этой функции и подсоединяем

Указываем такие значения:

Interp Speed(Smooth) - 8

Yaw Min - -15

Yaw Max - 20

Compile, Save

Сейчас подключим анимацию, когда крутится на месте с этой новой функцией. Также нам надо подключить новую функцию. Добавляем Branch к нашей функции LimitRotation, к нему подключаем Add Actor World Rotation, на Delta Rotation ПКМ -> Split Struct Pin.

Здесь напишем такую логику. Вызываем Get Curve Value, если ничего не появилось, убираем галочку тут

и выбираем функцию из Animation.

Вызовем наш мэш

К нему подключаем Get Anim Instance, обязательно включаем галочку обратно, чтобы поиск шел быстрее.

Это и есть наш Target. В Curve Name пишем RotationAmount.

Из Return Value вызываем Abs (AbsoluteFloat).

Как это работает?

Давайте теперь добавим анимации поворота на месте.

Перекидываем

Вот они появились

ава

нажмем

Pitch

gjkexbv

Выделяем

Назовем

gfdg

dfdf

dgfdg

ghfhf

Возвращаемся в BP_ThirdPersonCharacter

2 пина должны быть свободны обязательно. Поэтому перенесем с Then 3 на Then 1.

Создаем переменную Previous Aim Yaw типа Float

С зажатым Alt вынесем в Event Graph

Еще одну переменную Aim Yaw Rate

получим

Возвращаемся в ABP_Manny, находим где у нас Calc Pitch / Yaw и туда с зажатым Ctrl выносим CharacterRef, из него Get Aim Yaw Rate, выводим из него Promote to Variable и переменную так же и назовем Aim Yaw Rate.

Спускаемся ниже

Теперь самое время добавить анимации, заходим в AnimGraph, создаем новую State Machine и назовем ее Idle.

Зайдем в нее.

Зайдем в Main States -> Locomotion

Удалим Idle, т.к. у нас он будет другой.

Создаем кэш

Назовем его IdleCache

Вернемся в Idle State, где удалили MM_Idle

Получится

Есть ошибка, заходим в Idle

Вытаскиваем, соединяем и называем просто Idle

Найдем и переименуем наши анимации

Возвращаемся

Перетягиваем их

Укажем при каком условии перейдет в поворот, нажимаем на кругляшек

Откроется новое окно, с переменных вытягиваем RotateL? и соединим. Compile, Save

То же самое с RotateR? Compile, Save

Так же соединим повороты влево и вправо туда-обратно. Для TurnLeft to TurnRight добавим RotateR?

Для TurnRight to TurnLeft добавим RotateL?

Еще нам нужна логика для возврата из поворота в айдл

Из TurnLeft в Idle...

Теперь из TurnRight в Idle. Копируем из предыдущего, вставим, соединим и поменяем значения: больше, чем -5, но меньше, чем 34.

Теперь у нас выглядит так:

Ускорим немного анимацию, заходим в саму анимацию, например, TurnLeft и в Details -> Play Rate находим Bind и меняем его на Rotate Rate. И Loop Animation ставим галочку. Compile, Save.

Возвращаемся назад, заходим в TurnRight и так же в Details -> Play Rate находим Bind и меняем его на Rotate Rate. Compile, Save.

То есть для скорости вращения этой анимации мы закрепили к нашей переменной Rotate Rate, которую мы создавали ранее.

Настройка камеры персонажа

Камеру подкрутим, чтобы была ближе к персонажу.

Для этого зайдем в BP_ThirdPersonCharacter, найдем CameraBoom:

В Details меняем значения: Location Z ставим 60, Target Arm Length ставим 300

В Lag также меняем значения:

Это значит, что камера будет более плавнее следить за персонажем.

В будущем, при стрельбе, будем менять эти значения.

Ускорение персонажа на Shift

Сейчас добавим ускорение персонажу при нажатии на клавишу Shift.

Заходим в BP_ThirdPersonCharacter -> EventGraph, в пустом месте ПКМ и пишем Shift и выбираем Left Shift:

Создаем переменную Sprinting? типа Boolean

d

В Details у Character Movement - Max Walk Speed поставим 450

дж

дж

дж

Замедление персонажа на Alt

Теперь сделаем обратную логику на Alt - замедление.

Вызовем Alt:

Скопируем ноды с ускорения. Соединим с Alt по типу Shift.

Теперь нам нужна еще одна переменная, назовем ее Hold?

Заменим Sprinting? на Hold? в обоих нодах.

Теперь, при нажатии на Alt, наш персонаж идет медленней.

Ограничение наклона камеры

Добавим 2 небольшие механики, которые нам понадобятся для последующей работы.

Первая механика - ограничить поворот камеры, чтобы она не смогла слишком сильно подниматься или опускаться.

Заходим в BP_ThirdPersonCharacter -> EventGraph, в пустом месте вызовем Event Begin Play, а если уже есть, то ставим после него Sequence и с него уже разветвление пойдет по событиям.

Вызовем ноду Get Player Camera Manager, из него вызовем Set View Pitch Max (ставим значение 40) и Set View Pitch Min (ставим -45)

Теперь камера ограничена, можно поменять, если потребуется, эти значения.

Замедление времени на клавишу для поиска багов

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

В EventGraph нажимаем ПКМ, находим Input, в нем находим Keyboard Events и здесь находим любую кнопку, на которую хотим повесить механику.

Чаще всего можно написать просто название кнопки, н-р, X keyboard, но с некоторыми кнопками это не работает почему-то.

Далее из нее вызовем Flip Flop, из А вызовем Set Global Time Dilation, скопируем ее и на В. В А ставим значение 0,1, а в В ставим значение 1. Compile, Save.

При нажатии на Х время замедлится и мы можем посмотреть баги, значения, которые нам подойдут и т.д. Еще раз нажимая на Х, время вернется в "обычное русло". И так попеременно можно менять, благодаря переключателю Flip Flop.