Перейти к основному содержимому

Состояния

State — именованный снимок всего, чем объект сейчас является: где он стоит, какого цвета, виден ли, какая анимация выбрана.

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

Когда за ним тянуться

Вам нужноСостояния…
Выключатель: включён и выключенровно то, что надо
Дверь: закрыта, открыта, запертаровно то, что надо
Товар в трёх цветовых вариантахровно то, что надо
Персонаж, идущий по путине то — это анимация
Что-то, меняющееся на вычисленную величинуне то — это патч или скрипт

Правило простое: фиксированное число именованных ситуаций — это состояния. Всё непрерывное — анимация.

Как их собрать

Добавьте объекту компонент States, затем добавьте состояние. Оно запишет объект таким, какой он сейчас.

Чтобы собрать следующее: добавьте второе состояние и меняйте объект, пока оно выбрано. Поставьте, перекрасьте, спрячьте — состояние снимает по ходу дела.

Вот эта часть и путает людей

Пока состояние выбрано, редактирование объекта правит снимок этого состояния, а не сам объект.

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

Как переключаться

Из события используйте шаг Set state. Он принимает состояние и, опционально, длительность и easing.

С длительностью изменение едет плавно — объект перетекает оттуда, где он есть, к снимку, а не прыгает. Одно это поле превращает переключение состояния в анимацию, которую вам не пришлось делать.

Откуда переключаетеКак
Событиешаг Set state
Патчнода set_states
Скриптзапись в activeStateId у компонента States

Как реагировать на переключение

На объекте, у которого сменилось состояние, срабатывают два триггера:

ТриггерСрабатывает, когда
State activeобъект вошёл в выбранное вами состояние
State inactiveон из него вышел

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

Они срабатывают на самом объекте, а не на родителях

В отличие от нажатия, смена состояния не поднимается по иерархии.

Как поменять пару вещей без состояния

Иногда нужно «как сейчас, но красный», не заводя ради этого целое состояние. Для этого есть шаг Override properties: он применяет разовый набор значений как временное состояние, с той же длительностью и easing.

Используйте его для разовых акцентов (подсветка при наведении, вспышка при уроне), а настоящие состояния приберегите для ситуаций, которые у объекта действительно есть.

Что покрывает состояние

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

Состояние принадлежит одному объекту

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

Где они могут подловить

  • Оставленное выбранным состояние в редакторе тихо впитывает ваши правки. Прежде чем гадать, почему объект откатывается, проверьте, какое из них активно.
  • Состояния и анимация на одном объекте дерутся, как любые два механизма анимации. Выберите одно.
  • Удаление компонента убирает его из всех состояний, где он был.
  • Если выбранного состояния больше нет, используется первое.

Дальше: Патчи