--- title: Свойства brief: В данном руководстве объясняется, какие типы свойств существуют в Defold, как они используются и анимируются. --- # Свойства Defold предоставляет для игровых объектов, компонентов и GUI-нод свойства, которые можно считывать, устанавливать и анимировать. Существуют следующие типы свойств: * Определенные системой трансформации игровых объектов (положение, вращение и масштаб) и специфические свойства компонентов (например, размер пикселя спрайта или масса объекта столкновения) * Определяемые пользователем скриптовые свойства, задаваемые в Lua-скриптах (подробнее в [руководстве по свойствам скрипта](/manuals/script-properties)) * Свойства GUI-нод * Шейдерные константы, определенные в шейдерах и файлах материалов (подробнее в [руководстве по материалам](/manuals/material)) В зависимости от того, где находится свойство, доступ к нему осуществляется через общую функцию или функцию, специфичную для данного свойства. Многие свойства могут быть автоматически анимированы. Анимация свойств с помощью встроенной системы настоятельно рекомендуется вместо самостоятельного манипулирования свойствами (внутри функции `update()`), как по соображениям производительности, так и ради удобства. Составные свойства типа `vector3`, `vector4` или `quaternion` также раскрывают свои субкомпоненты (`x`, `y`, `z` и `w`). К этим компонентам можно обращаться по отдельности, дополняя имя точкой (`.`) и именем компонента. Например, чтобы установить х-компонент позиции игрового объекта: ```lua -- Установите позицию по x для "game_object" в значение 10. go.set("game_object", "position.x", 10) ``` Функции `go.get()`, `go.set()` и `go.animate()` принимают в качестве первого параметра ссылку, а в качестве второго --- идентификатор свойства. Ссылка идентифицирует игровой объект или компонент и может быть строкой, хэшем или URL. URL-адреса подробно описаны в [руководстве по адрессации](/manuals/addressing). Идентификатор свойства --- это строка или хэш, дающий свойству имя: ```lua -- Установите масштаб по X для спрайта local url = msg.url("#sprite") local prop = hash("scale.x") go.set(url, prop, 2.0) ``` Для GUI-нод идентификатор ноды предоставляется в качестве первого параметра специфичной для свойства функции: ```lua -- Получить цвет кнопки local node = gui.get_node("button") local color = gui.get_color(node) ``` ## Свойства игровых объектов и компонентов Все игровые объекты и некоторые типы компонентов имеют свойства, которые можно считывать и манипулировать ими во время выполнения. Считывать эти значения можно с помощью [`go.get()`](/ref/go#go.get), а записывать --- с помощью [`go.set()`](/ref/go#go.set). В зависимости от типа значения свойства, значения можно анимировать с помощью [`go.animate()`](/ref/go#go.animate). Небольшой набор свойств доступен только для чтения. `get`{.mark} : С помощью [`go.get()`](/ref/go#go.get) можно считывать. `get+set`{.mark} : С помощью [`go.get()`](/ref/go#go.get) можно считывать, записывать --- с помощью [`go.set()`](/ref/go#go.set). Числовые значения можно анимировать с помощью [`go.animate()`](/ref/go#go.animate). ::: sidenote Существуют также легаси-функции для чтения и записи свойств игровых объектов. Это `go.get_position()`, `go.set_position()`, `go.get_rotation()`, `go.set_rotation()` и др. ::: *СВОЙСТВА ИГРОВОГО ОБЪЕКТА* | Свойство | Описание | Тип | | | ---------- | -------------------------------------- | --------------- | ---------------- | | *position* | Локальная позиция игрового объекта | `vector3` | `get+set`{.mark} | | *rotation* | Локальное вращение игрового объекта, выраженное в виде кватерниона | `quaternion` | `get+set`{.mark} | | *euler* | Локальное вращение игрового объекта в углах Эйлера | `vector3` | `get+set`{.mark} | | *scale* | Локальное неоднородное масштабирование игрового объекта, выраженное в виде вектора, каждый компонент которого содержит множитель по каждой оси. Чтобы удвоить размер по осям x и y, предоставьте vmath.vector3(2.0, 2.0, 0) | `vector3` | `get+set`{.mark} | | *scale.xy* | Локальный неравномерный масштаб игрового объекта, выраженный в виде вектора, где каждая компонента содержит множитель вдоль оси X и Y. | vector3 | get+set{.mark} | *СВОЙСТВА КОМПОНЕНТА SPRITE* | свойство | описание | тип | | | ---------- | ------------------------------------------------------------------------ | --------- | ---------------- | | *size* | Немасштабированный размер спрайта — его размер, взятый из исходного атласа. | `vector3` | `get`{.mark} | | *image* | Хэш пути к текстуре спрайта. | `hash` | `get`{.mark} | | *scale* | Неравномерный масштаб спрайта. | `vector3` | `get+set`{.mark} | | *scale.xy* | Неравномерный масштаб спрайта вдоль осей X и Y. | `vector3` | `get+set`{.mark} | | *material* | Материал, используемый спрайтом. | `hash` | `get+set`{.mark} | | *cursor* | Положение (от 0 до 1) курсора воспроизведения. | `number` | `get+set`{.mark} | | *playback_rate* | Частота кадров анимации flipbook. | `number` | `get+set`{.mark} | *СВОЙСТВА КОМПОНЕНТА COLLISION OBJECT* | Свойство | Описание | Тип | | | ---------- | -------------------------------------- | --------------- | ---------------- | | *mass* | Масса объекта столкновения | `number` | `get`{.mark} | | *linear_velocity* | Текущая линейная скорость объекта столкновения | `vector3` | `get`{.mark} | | *angular_velocity* | Текущая угловая скорость объекта столкновения | `vector3` | `get`{.mark} | | *linear_damping* | Линейное затухание объекта столкновения | `vector3` | `get+set`{.mark} | | *angular_damping* | Угловое затухание объекта столкновения | `vector3` | `get+set`{.mark} | *СВОЙСТВА КОМПОНЕНТА SPINE MODEL* | Свойство | Описание | Тип | | | ---------- | -------------------------------------- | --------------- | ---------------- | | *animation* | Текущая анимация | `hash` | `get`{.mark} | | *skin* | Текущий примененный скин модели (не может быть анимирован!) | `hash` | `get+set`{.mark} | | *cursor* | Текущее положение (от 0 до 1) курсора воспроизведения анимации | `number` | `get+set`{.mark} | | *playback_rate* | Скорость воспроизведения анимации. Множитель к скорости воспроизведения анимации | `number` | `get+set`{.mark} | *СВОЙСТВА КОМПОНЕНТА MODEL (3D)* | Свойство | Описание | Тип | | | ---------- | -------------------------------------- | --------------- | ---------------- | | *animation* | Текущая анимация. | `hash` | `get`{.mark} | | *texture0* | Хэш пути текстуры модели | `hash` | `get`{.mark}| | *cursor* | Позиция (между 0--1) курсора воспроизведения | `number` | `get+set`{.mark} | | *playback_rate* | Скорость воспроизведения анимации. Множитель к скорости воспроизведения анимации | `number` | `get+set`{.mark} | *СВОЙСТВА КОМПОНЕНТА LABEL* | Свойство | Описание | Тип | | | ---------- | -------------------------------------- | --------------- | ---------------- | | *scale* | Масштаб метки | `vector3` | `get+set`{.mark} | | *scale.xy* | Масштаб надписи (label) вдоль осей X и Y. | `vector3` | `get+set`{.mark} | | *color* | Цвет метки | `vector4` | `get+set`{.mark} | | *outline* | Цвет контура метки | `vector4` | `get+set`{.mark} | | *shadow* | Цвет тени метки | `vector4` | `get+set`{.mark} | | *size* | Размер метки. Размер будет ограничивать текст, если включен перенос строки | `vector3` | `get+set`{.mark} | ## Свойства GUI-ноды GUI-ноды также содержат свойства, но они считываются и записываются через специальные функции --- так называемые "геттеры" и "сеттеры". Для каждого свойства существует одна get-функция и одна set-функция. Также определен набор констант, которые используются в качестве ссылок на свойства при их анимировании. Если необходимо сослаться на отдельные компоненты свойства, следует использовать строковое имя свойства или хэш строкового имени. * `position` (или `gui.PROP_POSITION`) * `rotation` (или `gui.PROP_ROTATION`) * `scale` (или `gui.PROP_SCALE`) * `color` (или `gui.PROP_COLOR`) * `outline` (или `gui.PROP_OUTLINE`) * `shadow` (или `gui.PROP_SHADOW`) * `size` (или `gui.PROP_SIZE`) * `fill_angle` (или `gui.PROP_FILL_ANGLE`) * `inner_radius` (или `gui.PROP_INNER_RADIUS`) * `slice9` (или `gui.PROP_SLICE9`) Следует отметить, что все значения цвета кодируются в vector4, компоненты которого соответствуют значениям RGBA: `x` : Компонент красного цвета `y` : Компонент зеленого цвета `z` : Компонент синего цвета `w` : Компонент прозрачности (alpha) *СВОЙСТВА GUI-НОД* | Свойство | Описание | Тип | | | ---------- | -------------------------------------- | --------------- | ---------------- | | *color* | Цвет грани ноды | `vector4` | `gui.get_color()` `gui.set_color()` | | *outline* | Цвет контура ноды | `vector4` | `gui.get_outline()` `gui.set_outline()` | | *position* | Положение ноды | `vector3` | `gui.get_position()` `gui.set_position()` | | *rotation* | Вращение ноды, выраженное в углах Эйлера --- градусах, повернутых вокруг каждой оси | `vector3` | `gui.get_rotation()` `gui.set_rotation()` | | *scale* | Масштаб ноды, выраженный в виде множителя по каждой оси | `vector3` |`gui.get_scale()` `gui.set_scale()` | | *shadow* | Цвет тени ноды | `vector4` | `gui.get_shadow()` `gui.set_shadow()` | | *size* | Немасштабируемый размер ноды | `vector3` | `gui.get_size()` `gui.set_size()` | | *fill_angle* | Угол заливки ноды Pie, выраженный в градусах против часовой стрелки | `number` | `gui.get_fill_angle()` `gui.set_fill_angle()` | | *inner_radius* | Внутренний радиус ноды Pie | `number` | `gui.get_inner_radius()` `gui.set_inner_radius()` | | *slice9* | The edge distances of a slice9 node. | `vector4` | `gui.get_slice9()` `gui.set_slice9()` |