reckfellENGINE

AnimationMixer

Базовый класс для AnimationPlayer и AnimationTree.

На этой странице
class AnimationMixerReckfellSharpНаследует Entity

Базовый класс для AnimationPlayer и AnimationTree.

Базовый класс для AnimationPlayer и AnimationTree для управления списками анимации. Он также имеет общие свойства и методы для воспроизведения и смешивания. После создания экземпляра данных информации о воспроизведении в расширенном классе, смешивание и обработка происходит в AnimationMixer.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Свойства10

ActiveСвойство
# Active
C#
public bool Active { get; set; }

Если true, AnimationMixer будет выполнять обработку.

AudioMaxPolyphonyСвойство
# AudioMaxPolyphony
C#
public int AudioMaxPolyphony { get; set; }

Количество возможных одновременных звуков для каждого из назначенных AudioStreamPlayers. Например, если это значение равно 32 и анимация имеет две аудиодорожки, два назначенных AudioStreamPlayer могут одновременно воспроизводить до 32 голосов каждый.

CallbackModeDiscreteСвойство
# CallbackModeDiscrete
C#
public AnimationMixer.AnimationCallbackModeDiscrete CallbackModeDiscrete { get; set; }

Обычно дорожки можно установить на Animation.UpdateMode.Discrete для редкого обновления, обычно при использовании ближайшей интерполяции. Однако при смешивании с Animation.UpdateMode.Continuous рассматриваются несколько результатов. AnimationMixer.CallbackModeDiscrete указывает это явно. См. также AnimationMixer.AnimationCallbackModeDiscrete. Чтобы смешанные результаты выглядели хорошо, рекомендуется установить это на AnimationMixer.AnimationCallbackModeDiscrete.ForceContinuous для обновления каждого кадра во время смешивания. Существуют другие значения для совместимости, и они хороши, если смешивания нет, но не так, могут создавать артефакты.

CallbackModeMethodСвойство
# CallbackModeMethod
C#
public AnimationMixer.AnimationCallbackModeMethod CallbackModeMethod { get; set; }

Выбирает момент вызова Method-дорожек. Deferred ставит вызовы в очередь после обработки анимации; Immediate вызывает внутри обработки. При Deferred результат может появиться позже Advance(). Не перестраивайте проигрываемую иерархию из Immediate-callback.

CallbackModeProcessСвойство
# CallbackModeProcess
C#
public AnimationMixer.AnimationCallbackModeProcess CallbackModeProcess { get; set; }

Выбирает автоматическое обновление по физическим шагам, обычным кадрам или ручной режим. Manual требует вызова Advance() владельцем времени. Выбор физического callback не превращает прямую анимацию Position в движение с разрешением столкновений.

DeterministicСвойство
# Deterministic
C#
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Свойство
# ResetOnSave
C#
public bool ResetOnSave { get; set; }

Это используется редактором. Если установлено значение true, сцена будет сохранена с эффектами анимации сброса (анимация с ключом "RESET"), примененными так, как если бы она была перенесена на время 0, при этом редактор сохраняет значения, которые сцена имела до сохранения. Это делает более удобным предварительный просмотр и редактирование анимаций в редакторе, поскольку изменения в сцене не будут сохранены, пока они установлены в анимации сброса.

RootEntityСвойство
# RootEntity
C#
public EntityPath RootEntity { get; set; }

Узел, на который ссылается путь узла, будет отправлен.

RootMotionLocalСвойство
# RootMotionLocal
C#
public bool RootMotionLocal { get; set; }

Если true, значение AnimationMixer.GetRootMotionPosition извлекается как локальное значение перевода перед смешиванием. Другими словами, оно обрабатывается так, как будто перевод выполняется после поворота.

RootMotionTrackСвойство
# RootMotionTrack
C#
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
# AddAnimationLibrary
C#
public Error AddAnimationLibrary(StringName name, AnimationLibrary library);

