PlayCanvas предоставляет мощные инструменты для создания
интерактивных 3D-игр и приложений, а компонент Script
играет ключевую роль в реализации пользовательской логики. Этот
компонент позволяет добавлять скрипты на объекты сцены, что открывает
широкие возможности для управления поведением объектов, взаимодействия с
пользователем и обработки различных событий.
Чтобы добавить компонент Script к объекту, необходимо
выполнить несколько простых шагов. Обычно для этого используется
интерфейс редактора PlayCanvas, но можно сделать это и через код.
В редакторе PlayCanvas достаточно просто выбрать объект на сцене и добавить к нему компонент Script. Для этого:
Можно добавить компонент Script и программно, используя
API PlayCanvas. Например, следующий код добавляет компонент к
объекту:
var entity = new pc.Entity();
entity.addComponent('script');
После добавления компонента можно подключать скрипты к объекту, указав нужные файлы JavaScript.
Для того чтобы скрипт стал активным, необходимо создать его с
использованием API PlayCanvas. Скрипты должны быть написаны в отдельных
файлах и подключены к объектам. В PlayCanvas все скрипты организуются в
виде классов, которые наследуют от базового класса
pc.ScriptType.
Простой скрипт для объекта, который будет двигаться по оси X:
var MoveScript = pc.createScript('moveScript');
// Инициализация
MoveScript.prototype.initialize = function() {
this.speed = 5; // скорость движения
};
// Обновление
MoveScript.prototype.update = function(dt) {
this.entity.translateLocal(this.speed * dt, 0, 0);
};
В этом примере скрипт будет двигать объект вдоль оси X с заданной
скоростью. Метод initialize выполняется один раз при
запуске скрипта, а метод update вызывается каждый кадр и
отвечает за перемещение объекта.
Для создания событий в скрипте PlayCanvas предоставляет механизмы для
подписки на события или их генерации. Для этого используются методы,
такие как fire, on и off.
Пример:
var CustomEventScript = pc.createScript('customEventScript');
// Инициализация
CustomEventScript.prototype.initialize = function() {
this.app.on('custom:event', this.onCustomEvent, this);
};
// Обработчик события
CustomEventScript.prototype.onCustomEv ent = function() {
console.log('Событие получено!');
};
В этом примере скрипт подписывается на пользовательское событие
custom:event, и когда оно возникает, вызывается метод
onCustomEvent.
Скрипты PlayCanvas могут содержать параметры, которые можно настраивать непосредственно в редакторе. Эти параметры могут быть различных типов, включая числа, строки, булевы значения и ссылки на другие объекты.
var ScaleScript = pc.createScript('scaleScript');
// Параметр для масштаба
ScaleScript.attributes.add('scaleFactor', {
type: 'number',
default: 1,
title: 'Множитель масштаба'
});
// Инициализация
ScaleScript.prototype.initialize = function() {
// Применяем параметр масштаба
this.entity.setLocalScale(this.scaleFactor, this.scaleFactor, this.scaleFactor);
};
В этом примере параметр scaleFactor можно настроить в
редакторе, и он будет использоваться для изменения масштаба объекта. Это
позволяет создавать гибкие и динамичные скрипты.
PlayCanvas поддерживает структуру модульных скриптов, что позволяет разделить логику приложения на несколько частей и работать с ними независимо. Скрипты могут быть подключены к различным сущностям сцены, что упрощает организацию кода и делает проект более гибким.
Скрипты могут взаимодействовать друг с другом. Например, можно создать один скрипт для обработки движения, а другой для столкновений:
// Скрипт движения
var MoveScript = pc.createScript('moveScript');
MoveScript.prototype.initialize = function() {
this.speed = 5;
};
MoveScript.prototype.update = function(dt) {
this.entity.translateLocal(this.speed * dt, 0, 0);
};
// Скрипт столкновений
var CollisionScript = pc.createScript('collisionScript');
CollisionScript.prototype.initialize = function() {
this.entity.collision.on('triggerenter', this.onTriggerEnter, this);
};
CollisionScript.prototype.onTriggerEn ter = function(other) {
console.log('Объект столкнулся с чем-то!');
};
Каждый скрипт выполняет свою функцию, и таким образом легче управлять разными аспектами поведения объекта.
Важной особенностью компонента Script является
возможность взаимодействия с другими компонентами объекта. Это позволяет
использовать другие функции PlayCanvas, такие как анимация, физика и
рендеринг, в рамках одного скрипта.
var PhysicsScript = pc.createScript('physicsScript');
// Инициализация
PhysicsScript.prototype.initialize = function() {
this.rigidbody = this.entity.rigidbody;
this.rigidbody.applyForce(0, 10, 0); // Применяем силу вверх
};
В данном примере скрипт взаимодействует с компонентом физики
RigidBody, чтобы применить силу к объекту, заставляя его
двигаться.
PlayCanvas предоставляет удобные инструменты для отладки и
тестирования скриптов. В редакторе есть возможность запускать игру в
реальном времени и наблюдать, как работают скрипты. Логирование
сообщений можно выполнять с помощью консольных функций
console.log, что позволяет отслеживать состояние объекта
или любые другие данные во время исполнения скрипта.
Для более сложных ситуаций PlayCanvas поддерживает систему “breakpoints” в браузерных инструментах разработчика, что позволяет ставить точки останова и анализировать поведение скриптов в момент их выполнения.
PlayCanvas позволяет подключать внешние JavaScript-библиотеки, которые могут быть использованы для расширения функционала скриптов. Для этого достаточно загрузить сторонний скрипт через редактор или подключить его напрямую с помощью команды:
this.app.assets.loadFromUrl('path/to/library.js', 'script', function(asset) {
var libraryScript = asset.resource;
// Используйте библиотеку в вашем коде
});
Таким образом, в проект можно интегрировать сторонние решения для обработки данных, сетевых запросов, графики и других задач.
Иногда необходимо взаимодействовать с другими компонентами, которые прикреплены к объектам в сцене. PlayCanvas предоставляет методы для поиска объектов по имени или тегам, что позволяет динамически подключать их к скрипту.
Пример поиска объекта по имени:
var TargetScript = pc.createScript('targetScript');
TargetScript.prototype.initialize = function() {
this.targetEntity = this.app.root.findByName('TargetObject');
this.targetEntity.translateLocal(10, 0, 0);
};
Этот код находит объект с именем TargetObject и
перемещает его.
Компонент Script в PlayCanvas является мощным
инструментом для разработки логики и поведения объектов в
3D-пространстве. Гибкость API, возможность создания модульных скриптов и
интеграции с другими компонентами позволяют разработчику создавать
динамичные и интерактивные игры и приложения. Важно понимать, как
эффективно организовать код, использовать параметры, а также
взаимодействовать с другими частями системы для создания качественного
продукта.