Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

В этом уроке мы начнем интеграцию анимаций в нашу Логику Игрока.

На данный момент, Игрок может уже двигаться и прыгать. Теперь нам нужно заставить персонажа визуально реагировать на эти состояния, воспроизводя правильные анимации, такие как покоя, ходьбы, бег и падения.

Основная идея проста: мы будем использовать текущее состояние персонажа, чтобы решить, какая анимация должна быть воспроизведена.

Например:

  • Если Игрок на земле и не движется, воспроизводите анимацию покоя.
  • Если Игрок на земле и движется, воспроизводите анимацию ходьбы.
  • Если Игрок бегает, воспроизводите анимацию бега.
  • Если Игрок не на земле, воспроизводите анимацию падения.

Это один из самых распространенных паттернов при создании контроллера персонажа. Логика движения контролирует, что делает персонаж, а логика анимации считывает эту информацию, чтобы решить, что должен видеть игрок.

1. Создание логики выполнения анимации

Теперь, когда мы узнали, как создавать и организовывать события, давайте создадим новое событие для блока логики анимации под названием Обновить Анимации.

Это событие будет отвечать за обновление состояния анимации Игрока.

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

Например, когда Игрок на земле, мы можем воспроизводить анимации покоя, ходьбы или бега. Когда Игрок не на земле, мы можем воспроизводить анимацию падения.

Следующим шагом нам нужно получить доступ к Компоненту Анимации, который отвечает за управление и воспроизведение анимаций персонажа.

Для этого мы сначала получаем Сущность, затем используем узел Дочь, чтобы получить дочерний объект под названием Сетка, который является объектом сетки нашего Игрока. Из этой дочерней Сущности мы можем получить доступ к Компоненту Анимации.

image.png

Поскольку, вероятно, нам придется несколько раз получать доступ к Компоненту Анимации, мы можем превратить узлы Получить Сущность, Получить Дочь и Получить Компонент Анимации в многоразовую функцию.

Для этого выберите узлы, которые хотите, щелкните правой кнопкой мыши и выберите Продвинуть Выбор В Функцию.

Это создаст функцию, содержащую эту логику, делая Граф более чистым и легче понимаемым. Это также позволяет нам повторно использовать этот же поток в других частях Logic Brick, не создавая снова те же узлы.

image.png

Давайте переименуем эту функцию в Воспроизвести Анимацию.

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

image.png

Теперь дважды щелкните по функции Воспроизвести Анимацию, чтобы открыть и отредактировать ее.

Затем щелкните правой кнопкой мыши на узле Входы Функции и добавьте два новых входных пина.

Первый вход будет:

  • Анимация, типа Строка.

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

image.png

Второй вход будет:

  • Плавность, типа Число с плавающей запятой.

Этот вход будет использоваться для управления временем перехода между анимациями.

image.png

Эти параметры делают функцию намного более универсальной.

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

image.png

Из выхода Получить Компонент Анимации добавьте узел Воспроизводить По Имени.

Этот узел отвечает за воспроизведение анимации на основе ее имени.

Затем подключите параметры Анимация и Плавность, которые мы создали в узле Входы Функции, к соответствующим полям узла Воспроизводить По Имени.

Это означает, что каждый раз, когда функция Воспроизвести Анимацию вызывается, она будет получать имя анимации и время плавности, а затем передавать эти значения в Воспроизводить По Имени.

Не забудьте включить опцию Цикл в узле Воспроизводить По Имени.

С активированным Циклом анимация будет продолжать воспроизводиться, пока она активна, вместо того, чтобы останавливать, когда достигает последнего кадра. Это особенно важно для анимаций, таких как покой, ходьба, бег и падение, потому что они обычно должны продолжать воспроизводиться постоянно.

Наконец, подключите выходной Поток узла Воспроизводить По Имени к Выходы Функции, завершая выполнение функции Воспроизвести Анимацию.

