Программное управление параметрами графа

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

Граф компонентов и его параметры

В PlayCanvas компоненты объектов сцены могут быть взаимосвязаны и образовывать сложные структуры. Каждый компонент может иметь набор параметров, которые управляют его поведением или внешним видом. Например, компонент материала может иметь параметры цвета, прозрачности или текстуры, а анимационный компонент — параметры времени, скорости или путей движения.

Работа с параметрами в коде

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

var entity = new pc.Entity();
entity.addComponent('model', {
    type: 'box'
});
entity.addComponent('material', {
    color: new pc.Color(1, 0, 0)  // Инициализация параметра цвета материала
});

// Изменение цвета материала во время выполнения
entity.material.color = new pc.Color(0, 1, 0);  // Зеленый цвет

Здесь создается объект, который имеет компонент модели и компонент материала. Цвет материала изначально установлен на красный, но в процессе выполнения он изменяется на зеленый.

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

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

Для реализации анимации часто используются “keyframes” — ключевые кадры, в которых фиксируются значения параметров в определенные моменты времени. Рассмотрим пример использования анимации для изменения позиции объекта:

var animation = new pc.AnimationComponent();
animation.addClip(new pc.AnimationClip('move', 2, [
    new pc.Keyframe(0, new pc.Vec3(0, 0, 0)),    // В начальный момент
    new pc.Keyframe(1, new pc.Vec3(0, 5, 0)),    // На 1-й секунде
    new pc.Keyframe(2, new pc.Vec3(0, 10, 0))    // На 2-й секунде
]));

// Применение анимации к объекту
entity.addComponent('animation', { clips: [animation] });

В этом примере анимация перемещает объект от его начальной позиции до 10 единиц по оси Y за два секунды.

Реакция на события и изменение параметров

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

Пример использования события для изменения параметров объекта:

this.app.mouse.on(pc.EVENT_MOUSEDOWN, function (event) {
    entity.material.color = new pc.Color(Math.random(), Math.random(), Math.random());  // Смена цвета при клике
});

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

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

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

Пример скрипта, который изменяет параметры анимации:

var ChangeSpeed = pc.createScript('changeSpeed');

// Инициализация
ChangeSpeed.prototype.initialize = function () {
    this.speed = 1;
    this.time = 0;
};

// Обновление скорости анимации
ChangeSpeed.prototype.update = function (dt) {
    this.time += dt;
    if (this.time > 2) {
        this.speed *= 1.1;  // Увеличение скорости каждый 2 секунды
        this.entity.animation.speed = this.speed;
        this.time = 0;
    }
};

В этом примере скрипт увеличивает скорость анимации объекта каждые 2 секунды.

Параметры физики

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

Пример создания физического объекта и изменения его параметров:

var physicsEntity = new pc.Entity();
physicsEntity.addComponent('rigidbody', {
    type: 'dynamic',
    mass: 1  // Масса объекта
});
physicsEntity.addComponent('collision', {
    type: 'box',
    halfExtents: new pc.Vec3(1, 1, 1)
});

// Изменение массы объекта
physicsEntity.rigidbody.mass = 2;

Здесь объект создается с компонентами физики и столкновений, а затем масса объекта изменяется программно.

Использование параметров материалов и текстур

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

Пример изменения текстуры материала:

var textureAsset = this.app.assets.find('myTexture', 'texture');  // Поиск текстуры в ассетах
entity.material.diffuseMap = textureAsset.resource;  // Изменение текстуры

Этот код заменяет текстуру объекта на новую, найденную в ассетах PlayCanvas.

Заключение

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