Добавляет library в проигрыватель анимации под ключом name. AnimationMixer имеет глобальную библиотеку по умолчанию с пустой строкой в качестве ключа. Для добавления анимации в глобальную библиотеку:

Параметры
ИмяТипПо умолчанию
nameStringName—
libraryAnimationLibrary—
Возвращает Error
Advancevoid
# Advance
C#
public void Advance(double delta);

Явно обрабатывает анимацию на delta секунд. Для собственного шага установите CallbackModeProcess=Manual, иначе возможна двойная обработка вместе с автоматическим callback. Нулевой шаг применяет текущую позу. В AnimationPlayer явный шаг может продвигать приостановленный, но всё ещё назначенный клип.

Параметры
ИмяТипПо умолчанию
deltadouble—
Capturevoid
# Capture
C#
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 для случаев, когда значение ключа изменяется линейно.

Параметры
ИмяТипПо умолчанию
nameStringName—
durationdouble—
transTypeTween.TransitionTypeTween.TransitionType.Linear
easeTypeTween.EaseTypeTween.EaseType.In
ClearCachesvoid
# ClearCaches
C#
public void ClearCaches();

AnimationMixer кэширует анимированные узлы. Он может не заметить, если узел исчезнет; AnimationMixer.ClearCaches заставляет его обновить кэш снова.

FindAnimationStringName
# FindAnimation
C#
public StringName FindAnimation(Animation animation);

Возвращает ключ animation или пустой StringName, если он не найден.

Параметры
ИмяТипПо умолчанию
animationAnimation—
Возвращает StringName
FindAnimationLibraryStringName
# FindAnimationLibrary
C#
public StringName FindAnimationLibrary(Animation animation);

Возвращает ключ для AnimationLibrary, содержащий animation, или пустой StringName, если он не найден.

Параметры
ИмяТипПо умолчанию
animationAnimation—
Возвращает StringName
GetAnimationAnimation
# GetAnimation
C#
public Animation GetAnimation(StringName name);

Возвращает Animation с ключом name. Если анимация не существует, возвращается null и регистрируется ошибка.

Параметры
ИмяТипПо умолчанию
nameStringName—
Возвращает Animation
GetAnimationLibraryAnimationLibrary
# GetAnimationLibrary
C#
public AnimationLibrary GetAnimationLibrary(StringName name);

Возвращает первую AnimationLibrary с ключом name или null, если не найдена. Чтобы получить глобальную библиотеку анимации AnimationMixer, используйте get_animation_library("").

Параметры
ИмяТипПо умолчанию
nameStringName—
Возвращает AnimationLibrary
GetAnimationLibraryListReckfell.Collections.Array<StringName>
# GetAnimationLibraryList
C#
public Reckfell.Collections.Array<StringName> GetAnimationLibraryList();

Возвращает список сохраненных ключей библиотеки.

Возвращает Reckfell.Collections.Array<StringName>
GetAnimationListstring[]
# GetAnimationList
C#
public string[] GetAnimationList();

Возвращает список сохраненных ключей анимации.

Возвращает string[]
GetAudioMaxPolyphonyint
# GetAudioMaxPolyphony
C#
public int GetAudioMaxPolyphony();
Возвращает int
GetCallbackModeDiscreteAnimationMixer.AnimationCallbackModeDiscrete
# GetCallbackModeDiscrete
C#
public AnimationMixer.AnimationCallbackModeDiscrete GetCallbackModeDiscrete();
Возвращает AnimationMixer.AnimationCallbackModeDiscrete
GetCallbackModeMethodAnimationMixer.AnimationCallbackModeMethod
# GetCallbackModeMethod
C#
public AnimationMixer.AnimationCallbackModeMethod GetCallbackModeMethod();
Возвращает AnimationMixer.AnimationCallbackModeMethod
GetCallbackModeProcessAnimationMixer.AnimationCallbackModeProcess
# GetCallbackModeProcess
C#
public AnimationMixer.AnimationCallbackModeProcess GetCallbackModeProcess();
Возвращает AnimationMixer.AnimationCallbackModeProcess
GetRootEntityEntityPath
# GetRootEntity
C#
public EntityPath GetRootEntity();
Возвращает EntityPath
GetRootMotionPositionVector3
# GetRootMotionPosition
C#
public Vector3 GetRootMotionPosition();

