User Manual

Атрибуты Скриптов

Атрибуты скриптов - это мощная функция, которая позволяет вам выставлять значения из ваших файлов скриптов, чтобы они отображались в редакторе PlayCanvas. Это означает, что вы можете написать код один раз, а затем настраивать значения на разных экземплярах Entity, чтобы дать им разные свойства. Это идеально подходит для выставления свойств для художников, дизайнеров или других участников команды, не являющихся программистами, чтобы они могли настраивать и изменять значения без написания кода.

Объявление атрибутов скриптов

Атрибуты скриптов объявляются в верхней части файла скрипта, используя этот формат:

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

MyScript.attributes.add('speed', {
    type: 'number',
    default: 80
});

В этом примере мы объявляем свойство с именем speed, которое является number и имеет значение по умолчанию 80:

Если вам нужен массив атрибутов, установите array: true следующим образом:

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

MyScript.attributes.add('names', {
    type: 'string',
    array: true
});

Получение атрибутов в редактор

После объявления ваших атрибутов редактору необходимо проанализировать код, чтобы выделить атрибуты скрипта. Если атрибуты были изменены, вам нужно вручную обновить атрибуты, нажав кнопку анализа .

Доступ к атрибутам в вашем коде

Когда вы объявляете атрибут в своем скрипте, он будет доступен в виде переменной-члена на вашем экземпляре скрипта. Например, свойство speed, объявленное выше, доступно как this.speed.

MyScript.prototype.update = function (dt) {
    this.entity.translate(this.speed * dt, 0, 0);
}

МойСкрипт.prototype.update = функция (dt) { this.Entity.translate(this.speed * dt, 0, 0); }

Обновление атрибутов

Когда вы изменяете атрибут в редакторе, изменения отправляются на все копии приложения, запущенные из редактора. Это означает, что вы можете редактировать атрибуты в режиме реального времени без перезагрузки вашего приложения. Если вам нужно применить специальное поведение при изменении атрибута. Используйте события attr и attr:[name] для реагирования на изменения.

MyScript.prototype.initialize = function () { // запускается только для атрибута speed this.on('attr:speed', function (value, prev) { // новое значение для скорости });

// запускается для всех изменений атрибутов
this.on('attr', function(name, value, prev) {
    // новое значение атрибута
});

}

Типы атрибутов

Когда вы объявляете атрибут, вы также объявляете тип атрибута. Это позволяет редактору показывать соответствующие элементы управления для редактирования атрибута. Большинство типов являются очевидными, например, 'boolean', 'number' или 'string'. Но некоторые требуют дополнительного объяснения в приведенных ниже примерах. Подробнее см. полную справку по атрибутам.

Атрибут Entity

MyScript.attributes.add('target', { type: 'entity' })

Тип Entity позволяет ссылаться на другую сущность в вашей иерархии. Отличный способ связать две сущности вместе.

Атрибут Asset

MyScript.attributes.add('textures', { type: 'asset', assetType: 'texture', array: true });

Атрибут Asset позволяет вам ссылаться на ассет проекта в вашем скрипте. Атрибут ассета также поддерживает свойство assetType, которое ограничивает атрибут ассетами определенного типа, например, 'texture', 'material', 'model'.

Тип выполнения атрибута Asset - это pc.Asset. Вы можете ссылаться на ресурс атрибута Asset во время выполнения следующим образом:

MyScript.attributes.add('texture', {type: 'asset', assetType: 'texture'});

MyScript.prototype.initialize = function () {
    console.log('Это текстурный ассет', this.texture);
    console.log('Это текстурный ресурс', this.texture.resource);
};

Атрибут цвета

MyScript.attributes.add('color', { type: 'rgba' });

Цветовой атрибут отображает выбор цвета при открытии в редакторе. Есть два варианта rgb и rgba, в зависимости от того, хотите ли вы открыть канал альфа также.

Атрибут кривой

MyScript.attributes.add('wave', { type: 'curve' }); // одна кривая
MyScript.attributes.add('wave', { type: 'curve', curves: [ 'x', 'y', 'z' ] }); // три кривые: x, y, z
MyScript.attributes.add('wave', { type: 'curve', color: 'r' }); // одна кривая для красного канала
MyScript.attributes.add('wave', { type: 'curve', color: 'rgba' }); // четыре кривые для полного цвета, включая альфа

Атрибут кривой используется для выражения значения, которое изменяется в течение определенного временного периода. Все кривые определены в интервале от 0,0 до 1,0. Вы можете определить несколько кривых, например, если вы хотите получить 3D-позицию из кривой, определите три кривые для x, y, z с использованием свойства curves. Также существует специальный редактор кривых для изменения цветов с использованием свойства color.

Атрибут перечисления

Атрибут перечисления позволяет выбрать один из доступных вариантов:

MyScript.attributes.add('value', {
    type: 'number',
    enum: [
        { 'valueOne': 1 },
        { 'valueTwo': 2 },
        { 'valueThree': 3 }
    ]
});

Используйте свойство enum для объявления списка возможных значений для вашего перечисления. Свойство представляет собой массив объектов, где каждый объект является вариантом, где key - это заголовок варианта, а value - значение для атрибута. Это свойство может использоваться для различных типов атрибутов, например, number, string, vec3.

JSON атрибут

Атрибут JSON позволяет создавать вложенные атрибуты других типов атрибутов. Для каждого атрибута JSON вы должны указать схему для описания его свойств. Схема содержит другие обычные определения атрибутов сценария, как указано выше. Например:

MyScript.attributes.add('gameConfig', {
    type: 'json',
    schema: [{
        name: 'numEnemies',
        type: 'number',
        default: 10
    }, {
        name: 'enemyModels',
        type: 'asset',
        assetType: 'model',
        array: true
    }, {
        name: 'godMode',
        type: 'boolean',
        default: false
    }]
});

Вы также можете объявлять массивы атрибутов JSON, чтобы создавать массивы редактируемых объектов. Просто добавьте array: true при определении атрибута JSON, как вы делаете это для других типов атрибутов.

Вот пример доступа к указанным выше атрибутам в скрипте:

MyScript.prototype.update = function (dt) {
    if (this.gameConfig.godMode) {
        for (var i = 0; i < this.gameConfig.numEnemies; i++) {
            // ...
        }
    }
};

ПРИМЕЧАНИЕ: В настоящее время мы не поддерживаем определение атрибутов JSON в качестве дочерних элементов других атрибутов JSON. Вы можете определить атрибут JSON только на 1 уровень вложенности.

This site is translated by the community. If you want to get involved visit this page