User Manual

Ассеты Animstategraph

Ассеты Animstategraph используются для организации набора различных состояний анимации, которые представляют собой все разнообразные способы, которыми может анимироваться модель. С их помощью можно определить каждое из этих состояний анимации, определить, когда каждое состояние должно проигрываться, а также как состояния переходят и, следовательно, смешиваются друг с другом. Ассеты Animstategraph не хранят и не связываются с реальными ассетами анимации, а скорее действуют как шаблон для организации активов анимации. Фактические ассеты анимации связываются с состояниями анимации animstategraph через Anim Component.

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

Эти ассеты являются, таким образом, конечными автоматами для поведения анимации модели, и они контролируют поток анимационных последовательностей на протяжении жизненного цикла Entity. Простой ассет animstategraph, используемый для определения поведения колеса, может определять только два состояния анимации: статическое и вращающееся. Этот ассет может быть определен для контроля начала и остановки вращения колеса, продолжительности вращения, скорости вращения колеса и насколько резко оно начинает/останавливает вращение. Более продвинутые ассеты могут быть использованы для объединения множества состояний анимации для создания сложного поведения анимации гуманоидных персонажей.

При выборе ассета animstategraph в панели ассетов редактора, вы откроете вид редактора графа состояний анимации:

Initial Editor

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

Состояния

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

В графах состояний присутствуют четыре типа состояний. Состояния анимации, а также состояния START, END и ANY. Только состояния анимации могут быть созданы и удалены пользователем, и только они будут связаны с анимационными активами. Другие состояния используются для контроля потока через конечный автомат.

Состояния анимации

State

Состояния анимации определяют воспроизводимую анимацию, такую как «Idle», «Jump» или «Walk». Новые состояния анимации можно создать, щелкнув правой кнопкой мыши на пустом холсте за графом состояния и выбрав «Добавить новое состояние» из меню. Редактор будет нацелен на ваше новое состояние и покажет его панель инспектора с правой стороны. В этом инспекторе можно изменить следующие переменные состояния:

Переменная Описание
Имя Имя, которое должно быть присвоено этому состоянию. Оно используется для поиска, редактирования и воспроизведения состояний через скрипт. Имена должны быть уникальными для каждого слоя графа состояний.
Скорость Скорость воспроизведения анимаций, связанных с этим состоянием.
Loop Определяет, должны ли анимации, связанные с этим состоянием, зацикливаться во время воспроизведения. Если установлено значение false, анимация будет приостанавливаться на последнем ключевом кадре, пока это состояние не будет выходить.

Состояние START

Start State

Состояние START является точкой входа каждого графа состояний. Когда компонент anim начинает воспроизводить свой назначенный граф состояний anim, он сначала входит в это состояние и переходит непосредственно в состояние анимации, к которому он подключен. Это состояние анимации называется состоянием по умолчанию, и его можно выбрать через панель слоев здесь:

Layers

Невозможно создать какие-либо другие переходы к состоянию START или из него. В него можно вернуться только перейдя в состояние END.

Состояние END

End State

Состояние END обозначает выход из текущего графа состояний. Если ваше состояние анимации настроено на переход в состояние END, система непосредственно перейдет к состоянию анимации по умолчанию, которое подключено к состоянию START. Это полезно для создания циклических потоков через граф, сохраняя при этом линейное расположение графа. Невозможно создать переходы из состояния END в любое другое состояние. Оно всегда будет переходить непосредственно в состояние START.

Состояние ANY

Any State

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

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

Переходы

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

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

Доступные переменные перехода:

Переменная Описание
Duration Длительность перехода в секундах.
Exit Time Время выхода из исходного состояния и входа в конечное состояние. Задается в нормализованном времени на основе длительности исходного состояния. Непредоставление значения позволяет исходному состоянию выйти с этим переходом в любое время. Значение меньше 1 сделает переход доступным для выхода в это время во время каждого цикла исходного состояния.
Offset Если указано, конечное состояние начнет воспроизводить свою анимацию в это время. Задается в нормализованном времени на основе длительности конечного состояния. Должно быть между 0 и 1.
Interruption Source Определяет, может ли другой переход прервать этот и какие переходы текущего или предыдущего состояния могут это сделать.

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

Параметры

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

Новые параметры можно добавить в граф состояний через панель параметров в левом инспекторе:

Parameters

У каждого параметра есть три переменные, которые можно установить:

Переменная Описание
Имя Имя, которое должен иметь этот параметр. Оно используется для поиска и установки параметра через скрипт. Имена должны быть уникальными для каждого графа состояний.
Тип Тип переменной, которую содержит параметр. Один из: Boolean, Float, Integer или Trigger. Тип Trigger действует как Boolean, но с особенностью, что его значение устанавливается обратно на false после того, как оно было успешно использовано для активации перехода.
Значение по умолчанию Значение переменной параметра при запуске графа состояний.

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

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

Condition

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

Слои

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

Когда создается animstategraph, он поставляется с одним базовым слоем. Этот слой нельзя удалить, и для многих сценариев он будет единственным необходимым. Однако, если вы хотите создать другой слой, вы можете сделать это, выбрав кнопку нового слоя на панели слоев слева от представления графа состояний:

Слои

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

Выбор слоя

Смешивание слоев

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

Смешивание слоев

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

Issue Tracker

Новые функции

Улучшения

Исправления ошибок

var AnimationBlending = pc.createScript('animationBlending');

// инициализация кода, вызываемого один раз для каждой сущности
AnimationBlending.prototype.initialize = function() {
    this.entity.anim.on('smile_start', function (event) {
        this.entity.anim.findAnimationLayer('smile').weight = 1;
    }), this);
    this.entity.anim.on('smile_end', function (event) {
        this.entity.anim.findAnimationLayer('smile').weight = 0;
    }), this);
};

Если вы маскируете свои слои, вы можете установить blend type ваших слоев на Additive, чтобы смешать анимацию, которая контролирует только часть костей вашей модели. Обновление blend weight в реальном времени, как описано выше, позволит вам создавать плавные смешивания между анимациями на разных слоях. Это особенно полезно при анимации персонажей, которым нужно выполнять разные действия с использованием верхней и нижней части тела. Например, вы можете иметь анимацию shooting, которая смешивается в верхней части тела персонажа, освобождая нижнюю часть тела для различных анимаций перемещения, таких как walking и running.

Любые слои, установленные на Overwrite, полностью заменят значения анимации костей модели, которые анимированы на этом слое. В этих случаях предыдущие слои не будут учитываться при создании окончательной анимации.

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