Движение персонажа и прыжок

загружаем модель персонажа. она становится character/ к ней можно загрузить наборы анимации, и в создании анимации сделать переходы от состояния покоя в состояние бега. Но самое главное это тот самый код который двигает модель. Самое главное понять, что анимация лишь создает иллюзию движения, по настоящему модель двигается по определенному вектору, с определенным ускорением, которое создается при нажатие на клавишу. Первый блок это stand
он же стартовый. В нем происходит проверка нажал ли игрок на клавишу.
Код добавить на персонажа.

Движение персонажа и прыжок, image #1

разберем действия в блоке STAND

Движение персонажа и прыжок, image #2

1.определяет позицию игрока и записывает в переменную(vec3)-pozitionP(для прыжка)
2. дать нажатое направление — дает значение 300 при нажатии клавиш назад вперед. Клавиши определяют значение (+) или (-) если игрок нажимает W = +300 S= -300 значения отправляются в переменную(float) — yaw
3. дать нажатое направление(для бега в право влево) то же самое только берем нажатие A D и записываем в переменную rightspeed

4. назначить ориентацию из камеры — движение для камеры в след за значениями нажатых кнопок(вслед за игроком) движение камеры вперед, движения камеры вправо, влево. сглаживание движение камеры значение ставиться 098-0.99. Что бы не было рывков камеры.

Движение персонажа и прыжок, image #3

5. Взять основу объекта. — его основные вектора, куда воздействует сила.
назначается вектор вперед dirZ_fwd
______________________________________________________________________________

далее идет сглаживание движения, с помощью математических манипуляций

6. Максимальное значение float
создаем переменную speed(float) и получаем значение из двух переменных Yaw(при нажатии вперед назад)
rightspeed(при нажатии вправо влево)
7. Сглаживание переменной float
полученную переменную speed сглаживаем до 0.8 и записываем в новую переменную forwardSpeed

Движение персонажа и прыжок, image #4

8. начинаем двигать персонажа. Полученную переменную forwardSpeed
запишем туда, где персонаж смотрит перед собой. Обычно это скорость Z/

9. можно было так же сгладить другие движения, но это на усмотрение и ваши эксперименты. Но боковую скорость берем как есть rightSpeed записываем в X скорость. И необходимо указать значение базиса персонажа где у него передний вектор это переменная dirZ_fwd (ориентация на этот вектор) т.е в этом направлении будет расти или уменьшаться (-300 +300) скорость переменной forwardSpeed

ОТСТУПЛЕНИЕ к анимации. Вы уже создали переход анимации, назначили на модель список анимации. И в том же блоке переходите на вкладку анимация и там включаете ее по мере роста переменной ускорения на передний вектор

у меня называется анимация id_run/(как получить список анимации и создать ее это отдельная тема-есть видео) там состояние покоя переходит в бег.
время перехода 80 и значение скорости перехода от 0 до 600 сама скорость до 300

Движение персонажа и прыжок, image #5

10. далее после того как ваш персонаж уже двигается бегает. Добавляем значения камере которая преследует игрока сглаживание и расстояние 90 до игрока и сглаженные движения 0.25

Движение персонажа и прыжок, image #6

11. делаем выход для нажатия кнопки я назвал выход(transition) — junp
и он срабатывает при нажатии кнопки jamp ( назначение кнопок в интерфейсе в виде клавиатуры.) если игрок нажимает кнопку с названием jamp то происходит переход в состояние прыжка это три блока

ПРЫЖОК
три блока START_JUMP /on_Ground/timer

Движение персонажа и прыжок, image #7

JAMP START

Движение персонажа и прыжок, image #8
  1. опять же определяем позицию игрока(у меня название объекта Neutral_Idle_hisp01) и записываем в переменную pozitionZ
  2. прибавляем к вектору позиции игрока +100 и ставим на ней маску -1 (т.е игрок может только по этой оси двигаться.) выносим это значение в переменную new_poz
  3. подкидываем игрока в воздух в оси Y выбираем название Neutral_Idle_hisp01
    и даем ему значение переменной new_poz сглаживаем движение 0.92

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

Движение персонажа и прыжок, image #9

4. Дальше ставим таймер этого воздействия 1 сек и делаем выход из блока на inAir

дальше копируем движение игрока вперед из первого блока,

направление и значение 800 или более. направление игрока базис dirZ_fwd

и двигаем персонажа вперед. Это нужно что бы игрок смог двигаться в прыжке вперед. (Внимание замена на скриншоте speed на forwardSpeed)

Движение персонажа и прыжок, image #10

5. движение персонажа расставляем возможность двигаться вперед.
значение скорости forwardSpeed и направление на базу dirZ_fwd

6.дальше идет определение игроком коллизии сверху если она произошла на расстоянии 100 (равная силе прыжка+100) маска слоя ось Y то происходит выход из блока прыжка. in_Air

следующий блок для красоты. Можно добавить его или не добавлять.

Блок определение столкновения с землей или твердой поверхностью.

in_Air переходит в on_Ground
in_Air переходит в on_Ground
  1. Проверяем если персонаж столкнулся с твердой поверхностью
    делаем выход из блока на End_jamp точность определения 0.3

ТАЙМЕР

делаем таймер 0.1 сек
делаем таймер 0.1 сек

и выходим из таймера обратно в движение. Стартовый блок.
Все персонаж может двигаться и прыгать. Поздравляю вас с этим!

КАМЕРА и код(fsm)

Движение персонажа и прыжок, image #13

для камеры создается один стартовый блок, для вращения вокруг объекта. Добавляется fsm на камеру.

Движение персонажа и прыжок, image #14
  1. получаем положение вертикали — мысленно прочертите черту сверху вниз по экрану. Это положение уже есть в наборе клавиш и называется TurnUp(положение мыши -@mouseY=1 от -1 до 1)
    присваем его переменной mousY/ т.е по этой оси будут записываться значения в эту переменную.
  2. Получаем положение по горизонтали. Тоже самое, только мысленно чертим линию вдоль экрана по горизонту. Движения мыши записываем в переменную mouseX
  3. дальше добавляем вращение. Цель — название персонажа.
    задаем полученные переменные в скорости (mouseY, mouseX)вращения равные положению мыши на экране. Задаем расстояние до цели — 300. Угол предела вращения по Y оси 120. И приближение к цели 40.
Движение персонажа и прыжок, image #15

Ставим collide — что бы камера имела столкновения. и радиус столкновения камеры.

и можно назначить параметр камеры фокусировки. По желанию. Но лучше установить.

______________________
PS: бывает так, что модель, может быть развернута и двигается наоборот. Необходимо зайти в ноды модели. Выбрать самый первый нод. И добавить новый, таким образом можно развернуть фигуру не воздействуя на основную анимацию.

Движение персонажа и прыжок, image #16
165 views·4 shares
165 views