Tweening в PlayCanvas — это механизм анимации, который позволяет плавно изменять значения свойств объектов во времени. Используя Tweening, можно создавать анимации без необходимости вручную прописывать все ключевые кадры, а также применять динамические эффекты для объектов сцены. В этой главе рассматриваются основы создания и использования tween-анимаций в PlayCanvas.
Tweening в PlayCanvas основан на интерполяции, где значения свойств объекта постепенно изменяются от начального состояния к конечному. Для этого используется линейная или более сложная интерполяция, поддерживающая различные функции easing (ускорения) для достижения более естественного движения.
Для создания tween-анимции необходимо использовать класс
pc.Tween. Этот класс позволяет легко создавать и
контролировать анимации, которые могут изменять значения различных
свойств объекта, таких как позиция, вращение, масштаб и другие.
Для создания tween-анимции необходимо выполнить несколько шагов:
Получение объекта: Прежде чем анимировать какой-либо объект, необходимо получить ссылку на его экземпляр в коде.
Создание Tween: Для создания анимации
используется метод pc.Entity.tween(), который позволяет
анимировать любые свойства объекта. Важно указать начальные и конечные
значения для каждой анимации.
Настройка параметров: В PlayCanvas можно настроить такие параметры, как продолжительность анимации, тип easing, задержка перед началом анимации и другие.
Пример кода для анимации перемещения объекта по оси X:
var entity = this.entity;
entity.tween(entity.getLocalPosition())
.to({x: 10}, 2, pc.EaseInOutQuad)
.start();
Этот код создает анимацию, которая изменяет положение объекта по оси
X с текущего значения до 10 за 2 секунды, используя функцию easing
EaseInOutQuad для плавного начала и завершения
движения.
Одним из важнейших аспектов tween-анимаций является использование функций easing. Они определяют, как именно будет изменяться скорость анимации в процессе её выполнения. PlayCanvas поддерживает множество стандартных функций easing, среди которых:
pc.EaseLinear — линейное изменение, без ускорений.pc.EaseInQuad — плавное ускорение в начале
анимации.pc.EaseOutQuad — плавное замедление в конце
анимации.pc.EaseInOutQuad — комбинация ускорения в начале и
замедления в конце.pc.EaseInElastic — эффект растягивания, создающий
ощущение упругости.Выбор правильной функции easing зависит от желаемого визуального
эффекта. Например, для анимации движения объекта, где требуется плавное
начало и завершение, лучше использовать EaseInOutQuad.
Пример использования easing-функции:
entity.tween(entity.getLocalPosition())
.to({x: 10}, 2, pc.EaseInOutQuad)
.start();
PlayCanvas предоставляет гибкие возможности для управления временем анимаций. Важно учитывать несколько ключевых аспектов:
Продолжительность (duration):
Определяет, сколько времени будет длиться анимация. Этот параметр
принимает значение в секундах.
Задержка (delay): Указывает,
сколько времени нужно подождать до начала анимации. Например, если нужно
создать паузу перед началом анимации, можно установить задержку:
entity.tween(entity.getLocalPosition())
.to({x: 10}, 2, pc.EaseInOutQuad, 1) // 1 секунда задержки
.start();Повторение (repeat): Для создания
цикличных анимаций можно указать параметр повторения. С помощью
repeat можно задать количество повторений анимации или
использовать бесконечный цикл.
entity.tween(entity.getLocalPosition())
.to({x: 10}, 2, pc.EaseInOutQuad)
.repeat(5) // Повторить анимацию 5 раз
.start();Завершение (onComplete): Для того
чтобы выполнить действия после завершения анимации, можно использовать
колбэк-функцию, переданную в параметр onComplete. Это
позволяет запускать дополнительные анимации или события.
entity.tween(entity.getLocalPosition())
.to({x: 10}, 2, pc.EaseInOutQuad)
.onComplete(function() {
console.log('Анимация завершена!');
})
.start();Кроме изменения позиции объекта, PlayCanvas позволяет анимировать другие его свойства, такие как вращение и масштаб. Пример анимации вращения:
entity.tween(entity.getLocalRotation())
.to({x: Math.PI, y: Math.PI}, 2, pc.EaseInOutQuad)
.start();
Здесь анимация изменяет углы поворота объекта по осям X и Y до
значения Math.PI (180 градусов) за 2 секунды.
Для анимации масштаба можно использовать аналогичный подход:
entity.tween(entity.getLocalScale())
.to({x: 2, y: 2, z: 2}, 2, pc.EaseInOutQuad)
.start();
В некоторых случаях необходимо прервать текущую анимацию и применить
новые значения. Для этого в PlayCanvas предусмотрены методы для
остановки анимаций. Метод stop() прерывает выполнение
анимации, и объект сразу же возвращается к начальным значениям.
var tween = entity.tween(entity.getLocalPosition())
.to({x: 10}, 2, pc.EaseInOutQuad)
.start();
tween.stop();
Кроме того, можно отменить анимацию и создать новую с другими параметрами.
Для более сложных сцен, где требуется анимировать несколько объектов или свойства одновременно, PlayCanvas предоставляет возможность группировать анимации. Это позволяет контролировать набор анимаций как единое целое.
var tween1 = entity1.tween(entity1.getLocalPosition())
.to({x: 10}, 2, pc.EaseInOutQuad);
var tween2 = entity2.tween(entity2.getLocalRotation())
.to({y: Math.PI}, 2, pc.EaseInOutQuad);
tween1.start();
tween2.start();
Кроме стандартных функций easing, PlayCanvas позволяет создавать и использовать пользовательские функции для изменения интерполяции. Для этого достаточно передать функцию, которая будет описывать логику изменения значений.
Пример:
var customEasing = function(t) {
return Math.pow(t, 3);
};
entity.tween(entity.getLocalPosition())
.to({x: 10}, 2, customEasing)
.start();
Это позволяет создавать уникальные анимации, которые точно соответствуют требованиям проекта.
Tweening в PlayCanvas представляет собой мощный инструмент для создания плавных и динамичных анимаций. С помощью tween-анимиций можно легко управлять движением, вращением, масштабом и другими свойствами объектов, применяя различные типы easing и контролируя время выполнения анимаций. Эти возможности позволяют создавать качественные визуальные эффекты, улучшая взаимодействие пользователя с 3D-сценами.