AnimationMixer
Базовый класс для AnimationPlayer и AnimationTree.
Базовый класс для AnimationPlayer и AnimationTree.
Базовый класс для AnimationPlayer и AnimationTree для управления списками анимации. Он также имеет общие свойства и методы для воспроизведения и смешивания.
После создания экземпляра данных информации о воспроизведении в расширенном классе, смешивание и обработка происходит в AnimationMixer.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Свойства10
ActiveСвойство
public bool Active { get; set; }Если true, AnimationMixer будет выполнять обработку.
AudioMaxPolyphonyСвойство
public int AudioMaxPolyphony { get; set; }Количество возможных одновременных звуков для каждого из назначенных AudioStreamPlayers.
Например, если это значение равно 32 и анимация имеет две аудиодорожки, два назначенных AudioStreamPlayer могут одновременно воспроизводить до 32 голосов каждый.
CallbackModeDiscreteСвойство
public AnimationMixer.AnimationCallbackModeDiscrete CallbackModeDiscrete { get; set; }Обычно дорожки можно установить на Animation.UpdateMode.Discrete для редкого обновления, обычно при использовании ближайшей интерполяции.
Однако при смешивании с Animation.UpdateMode.Continuous рассматриваются несколько результатов. AnimationMixer.CallbackModeDiscrete указывает это явно. См. также AnimationMixer.AnimationCallbackModeDiscrete.
Чтобы смешанные результаты выглядели хорошо, рекомендуется установить это на AnimationMixer.AnimationCallbackModeDiscrete.ForceContinuous для обновления каждого кадра во время смешивания. Существуют другие значения для совместимости, и они хороши, если смешивания нет, но не так, могут создавать артефакты.
CallbackModeMethodСвойство
public AnimationMixer.AnimationCallbackModeMethod CallbackModeMethod { get; set; }Выбирает момент вызова Method-дорожек. Deferred ставит вызовы в очередь после обработки анимации; Immediate вызывает внутри обработки. При Deferred результат может появиться позже Advance(). Не перестраивайте проигрываемую иерархию из Immediate-callback.
CallbackModeProcessСвойство
public AnimationMixer.AnimationCallbackModeProcess CallbackModeProcess { get; set; }Выбирает автоматическое обновление по физическим шагам, обычным кадрам или ручной режим. Manual требует вызова Advance() владельцем времени. Выбор физического callback не превращает прямую анимацию Position в движение с разрешением столкновений.
DeterministicСвойство
public bool Deterministic { get; set; }Если true, смешивание использует детерминированный алгоритм. Общий вес не нормализуется, а результат накапливается с начальным значением (0 или анимацией "RESET", если она присутствует).
Это означает, что если общий объем смешивания равен 0.0, результат равен анимации "RESET".
Если количество дорожек между смешанными анимациями отличается, анимация с отсутствующей дорожкой обрабатывается так, как если бы она имела начальное значение.
Если false, смешивание не использует детерминированный алгоритм. Общий вес нормализуется и всегда 1.0. Если количество дорожек между смешанными анимациями отличается, ничего не делается для анимации, в которой отсутствует дорожка.
Примечание: В AnimationTree смешивание с AnimationNodeAdd2, AnimationNodeAdd3, AnimationNodeSub2 или весом больше 1.0 может привести к неожиданным результатам.
Например, если AnimationNodeAdd2 смешивает два узла с количеством 1.0, то общий вес составит 2.0, но он будет нормализован, чтобы сделать общее количество 1.0, а результат будет равен AnimationNodeBlend2 с количеством 0.5.
ResetOnSaveСвойство
public bool ResetOnSave { get; set; }Это используется редактором. Если установлено значение true, сцена будет сохранена с эффектами анимации сброса (анимация с ключом "RESET"), примененными так, как если бы она была перенесена на время 0, при этом редактор сохраняет значения, которые сцена имела до сохранения.
Это делает более удобным предварительный просмотр и редактирование анимаций в редакторе, поскольку изменения в сцене не будут сохранены, пока они установлены в анимации сброса.
RootEntityСвойство
public EntityPath RootEntity { get; set; }Узел, на который ссылается путь узла, будет отправлен.
RootMotionLocalСвойство
public bool RootMotionLocal { get; set; }Если true, значение AnimationMixer.GetRootMotionPosition извлекается как локальное значение перевода перед смешиванием. Другими словами, оно обрабатывается так, как будто перевод выполняется после поворота.
RootMotionTrackСвойство
public EntityPath RootMotionTrack { get; set; }Путь к Animation Дорожка, используемая для корневого движения. Путь должен быть правильным сценарием до узла и должен быть указан начиная с родительского узла узла, который воспроизведет анимацию. AnimationMixer.RootMotionTrack использует тот же формат, что и Animation.TrackSetPath, но учтите, что необходимо указать кость.
Если дорожка имеет тип Animation.TrackType.Position3D, Animation.TrackType.Rotation3Dили Animation.TrackType.Scale3D Преобразование будет отменено визуально, и анимация, похоже, останется на месте. AnimationMixer.GetRootMotionPosition, AnimationMixer.GetRootMotionRotation, AnimationMixer.GetRootMotionScale, и RootMotionView.
Методы42
AddAnimationLibraryError
public Error AddAnimationLibrary(StringName name, AnimationLibrary library);Добавляет library в проигрыватель анимации под ключом name.
AnimationMixer имеет глобальную библиотеку по умолчанию с пустой строкой в качестве ключа. Для добавления анимации в глобальную библиотеку:
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
library | AnimationLibrary | — |
ErrorAdvancevoid
public void Advance(double delta);Явно обрабатывает анимацию на delta секунд. Для собственного шага установите CallbackModeProcess=Manual, иначе возможна двойная обработка вместе с автоматическим callback. Нулевой шаг применяет текущую позу. В AnimationPlayer явный шаг может продвигать приостановленный, но всё ещё назначенный клип.
| Имя | Тип | По умолчанию |
|---|---|---|
delta | double | — |
Capturevoid
public void Capture(StringName name, double duration, Tween.TransitionType transType = Tween.TransitionType.Linear, Tween.EaseType easeType = Tween.EaseType.In);Если анимационная дорожка, указанная name, имеет опцию Animation.UpdateMode.Capture, сохраняет текущие значения объектов, указанных путем дорожки, как кэш. Если уже есть захваченный кэш, старый кэш отбрасывается.
После этого он будет интерполироваться с текущим результатом смешивания анимации во время процесса воспроизведения в течение времени, указанного duration, работая как кроссфейд.
Вы можете указать trans_type в качестве кривой для интерполяции. Для лучших результатов может быть целесообразно указать Tween.TransitionType.Linear для случаев, когда первый ключ дорожки начинается с ненулевого значения или когда значение ключа не меняется, и Tween.TransitionType.Quad для случаев, когда значение ключа изменяется линейно.
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
duration | double | — |
transType | Tween.TransitionType | Tween.TransitionType.Linear |
easeType | Tween.EaseType | Tween.EaseType.In |
ClearCachesvoid
public void ClearCaches();AnimationMixer кэширует анимированные узлы. Он может не заметить, если узел исчезнет; AnimationMixer.ClearCaches заставляет его обновить кэш снова.
FindAnimationStringName
public StringName FindAnimation(Animation animation);Возвращает ключ animation или пустой StringName, если он не найден.
| Имя | Тип | По умолчанию |
|---|---|---|
animation | Animation | — |
StringNameFindAnimationLibraryStringName
public StringName FindAnimationLibrary(Animation animation);Возвращает ключ для AnimationLibrary, содержащий animation, или пустой StringName, если он не найден.
| Имя | Тип | По умолчанию |
|---|---|---|
animation | Animation | — |
StringNameGetAnimationAnimation
public Animation GetAnimation(StringName name);Возвращает Animation с ключом name. Если анимация не существует, возвращается null и регистрируется ошибка.
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
AnimationGetAnimationLibraryAnimationLibrary
public AnimationLibrary GetAnimationLibrary(StringName name);Возвращает первую AnimationLibrary с ключом name или null, если не найдена.
Чтобы получить глобальную библиотеку анимации AnimationMixer, используйте get_animation_library("").
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
AnimationLibraryGetAnimationLibraryListReckfell.Collections.Array<StringName>
public Reckfell.Collections.Array<StringName> GetAnimationLibraryList();Возвращает список сохраненных ключей библиотеки.
Reckfell.Collections.Array<StringName>GetAnimationListstring[]
public string[] GetAnimationList();Возвращает список сохраненных ключей анимации.
string[]GetAudioMaxPolyphonyint
public int GetAudioMaxPolyphony();intGetCallbackModeDiscreteAnimationMixer.AnimationCallbackModeDiscrete
public AnimationMixer.AnimationCallbackModeDiscrete GetCallbackModeDiscrete();AnimationMixer.AnimationCallbackModeDiscreteGetCallbackModeMethodAnimationMixer.AnimationCallbackModeMethod
public AnimationMixer.AnimationCallbackModeMethod GetCallbackModeMethod();AnimationMixer.AnimationCallbackModeMethodGetCallbackModeProcessAnimationMixer.AnimationCallbackModeProcess
public AnimationMixer.AnimationCallbackModeProcess GetCallbackModeProcess();AnimationMixer.AnimationCallbackModeProcessGetRootEntityEntityPath
public EntityPath GetRootEntity();EntityPathGetRootMotionPositionVector3
public Vector3 GetRootMotionPosition();Возвращает извлечённое смещение root-motion дорожки за последний обработанный шаг. Это не скорость и не мировая позиция тела. При управлении CharacterBody3D преобразуйте направление в выбранную систему координат, разделите смещение на delta для Velocity и примените MoveAndSlide(). Не добавляйте это же смещение повторно напрямую.
Vector3GetRootMotionPositionAccumulatorVector3
public Vector3 GetRootMotionPositionAccumulator();Получите смешанное значение треков положения с AnimationMixer.RootMotionTrack как Vector3, которое можно использовать в другом месте.
Это полезно в случаях, когда вы хотите соблюдать начальные ключевые значения анимации.
Например, если анимация только с одним ключом Vector3(0, 0, 0) воспроизводится в предыдущем кадре, а затем анимация только с одним ключом Vector3(1, 0, 1) воспроизводится в следующем кадре, разницу можно вычислить следующим образом:
Однако если анимация зацикливается, может произойти непреднамеренное дискретное изменение, поэтому это полезно только для некоторых простых случаев использования.
Vector3GetRootMotionRotationQuaternion
public Quaternion GetRootMotionRotation();Извлеките дельту движения вращения с AnimationMixer.RootMotionTrack как Quaternion, который можно использовать в другом месте.
Если AnimationMixer.RootMotionTrack не является путем к треку типа Animation.TrackType.Rotation3D, возвращает Quaternion(0, 0, 0, 1).
См. также AnimationMixer.RootMotionTrack и RootMotionView.
Самый простой пример — применение вращения к CharacterBody3D:
QuaternionGetRootMotionRotationAccumulatorQuaternion
public Quaternion GetRootMotionRotationAccumulator();Изыскать смешанное значение для вращения дорожок AnimationMixer.RootMotionTrack в качестве Quaternion которые можно использовать в другом месте.
Это необходимо для правильного применения положения корня движения с учетом вращения. AnimationMixer.GetRootMotionPosition.
Кроме того, это полезно в тех случаях, когда вы хотите уважать первоначальные ключевые значения анимации.
Например, если анимация с одним ключом Quaternion(0, 0, 0, 1) Проигрывается в предыдущем кадре, а затем анимация только с одним ключом Quaternion(0, 0.707, 0, 0.707) Проигрывается в следующей кадре, разница может быть рассчитана следующим образом:
Однако если анимация зацикливается, может произойти непреднамеренное дискретное изменение, поэтому это полезно только для некоторых простых случаев использования.
QuaternionGetRootMotionScaleVector3
public Vector3 GetRootMotionScale();Извлеките дельту движения масштаба с AnimationMixer.RootMotionTrack как Vector3, который можно использовать в другом месте.
Если AnimationMixer.RootMotionTrack не является путем к треку типа Animation.TrackType.Scale3D, возвращает Vector3(0, 0, 0).
См. также AnimationMixer.RootMotionTrack и RootMotionView.
Самый простой пример — применение масштаба к CharacterBody3D:
Vector3GetRootMotionScaleAccumulatorVector3
public Vector3 GetRootMotionScaleAccumulator();Получите смешанное значение треков масштабирования с AnimationMixer.RootMotionTrack как Vector3, которое можно использовать в другом месте.
Например, если анимация только с одним ключом Vector3(1, 1, 1) воспроизводится в предыдущем кадре, а затем анимация только с одним ключом Vector3(2, 2, 2) воспроизводится в следующем кадре, разницу можно рассчитать следующим образом:
Однако если анимация зацикливается, может произойти непреднамеренное дискретное изменение, поэтому это полезно только для некоторых простых случаев использования.
Vector3GetRootMotionTrackEntityPath
public EntityPath GetRootMotionTrack();EntityPathHasAnimationbool
public bool HasAnimation(StringName name);Возвращает true, если AnimationMixer хранит Animation с ключом name.
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
boolHasAnimationLibrarybool
public bool HasAnimationLibrary(StringName name);Возвращает true, если AnimationMixer хранит AnimationLibrary с ключом name.
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
boolIsActivebool
public bool IsActive();boolIsDeterministicbool
public bool IsDeterministic();boolIsResetOnSaveEnabledbool
public bool IsResetOnSaveEnabled();boolIsRootMotionLocalbool
public bool IsRootMotionLocal();boolRemoveAnimationLibraryvoid
public void RemoveAnimationLibrary(StringName name);Удаляет AnimationLibrary, связанный с ключом name.
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
RenameAnimationLibraryvoid
public void RenameAnimationLibrary(StringName name, StringName newname);Перемещает AnimationLibrary, связанный с ключом name, в ключ newname.
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
newname | StringName | — |
SetActivevoid
public void SetActive(bool active);| Имя | Тип | По умолчанию |
|---|---|---|
active | bool | — |
SetAudioMaxPolyphonyvoid
public void SetAudioMaxPolyphony(int maxPolyphony);| Имя | Тип | По умолчанию |
|---|---|---|
maxPolyphony | int | — |
SetCallbackModeDiscretevoid
public void SetCallbackModeDiscrete(AnimationMixer.AnimationCallbackModeDiscrete mode);| Имя | Тип | По умолчанию |
|---|---|---|
mode | AnimationMixer.AnimationCallbackModeDiscrete | — |
SetCallbackModeMethodvoid
public void SetCallbackModeMethod(AnimationMixer.AnimationCallbackModeMethod mode);| Имя | Тип | По умолчанию |
|---|---|---|
mode | AnimationMixer.AnimationCallbackModeMethod | — |
SetCallbackModeProcessvoid
public void SetCallbackModeProcess(AnimationMixer.AnimationCallbackModeProcess mode);| Имя | Тип | По умолчанию |
|---|---|---|
mode | AnimationMixer.AnimationCallbackModeProcess | — |
SetDeterministicvoid
public void SetDeterministic(bool deterministic);| Имя | Тип | По умолчанию |
|---|---|---|
deterministic | bool | — |
SetResetOnSaveEnabledvoid
public void SetResetOnSaveEnabled(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetRootEntityvoid
public void SetRootEntity(EntityPath path);| Имя | Тип | По умолчанию |
|---|---|---|
path | EntityPath | — |
SetRootMotionLocalvoid
public void SetRootMotionLocal(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetRootMotionTrackvoid
public void SetRootMotionTrack(EntityPath path);| Имя | Тип | По умолчанию |
|---|---|---|
path | EntityPath | — |
_PostProcessKeyValue2 перегрузки
public Variant _PostProcessKeyValue(Animation animation, int track, Variant value, ReckfellObject @object, int objectIdx);Виртуальная функция для обработки после получения ключа во время воспроизведения.
| Имя | Тип | По умолчанию |
|---|---|---|
animation | Animation | — |
track | int | — |
value | Variant | — |
object | ReckfellObject | — |
objectIdx | int | — |
Variantpublic virtual Variant _PostProcessKeyValue(Animation animation, int track, Variant value, ulong objectId, int objectSubIdx);Виртуальная функция для обработки после получения ключа во время воспроизведения.
| Имя | Тип | По умолчанию |
|---|---|---|
animation | Animation | — |
track | int | — |
value | Variant | — |
objectId | ulong | — |
objectSubIdx | int | — |
VariantСигналы и события7
AnimationFinishedСобытие
public event AnimationMixer.AnimationFinishedEventHandler AnimationFinished;Сообщает о нормальном окончании отдельного незацикленного клипа. Stop() и seek к концу не являются заменой этого события. В AnimationTree событие клипа не означает завершение всего графа или игрового действия. Учитывайте отмену и удаление объекта при ожидании сигнала.
| Имя | Тип | По умолчанию |
|---|---|---|
animName | StringName | — |
AnimationLibrariesUpdatedСобытие
public event Action AnimationLibrariesUpdated;Уведомляет об изменении библиотек анимации.
AnimationListChangedСобытие
public event Action AnimationListChanged;Уведомляет об изменении списка анимаций.
AnimationStartedСобытие
public event AnimationMixer.AnimationStartedEventHandler AnimationStarted;Уведомляет о начале воспроизведения анимации. Примечание: Этот сигнал не выдаётся, если анимация повторяется.
| Имя | Тип | По умолчанию |
|---|---|---|
animName | StringName | — |
CachesClearedСобытие
public event Action CachesCleared;Уведомляет об очистке кэшей автоматически или вручную с помощью AnimationMixer.ClearCaches.
MixerAppliedСобытие
public event Action MixerApplied;Уведомляет, когда соответствующий результат смешивания был применен к целевым объектам.
MixerUpdatedСобытие
public event Action MixerUpdated;Уведомляет об обновлении процесса, связанного с свойством.
AnimationMixer.AnimationCallbackModeDiscrete
| Значение | Описание |
|---|---|
Dominant = 0 | Значение дорожки |
ForceContinuous = 2 | Всегда лечите
|
Recessive = 1 | Значение дорожки |
AnimationMixer.AnimationCallbackModeMethod
| Значение | Описание |
|---|---|
Deferred = 0 | Пакетные вызовы методов во время процесса анимации, затем вызовы после обработки событий. Это позволяет избежать ошибок, связанных с удалением узлов или изменением AnimationPlayer во время воспроизведения. |
Immediate = 1 | Вызывайте методы немедленно при достижении их в анимации. |
AnimationMixer.AnimationCallbackModeProcess
| Значение | Описание |
|---|---|
Idle = 1 | Анимация процесса во время кадров процесса (см. |
Manual = 2 | Не обрабатывать анимацию. Используйте |
Physics = 0 | Анимация процесса во время физических кадров (см. |