В Babylon.js AnimationGroup представляет собой объект, который позволяет управлять и синхронизировать несколько анимаций одновременно. Это позволяет легко анимировать различные объекты сцены синхронно или с определённым интервалом, что упрощает создание сложных анимационных последовательностей.
AnimationGroup является контейнером для анимаций. Он может включать несколько анимаций, каждая из которых может быть привязана к различным объектам сцены. Важно, что все анимации внутри группы могут быть синхронизированы по времени, что позволяет их запускать и останавливать одновременно, а также изменять скорость воспроизведения.
Ключевые возможности:
speedRatio.Для создания и использования AnimationGroup необходимо сначала создать анимации и добавить их в группу. Пример простого создания группы:
// Создание сцены и объектов для анимации
let sphere = BABYLON.MeshBuilder.CreateSphere("sphere", { diameter: 1 }, scene);
let box = BABYLON.MeshBuilder.CreateBox("box", { size: 1 }, scene);
// Создание анимации для сферы
let sphereAnimation = new BABYLON.Animation(
"sphereAnimation",
"position.x",
30,
BABYLON.Animation.ANIMATIONTYPE_FLOAT,
BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE
);
// Ключевые кадры для анимации сферы
let keys = [
{ frame: 0, value: 0 },
{ frame: 100, value: 10 },
{ frame: 200, value: 0 }
];
sphereAnimation.setKeys(keys);
// Создание анимации для коробки
let boxAnimation = new BABYLON.Animation(
"boxAnimation",
"position.y",
30,
BABYLON.Animation.ANIMATIONTYPE_FLOAT,
BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE
);
let boxKeys = [
{ frame: 0, value: 0 },
{ frame: 100, value: 5 },
{ frame: 200, value: 0 }
];
boxAnimation.setKeys(boxKeys);
// Создание AnimationGroup
let group = new BABYLON.AnimationGroup("group");
// Добавление анимаций в группу
group.addAnimation(sphereAnimation);
group.addAnimation(boxAnimation);
// Запуск анимации
group.start(true);
В этом примере создаются две анимации для разных объектов — сферы и коробки. Затем эти анимации добавляются в одну группу, которая управляет их синхронным запуском.
SpeedRatio и start()
Параметр speedRatio позволяет управлять скоростью
воспроизведения всех анимаций внутри группы. Установка значения
speedRatio на 1.0 соответствует нормальной скорости,
значение меньше 1 замедляет анимацию, а значение больше 1 —
ускоряет.
group.speedRatio = 2; // Ускоряет воспроизведение анимаций в два раза
Метод start() используется для запуска анимации. Если
передан параметр true, то анимация будет повторяться по
циклу.
group.start(true); // Запуск анимации с повторением
Pause() и Resume()
Методы pause() и resume() позволяют
управлять состоянием анимации. Они могут быть полезны, если требуется
приостановить анимацию на определённом моменте и затем возобновить
её.
group.pause(); // Приостанавливает все анимации в группе
group.resume(); // Возобновляет воспроизведение всех анимаций в группе
Stop()
Метод stop() полностью останавливает анимации, сбрасывая
их на начальные позиции.
group.stop(); // Останавливает все анимации в группе
AnimationGroup позволяет не только синхронизировать несколько анимаций, но и задавать различия в их поведении. Например, можно задать, чтобы одна анимация начиналась позже другой, создавая тем самым эффект последовательности. Это делается через установку времени начала анимации для каждой из анимаций внутри группы.
// Установка времени начала анимации для объектов
sphereAnimation.startFrame = 0;
boxAnimation.startFrame = 50; // Коробка начнёт анимацию через 50 кадров
Кроме того, возможно использовать анимационные переходы для создания плавных переходов между состояниями объектов. Это достигается путём плавного изменения ключевых кадров в анимациях.
Метод onAnimationGroupEnd позволяет задать действия,
которые должны выполняться после завершения всех анимаций в группе. Это
полезно для запуска каких-либо действий, например, для перехода на
другую сцену или изменения состояния игры.
group.onAnimationGroup End = function () {
console.log("Все анимации завершены!");
};
AnimationGroup значительно упрощает управление множеством анимаций в сцене. Это может быть полезно в играх или визуализациях, где требуется синхронизировать движения объектов, их изменение по времени или создание комплексных анимационных сцен. С помощью этой группы можно управлять даже сложными анимационными последовательностями, не теряя контроля над отдельными компонентами.
Пример использования AnimationGroup в игре: анимация персонажа может включать несколько компонентов — движение, повороты, анимацию оружия, изменения выражений лица. Все эти анимации могут быть синхронизированы и управляться одним объектом, что облегчает процесс разработки и улучшает производительность.