Компонент Animation и Anim: воспроизведение, состояния

В PlayCanvas компонент Animation служит для добавления и управления анимациями объектов в 3D-пространстве. Анимации могут быть использованы для изменения различных свойств объекта, таких как его позиция, ориентация или масштаб, а также для более сложных действий, включая анимацию материала или камеры. Важным элементом управления анимацией является объект Anim, который предоставляет интерфейс для управления состояниями анимации, её воспроизведением и параметрами.

Структура компонента Animation

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

Основные свойства компонента Animation:

  • assets – коллекция активных анимаций, доступных в текущем объекте.
  • speed – скорость воспроизведения анимации.
  • loop – флаг, определяющий, должна ли анимация зацикливаться.
  • playing – флаг, указывающий, воспроизводится ли анимация в данный момент.

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

Создание анимации

Для создания анимации в PlayCanvas необходимо использовать assets – ресурсы, которые содержат данные об анимации. Анимацию можно загрузить с помощью редактора или программно с использованием API.

Пример загрузки анимации:

const animAsset = new pc.Asset('runAnim', 'animation', {
    url: 'path/to/animation.fbx'
});
app.assets.add(animAsset);
animAsset.ready(function () {
    const animation = animAsset.resource;
    entity.animation.play('run', 1);
});

В этом примере создаётся объект анимации на основе файла FBX, который добавляется в ресурсы проекта. После этого анимация проигрывается на сущности.

Воспроизведение анимации

Для воспроизведения анимации на сущности используется метод play компонента Animation. Он принимает имя анимации и её скорость, которая может быть положительной или отрицательной (для воспроизведения анимации в обратном направлении).

entity.animation.play('run', 1); // воспроизведение анимации "run" с нормальной скоростью
entity.animation.play('jump', -1); // воспроизведение анимации "jump" в обратном направлении

Метод play запускает анимацию на объекте, и она будет продолжаться до тех пор, пока не завершится или не будет остановлена вручную. Для остановки анимации используется метод stop.

entity.animation.stop('run'); // остановка анимации "run"

Состояния анимации

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

Анимации могут быть зациклены (с опцией loop), что позволяет анимации повторяться до тех пор, пока не будет изменено её состояние. Это полезно для анимаций, которые требуют повторного воспроизведения, например, для анимаций персонажей или объектов, которые выполняют одну и ту же задачу на протяжении долгого времени.

Пример управления зацикленной анимацией:

entity.animation.play('walk', 1);
entity.animation.loop = true; // зацикливание анимации

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

entity.animation.blend('run', 1, 0.2); // плавный переход к анимации "run" за 0.2 секунды

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

Обработчики событий

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

Использование обработчика для завершения анимации:

entity.animation.on('play', function (name) {
    console.log(name + ' started');
});

entity.animation.on('stop', function (name) {
    console.log(name + ' stopped');
});

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

Управление скоростью анимации

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

Пример изменения скорости:

entity.animation.speed = 2; // удвоение скорости

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

Прекращение и переключение анимаций

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

Метод play может быть использован для мгновенного переключения на новую анимацию:

entity.animation.play('run', 1);  // замена текущей анимации на "run"

Метод blend позволяет создать плавный переход между текущей и новой анимацией:

entity.animation.blend('walk', 1, 0.3); // плавный переход с текущей анимации на "walk"

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

Применение анимации к нескольким объектам

С помощью компонента Animation можно анимировать несколько объектов одновременно. Для этого необходимо настроить различные анимации на разных сущностях и синхронизировать их воспроизведение. Пример:

const entity1 = new pc.Entity();
const entity2 = new pc.Entity();
entity1.addComponent('animation');
entity2.addComponent('animation');

// Воспроизведение одинаковой анимации на обоих объектах
entity1.animation.play('run', 1);
entity2.animation.play('run', 1);

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

Использование данных с ключевыми кадрами

PlayCanvas поддерживает работу с анимациями, основанными на ключевых кадрах, что позволяет создавать сложные анимации для объектов. Ключевые кадры определяют изменения состояния объекта в разные моменты времени. Анимации с ключевыми кадрами позволяют значительно повысить уровень детализации и реализма анимации.

Для работы с ключевыми кадрами важно иметь файл анимации в формате, который поддерживает такие данные (например, FBX или GLTF). PlayCanvas автоматически интерполирует между ключевыми кадрами, создавая плавные изменения.

Заключение

Компонент Animation в PlayCanvas представляет собой мощный инструмент для управления анимациями в 3D-пространстве. С его помощью можно легко добавлять анимации к объектам, контролировать их воспроизведение, плавно переходить между состояниями и управлять скоростью воспроизведения. В сочетании с объектом Anim, PlayCanvas предлагает гибкие механизмы для реализации сложных анимационных сценариев в играх и интерактивных приложениях.