Возвращает извлечённое смещение root-motion дорожки за последний обработанный шаг. Это не скорость и не мировая позиция тела. При управлении CharacterBody3D преобразуйте направление в выбранную систему координат, разделите смещение на delta для Velocity и примените MoveAndSlide(). Не добавляйте это же смещение повторно напрямую.

Возвращает Vector3
GetRootMotionPositionAccumulatorVector3
# GetRootMotionPositionAccumulator
C#
public Vector3 GetRootMotionPositionAccumulator();

Получите смешанное значение треков положения с AnimationMixer.RootMotionTrack как Vector3, которое можно использовать в другом месте. Это полезно в случаях, когда вы хотите соблюдать начальные ключевые значения анимации. Например, если анимация только с одним ключом Vector3(0, 0, 0) воспроизводится в предыдущем кадре, а затем анимация только с одним ключом Vector3(1, 0, 1) воспроизводится в следующем кадре, разницу можно вычислить следующим образом:

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

Возвращает Vector3
GetRootMotionRotationQuaternion
# GetRootMotionRotation
C#
public Quaternion GetRootMotionRotation();

Извлеките дельту движения вращения с AnimationMixer.RootMotionTrack как Quaternion, который можно использовать в другом месте. Если AnimationMixer.RootMotionTrack не является путем к треку типа Animation.TrackType.Rotation3D, возвращает Quaternion(0, 0, 0, 1). См. также AnimationMixer.RootMotionTrack и RootMotionView. Самый простой пример — применение вращения к CharacterBody3D:

Возвращает Quaternion
GetRootMotionRotationAccumulatorQuaternion
# GetRootMotionRotationAccumulator
C#
public Quaternion GetRootMotionRotationAccumulator();

Изыскать смешанное значение для вращения дорожок AnimationMixer.RootMotionTrack в качестве Quaternion которые можно использовать в другом месте. Это необходимо для правильного применения положения корня движения с учетом вращения. AnimationMixer.GetRootMotionPosition. Кроме того, это полезно в тех случаях, когда вы хотите уважать первоначальные ключевые значения анимации. Например, если анимация с одним ключом Quaternion(0, 0, 0, 1) Проигрывается в предыдущем кадре, а затем анимация только с одним ключом Quaternion(0, 0.707, 0, 0.707) Проигрывается в следующей кадре, разница может быть рассчитана следующим образом:

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

Возвращает Quaternion
GetRootMotionScaleVector3
# GetRootMotionScale
C#
public Vector3 GetRootMotionScale();

Извлеките дельту движения масштаба с AnimationMixer.RootMotionTrack как Vector3, который можно использовать в другом месте. Если AnimationMixer.RootMotionTrack не является путем к треку типа Animation.TrackType.Scale3D, возвращает Vector3(0, 0, 0). См. также AnimationMixer.RootMotionTrack и RootMotionView. Самый простой пример — применение масштаба к CharacterBody3D:

Возвращает Vector3
GetRootMotionScaleAccumulatorVector3
# GetRootMotionScaleAccumulator
C#
public Vector3 GetRootMotionScaleAccumulator();

Получите смешанное значение треков масштабирования с AnimationMixer.RootMotionTrack как Vector3, которое можно использовать в другом месте. Например, если анимация только с одним ключом Vector3(1, 1, 1) воспроизводится в предыдущем кадре, а затем анимация только с одним ключом Vector3(2, 2, 2) воспроизводится в следующем кадре, разницу можно рассчитать следующим образом:

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

Возвращает Vector3
GetRootMotionTrackEntityPath
# GetRootMotionTrack
C#
public EntityPath GetRootMotionTrack();
Возвращает EntityPath
HasAnimationbool
# HasAnimation
C#
public bool HasAnimation(StringName name);

