Регистрация скрипта: pc.createScript

Библиотека PlayCanvas позволяет разработчикам создавать динамичные 3D и 2D игры, а также визуализации прямо в браузере с использованием JavaScript. Одной из ключевых концепций PlayCanvas является система компонентов и скриптов, которая позволяет разработчику контролировать поведение объектов в игре. Для создания пользовательского поведения объектов используется механизм скриптов.

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

Синтаксис

var MyScript = pc.createScript('myScriptName');

Метод pc.createScript принимает в качестве параметра строку — уникальное имя скрипта, которое будет использовано в коде для его ссылки. Возвращаемое значение — это конструкция класса, который будет использоваться для создания экземпляров скрипта.

Структура скрипта

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

Пример простого скрипта:

var MyScript = pc.createScript('myScript');

// Этот метод вызывается при инициализации скрипта
MyScript.prototype.initialize = function() {
    console.log('Скрипт инициализирован!');
};

// Этот метод вызывается на каждом кадре
MyScript.prototype.update = function(dt) {
    console.log('Кадр обновлён!');
};

Важные методы жизненного цикла

Система скриптов в PlayCanvas предоставляет несколько методов жизненного цикла, которые могут быть переопределены для реализации необходимой логики. Основные из них:

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

    MyScript.prototype.initialize = function() {
        this.entity.script.someOtherScript.initialize();
    };
  2. update Этот метод вызывается на каждом кадре. Он предоставляет параметр dt, который является временем, прошедшим с последнего кадра. Здесь обычно происходит логика, которая должна обновляться каждую секунду, например, движение или анимация.

    MyScript.prototype.update = function(dt) {
        this.entity.translate(0, 0, dt * 10);
    };
  3. postUpdate Этот метод вызывается после выполнения всех обновлений для объектов сцены. Он полезен для логики, которая должна происходить после того, как обновлены все другие компоненты объекта.

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

    MyScript.prototype.destroy = function() {
        this.entity.removeAllListeners();
    };

Создание и использование скриптов

После регистрации скрипта через pc.createScript, его необходимо прикрепить к сущности (entity) для того, чтобы он мог быть выполнен в контексте сцены. Скрипты могут быть добавлены непосредственно через редактор PlayCanvas, либо динамически через код.

Чтобы добавить скрипт к объекту через код, используйте следующий синтаксис:

var entity = new pc.Entity();
entity.addComponent('script');
entity.script.create('myScript');

Этот код создаёт объект entity, добавляет ему компонент script и регистрирует созданный скрипт в системе компонентов PlayCanvas.

Свойства скриптов

Каждый скрипт, зарегистрированный с помощью pc.createScript, имеет несколько полезных свойств и методов, которые позволяют интегрировать его с остальной частью системы:

  1. this.entity Ссылается на сущность, к которой прикреплён данный скрипт. Это основной способ доступа к объектам и компонентам сцены.

    MyScript.prototype.initialize = function() {
        this.entity.name = 'MyCustomEntity';
    };
  2. this.app Ссылается на экземпляр приложения PlayCanvas, через который можно взаимодействовать с глобальными аспектами, такими как сцена, камеры или события.

    MyScript.prototype.initialize = function() {
        this.app.fire('custom:event');
    };
  3. this.enabled Контролирует активность скрипта. Если свойство enabled установлено в false, скрипт перестанет выполняться.

    MyScript.prototype.update = function(dt) {
        if (!this.enabled) return;
        // Логика обновления
    };

Добавление пользовательских методов и свойств

Вы можете создавать свои собственные методы и свойства внутри скрипта, чтобы упростить его использование и сделать код более структурированным. Например:

var MyScript = pc.createScript('myScript');

// Метод для настройки цвета
MyScript.prototype.setColor = function(color) {
    this.entity.model.material.diffuse = color;
};

// Инициализация
MyScript.prototype.initialize = function() {
    this.setColor(new pc.Color(1, 0, 0));  // Устанавливаем красный цвет
};

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

Для настройки параметров скриптов, которые могут быть изменены в редакторе PlayCanvas, используется механизм экспорта свойств. Это позволяет задавать значения переменных на уровне редактора, без необходимости изменения исходного кода. Например:

var MyScript = pc.createScript('myScript');

// Экспортируем свойство
MyScript.attributes.add('speed', { type: 'number', default: 10 });

// Используем свойство в логике
MyScript.prototype.update = function(dt) {
    this.entity.translate(0, 0, this.speed * dt);
};

Теперь в редакторе PlayCanvas можно будет изменять значение speed для каждого объекта, к которому прикреплён этот скрипт.

Регистрирование глобальных событий

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

Пример отправки события:

MyScript.prototype.initialize = function() {
    this.app.fire('myEvent');
};

Пример прослушивания события:

MyScript.prototype.initialize = function() {
    this.app.on('myEvent', function() {
        console.log('Событие получено');
    });
};

Инициализация и отладка

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


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