Эта статья относится к игре "Half-Life: Alyx". Нажмите для получения дополнительной информации.
This article relates to the workshop tools for "Half-Life: Alyx". Click here for more information.
This article's documentation is for Source 2. Click here for more information.

Узлы состояний (State Machine Nodes)

From Valve Developer Community
Jump to navigation Jump to search
English (en)Русский (ru)Translate (Translate)

Узлы состояний (State Machine Nodes) являются основным средством управления анимацией посредством графов. Они позволяют создавать логику, которая будет определять активную ветвь графа в зависимости от множества параметров, передаваемых из игры и из самого графа. Дважды щелкните на узле состояния, чтобы открыть редактор состояний.

Состояния

Состояние узла определяется значением на его входе.

State Machine Nodes-128484132.pngState Machine Nodes-128484138.png

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

Свойства состояний

State Machine Nodes-128484133.png

  • Начальное состояние (Start State): Каждый узел состояния должен иметь одно начальное состояния. Это состояние, которое активируется при первом выполнеии узла или при его перезагрузке.
  • Конечное состояние (End State): Указывает, что состояние является завершением действия, которое выполняется расчётным состоянием. Если дочерний узел достиг конечного состояния "завершен" (например, завершился анимационный клип без цикла), и текущее состояние является Конечным, то расчёт состояния также считается "завершенным". Это позволяет родительским узлам состояний, расположенным выше в иерархии графа, проверять, стал ли их дочерний узел "завершенным", даже если этот узел тоже является узлом состояния.
  • Сквозной переход (Passthrough): Обычно, после перехода расчётного состояния к новому узлу состояния, проверка последующих переходов осуществляется на следующем расчётном цикле. Если включено свойство Сквозной переход, то расчётное состояние будет проверять переходы сразу, не дожидаясь следующего цикла расчёта.
  • Движение исходного узла (Exclusive Root Motion): Обычно, при переходе расчётного состояния из одного узла к другому, анимация и движения геометрии дочерних узлов плавно переходят из старого состояния в новое. Включение свойства Движение исходного узла приведет к тому, что расчётное состояние будет использовать 100% движения геометрии нового узла состояния без сглаживания, даже если анимация все еще сглаживается.

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

State Machine Nodes-128484213.png

Метки состояний

State Machine Nodes-128484240.png

Метки состояний (AnimTags) можно размещать на состояниях и на анимациях. Существует несколько вариантов активации меток:

  • Пока активно (While Current): Метка активна всё время, пока активно состояние. Слушатели получат уведомление Метка включена, когда состояние станет активным, и уведомление Метка отключена, когда состояние перестанет быть активным.
  • При входе (On Enter): Метка активна только в момент, когда состояние впервые становится активным.
  • При выходе (On Exit): Метка активна только в момент завершения состояния.
  • При входе или выходе (On Enter and Exit): Метка срабатывает в момент входа и выхода из состояния, но не между этими событиями.

Внимание!

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

По этой причине лучше использовать метку "Пока активно (While Current)", поскольку система позаботится об уведомлении слушателей о том, что метка больше не активна, даже если расчётное состояние, активировавшее метку, перестало соответствовать данной ветви графа.

Порядок переходов

State Machine Nodes-128484244.png

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

Нажмите на название целевого состояния и перетащите его, чтобы изменить порядок перехода.

Переходы

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

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

State Machine Nodes-128484251.png

Условия

Условия являются логическими элементами, которые сравнивают значения одного параметра с другим. Если все сравнения всех условий для перехода выполнены, то переход активируется, и расчетное состояние переходит к соответствующему узлу.

Выбрав переход, нажмите кнопку State Machine Nodes-128484135.png в разделе Условия в "Свойствах перехода" на панели "Редактор свойств", чтобы отобразить список доступных типов условий и добавить одно из них к переходу. Переходы могут содержать 0 или более условий.

State Machine Nodes-128484252.png

Каждое условие состоит из 3-х частей:

  • Первым указывается конкретное свойство, которое необходимо проверить. Обычно это наименование какой-либо величины из графа. Например, это может быть параметр желаемой скорости передвижения или наличие у персонажа допустимого пути.
  • Второй указывается необходимая операция сравнения. Выбор операции зависит от типа сравниваемых значений и выбирается из следующих возможных:
    • == "Равно"
    • != "Не равно"
    • < "Меньше чем"
    • > "Больше чем"
    • <= "Меньше или равно"
    • >= "Больше или равно"
  • Третьим указывается значение с которым производится сравнение. В большинстве случаев это конкретное значение, заданное пользователем, но это также может быть значение любой переменной, определенное в графе.

Для изменения любой из частей, просто нажмите на неё, чтобы открыть выпадающий список доступных вариантов.

State Machine Nodes-128484136.png