Возвращает true, если AnimationMixer хранит Animation с ключом name.

Параметры
ИмяТипПо умолчанию
nameStringName—
Возвращает bool
HasAnimationLibrarybool
# HasAnimationLibrary
C#
public bool HasAnimationLibrary(StringName name);

Возвращает true, если AnimationMixer хранит AnimationLibrary с ключом name.

Параметры
ИмяТипПо умолчанию
nameStringName—
Возвращает bool
IsActivebool
# IsActive
C#
public bool IsActive();
Возвращает bool
IsDeterministicbool
# IsDeterministic
C#
public bool IsDeterministic();
Возвращает bool
IsResetOnSaveEnabledbool
# IsResetOnSaveEnabled
C#
public bool IsResetOnSaveEnabled();
Возвращает bool
IsRootMotionLocalbool
# IsRootMotionLocal
C#
public bool IsRootMotionLocal();
Возвращает bool
RemoveAnimationLibraryvoid
# RemoveAnimationLibrary
C#
public void RemoveAnimationLibrary(StringName name);

Удаляет AnimationLibrary, связанный с ключом name.

Параметры
ИмяТипПо умолчанию
nameStringName—
RenameAnimationLibraryvoid
# RenameAnimationLibrary
C#
public void RenameAnimationLibrary(StringName name, StringName newname);

Перемещает AnimationLibrary, связанный с ключом name, в ключ newname.

Параметры
ИмяТипПо умолчанию
nameStringName—
newnameStringName—
SetActivevoid
# SetActive
C#
public void SetActive(bool active);
Параметры
ИмяТипПо умолчанию
activebool—
SetAudioMaxPolyphonyvoid
# SetAudioMaxPolyphony
C#
public void SetAudioMaxPolyphony(int maxPolyphony);
Параметры
ИмяТипПо умолчанию
maxPolyphonyint—
SetCallbackModeDiscretevoid
# SetCallbackModeDiscrete
C#
public void SetCallbackModeDiscrete(AnimationMixer.AnimationCallbackModeDiscrete mode);
Параметры
ИмяТипПо умолчанию
modeAnimationMixer.AnimationCallbackModeDiscrete—
SetCallbackModeMethodvoid
# SetCallbackModeMethod
C#
public void SetCallbackModeMethod(AnimationMixer.AnimationCallbackModeMethod mode);
Параметры
ИмяТипПо умолчанию
modeAnimationMixer.AnimationCallbackModeMethod—
SetCallbackModeProcessvoid
# SetCallbackModeProcess
C#
public void SetCallbackModeProcess(AnimationMixer.AnimationCallbackModeProcess mode);
Параметры
ИмяТипПо умолчанию
modeAnimationMixer.AnimationCallbackModeProcess—
SetDeterministicvoid
# SetDeterministic
C#
public void SetDeterministic(bool deterministic);
Параметры
ИмяТипПо умолчанию
deterministicbool—
SetResetOnSaveEnabledvoid
# SetResetOnSaveEnabled
C#
public void SetResetOnSaveEnabled(bool enabled);
Параметры
ИмяТипПо умолчанию
enabledbool—
SetRootEntityvoid
# SetRootEntity
C#
public void SetRootEntity(EntityPath path);
Параметры
ИмяТипПо умолчанию
pathEntityPath—
SetRootMotionLocalvoid
# SetRootMotionLocal
C#
public void SetRootMotionLocal(bool enabled);
Параметры
ИмяТипПо умолчанию
enabledbool—
SetRootMotionTrackvoid
# SetRootMotionTrack
C#
public void SetRootMotionTrack(EntityPath path);
Параметры
ИмяТипПо умолчанию
pathEntityPath—
_PostProcessKeyValue2 перегрузки
# _PostProcessKeyValue · 1/2
C#
public Variant _PostProcessKeyValue(Animation animation, int track, Variant value, ReckfellObject @object, int objectIdx);

Виртуальная функция для обработки после получения ключа во время воспроизведения.

