Состояния
State — именованный снимок всего, чем объект сейчас является: где он стоит, какого цвета, виден ли, какая анимация выбрана.
Переключитесь на состояние — и объект снова становится этим снимком. Это вся функция целиком, и она заменяет удивительно много написанной руками логики.
Когда за ним тянуться
| Вам нужно | Состояния… |
|---|---|
| Выключатель: включён и выключен | ровно то, что надо |
| Дверь: закрыта, открыта, заперта | ровно то, что надо |
| Товар в трёх цветовых вариантах | ровно то, что надо |
| Персонаж, идущий по пути | не то — это анимация |
| Что-то, меняющееся на вычисленную величину | не то — это патч или скрипт |
Правило простое: фиксированное число именованных ситуаций — это состояния. Всё непрерывное — анимация.
Как их собрать
Добавьте объекту компонент States, затем добавьте состояние. Оно запишет объект таким, какой он сейчас.
Чтобы собрать следующее: добавьте второе состояние и меняйте объект, пока оно выбрано. Поставьте, перекрасьте, спрячьте — состояние снимает по ходу дела.
Пока состояние выбрано, редактирование объекта правит снимок этого состояния, а не сам объект.
Это ровно то, что нужно при сборке состояний, и изрядная путаница, когда вы забыли, что одно из них выбрано, и гадали, почему правка «не сохранилась» после переключения.
Как переключаться
Из события используйте шаг Set state. Он принимает состояние и, опционально, длительность и easing.
С длительностью изменение едет плавно — объект перетекает оттуда, где он есть, к снимку, а не прыгает. Одно это поле превращает переключение состояния в анимацию, которую вам не пришлось делать.
| Откуда переключаете | Как |
|---|---|
| Событие | шаг Set state |
| Патч | нода set_states |
| Скрипт | запись в activeStateId у компонента States |
Как реагировать на переключение
На объекте, у которого сменилось состояние, срабатывают два триггера:
| Триггер | Срабатывает, когда |
|---|---|
| State active | объект вошёл в выбранное вами состояние |
| State inactive | он из него вышел |
Каждое событие называет, за каким именно состоянием оно следит, так что один объект может по-разному реагировать на каждое из своих состояний. Именно так дверь играет один звук при открывании и другой при закрывании — без всяких условий.
В отличие от нажатия, смена состояния не поднимается по иерархии.
Как поменять пару вещей без состояния
Иногда нужно «как сейчас, но красный», не заводя ради этого целое состояние. Для этого есть шаг Override properties: он применяет разовый набор значений как временное состояние, с той же длительностью и easing.
Используйте его для разовых акцентов (подсветка при наведении, вспышка при уроне), а настоящие состояния приберегите для ситуаций, которые у объекта действительно есть.
Что покрывает состояние
Снимок хранит компоненты объекта, так что позиция, поворот, масштаб, материал, видимость и всё остальное путешествуют вместе.
Детей оно не снимает. Чтобы переключить группу, дайте каждому объекту свои состояния и переключайте их из одного события — цели шага принимают список.
Где они могут подловить
- Оставленное выбранным состояние в редакторе тихо впитывает ваши правки. Прежде чем гадать, почему объект откатывается, проверьте, какое из них активно.
- Состояния и анимация на одном объекте дерутся, как любые два механизма анимации. Выберите одно.
- Удаление компонента убирает его из всех состояний, где он был.
- Если выбранного состояния больше нет, используется первое.
Дальше: Патчи