image.png

Теперь намного проще воспроизводить анимации нашего персонажа.

Вернитесь к узлу Если, который проверяет, находится ли Игрок на земле или нет, и используйте функцию Воспроизвести Анимацию.

Когда условие истинно, что означает, что Игрок на земле, вызовите функцию, передавая "p-idle" в качестве параметра анимации. Это анимация, используемая, когда персонаж стоит неподвижно.

Когда условие ложно, что означает, что Игрок не на земле, вызовите функцию, передавая "p-fall". Это анимация, используемая, когда персонаж находится в воздухе.

В обоих случаях используйте 0.1 в качестве значения Плавность. Это дает анимации небольшое время перехода, делая изменение более плавным, вместо резкого перехода от одной анимации к другой.

image.png

Теперь нам нужно только вызвать событие Обновить Анимации внутри потока события Двигать Игрока.

Таким образом, каждый раз, когда логика движения Игрока обновляется, также будет обновляться логика анимации.

С этим, Игрок уже сможет переключаться между p-idle и p-fall в зависимости от своего текущего состояния. Когда Игрок на земле, он будет воспроизводить анимацию покоя. Когда Игрок в воздухе, он будет воспроизводить анимацию падения.

image.png

Отлично. Теперь давайте продолжим развивать логику анимации Игрока, добавляя анимации движения.

Для этого возьмите Направление Ходьбы и используйте узел Длина, чтобы измерить интенсивность вектора движения.

Длина вектора движения говорит нам, движется ли персонаж или нет.

Затем добавьте узел Если, чтобы проверить, если это значение больше 0.

Если результат Истина, это значит, что персонаж движется, и поэтому мы можем воспроизвести анимацию ходьбы p-walk.

Если результат Ложь, это значит, что персонаж не движется, и поэтому мы должны воспроизводить анимацию покоя p-idle.

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

image.png

image.png

Теперь есть два дополнительных нюанса, чтобы завершить поведение анимации движения нашего персонажа:

Во-первых, нам нужно воспроизводить анимацию бега, когда Игрок бегает.

Во-вторых, мы должны сделать так, чтобы Игрок смотрел в сторону, в которую он движется.

Чтобы управлять анимациями ходьбы и бега, добавьте узел Последовательность сразу после проверки, которая определяет, движется ли Игрок.

Затем получите свойство Бегет и используйте узел Если, чтобы проверить его значение.

Если Бегет истинно, воспроизведите анимацию бега.

Если Бегет ложно, воспроизведите анимацию ходьбы.

Таким образом, Игрок будет знать не только, движется он или стоит на месте, но и должен ли он использовать анимацию ходьбы или бега при движении.

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

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

image.png

Нам нужно умножить значение Получить Направление Ходьбы на -1 перед отправкой его в Смотреть Плавно.

Это инвертирует вектор направления и исправляет направление, в котором мешок персонажа смотрит. В зависимости от того, как модель персонажа была импортирована или ориентирована, визуальная сетка может смотреть в противоположном направлении от вектора движения. Умножение на -1 исправляет это и заставляет персонажа смотреть в правильном направлении во время движения.

image.png

После этого подключите уже умноженное направление к узлу Смотреть Плавно.

Кроме того, нам также нужно предоставить Трансформацию объекта, который будет поворачиваться.

Для этого получите доступ к Сущности, затем получите Сетку Игрока и используйте узел Получить Трансформацию.

Эта трансформация должна быть подключена к Смотреть Плавно, чтобы убедиться, что поворот применяется к правильному объекту, который является видимой сеткой персонажа.

image.png

На данный момент, логика анимации Игрока уже значительно более завершена.

Персонаж теперь может переключаться между анимациями покоя, падения, ходьбы и бега на основе своего текущего состояния. Он также плавно поворачивается лицом к направлению движения, что делает контроллер более естественным и визуально связанным с игровой логикой.