Параметры
ИмяТипПо умолчанию
animationAnimation—
trackint—
valueVariant—
objectReckfellObject—
objectIdxint—
Возвращает Variant
# _PostProcessKeyValue · 2/2
C#
public virtual Variant _PostProcessKeyValue(Animation animation, int track, Variant value, ulong objectId, int objectSubIdx);

Виртуальная функция для обработки после получения ключа во время воспроизведения.

Параметры
ИмяТипПо умолчанию
animationAnimation—
trackint—
valueVariant—
objectIdulong—
objectSubIdxint—
Возвращает Variant

Сигналы и события7

AnimationFinishedСобытие
# AnimationFinished
C#
public event AnimationMixer.AnimationFinishedEventHandler AnimationFinished;

Сообщает о нормальном окончании отдельного незацикленного клипа. Stop() и seek к концу не являются заменой этого события. В AnimationTree событие клипа не означает завершение всего графа или игрового действия. Учитывайте отмену и удаление объекта при ожидании сигнала.

Параметры обработчика
ИмяТипПо умолчанию
animNameStringName—
AnimationLibrariesUpdatedСобытие
# AnimationLibrariesUpdated
C#
public event Action AnimationLibrariesUpdated;

Уведомляет об изменении библиотек анимации.

AnimationListChangedСобытие
# AnimationListChanged
C#
public event Action AnimationListChanged;

Уведомляет об изменении списка анимаций.

AnimationStartedСобытие
# AnimationStarted
C#
public event AnimationMixer.AnimationStartedEventHandler AnimationStarted;

Уведомляет о начале воспроизведения анимации. Примечание: Этот сигнал не выдаётся, если анимация повторяется.

Параметры обработчика
ИмяТипПо умолчанию
animNameStringName—
CachesClearedСобытие
# CachesCleared
C#
public event Action CachesCleared;

Уведомляет об очистке кэшей автоматически или вручную с помощью AnimationMixer.ClearCaches.

MixerAppliedСобытие
# MixerApplied
C#
public event Action MixerApplied;

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

MixerUpdatedСобытие
# MixerUpdated
C#
public event Action MixerUpdated;

Уведомляет об обновлении процесса, связанного с свойством.

AnimationMixer.AnimationCallbackModeDiscrete

ЗначениеОписание
Dominant = 0

Значение дорожки Animation.UpdateMode.Discrete имеет приоритет при смешивании значений дорожки Animation.UpdateMode.Continuous или Animation.UpdateMode.Capture и значений дорожки Animation.UpdateMode.Discrete.

ForceContinuous = 2

Всегда лечите Animation.UpdateMode.Discrete значение трека как Animation.UpdateMode.Continuous при этом Animation.InterpolationType.NearestЭто поведение по умолчанию для AnimationTree. Если трек значений имеет неинтерполярные ключевые значения типа, то он преобразуется во внутреннее использование AnimationMixer.AnimationCallbackModeDiscrete.Recessive при этом Animation.UpdateMode.Discrete. Неинтерполярный список типа:

Recessive = 1

Значение дорожки Animation.UpdateMode.Continuous или Animation.UpdateMode.Capture имеет приоритет при смешивании значений дорожки Animation.UpdateMode.Continuous или Animation.UpdateMode.Capture и значений дорожки Animation.UpdateMode.Discrete. Это поведение по умолчанию для AnimationPlayer.

AnimationMixer.AnimationCallbackModeMethod

ЗначениеОписание
Deferred = 0

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

Immediate = 1

Вызывайте методы немедленно при достижении их в анимации.

AnimationMixer.AnimationCallbackModeProcess

ЗначениеОписание
Idle = 1

Анимация процесса во время кадров процесса (см. Entity.NotificationInternalProcess).

Manual = 2

Не обрабатывать анимацию. Используйте AnimationMixer.Advance для ручной обработки анимации.

Physics = 0

Анимация процесса во время физических кадров (см. Entity.NotificationInternalPhysicsProcess). Это особенно полезно при анимации физических тел.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.