Unity 6.3
0 онлайн 63 гостей 3 в системе
Вход

AnimationClip

класс в UnityEngine

Наследуется от:Motion

Реализовано в:UnityEngine.AnimationModule

Description

Предоставляет ассет, назначающий кривые анимации анимируемым свойствам.

The Animation компонент и Animator компонент использует AnimationClip ассет для анимации GameObject and Component properties.

Supported Animatable Types

Когда вы создаёте AnimationClip ассет с Animation компонент, вам необходимо задать legacy в true. Используйте Animation компонент, чтобы анимировать следующие открытые или сериализуемые свойства GameObject or Component:

  • значения float
  • логические значения (приведённые к float)
  • целочисленные значения (приведённые к float)
  • дискретные целочисленные значения (с помощью атрибута DiscreteEvaluationAttribute и переинтерпретируется как float)

For legacy клипов используйте метод SetCurve, чтобы назначать новые кривые и в редакторе, и во время выполнения.

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

  • значения float
  • логические значения (приведённые к float)
  • целочисленные значения (приведённые к float)
  • дискретные целочисленные значения (используйте DiscreteEvaluationAttribute атрибут, интерпретированный как float)
  • Значения ссылок на объекты (сохраняются как ObjectReferenceKeyframe)

Создание кривой

В редакторе рекомендуется использовать AnimationUtility.SetEditorCurve and AnimationUtility.SetEditorCurves методы, чтобы назначить один или несколько AnimationCurve объекты для каждого свойства типа float и для каждого логического, целочисленного или дискретного целочисленного значения, представленного как float.

И в редакторе, и во время выполнения метод SetCurve позволяет назначить AnimationCurve к клипу анимации. Клип анимации можно изменять и во время выполнения, но такое изменение распознаёт только Animation component. The Animator компоненту требуется, чтобы клипы были скомпилированы в оптимизированное представление, а такая компиляция во время выполнения недоступна.

Use the AnimationUtility.SetObjectReferenceCurve and AnimationUtility.SetObjectReferenceCurves методы, чтобы создать и назначить новые ObjectReferenceKeyframe массивы свойств-ссылок на объекты. Note: Это поддерживается только Animator component.

Запрос к кривой

Use the AnimationUtility.GetEditorCurve метод, чтобы получить AnimationCurve для свойства типа float.

Use the AnimationUtility.GetObjectReferenceCurve метод, чтобы получить ObjectReferenceKeyframe массив для свойства-ссылки на объект. Note: Это поддерживается только Animator component.

Управление событиями анимации

В редакторе используйте AnimationUtility.SetAnimationEvents метод, чтобы задать или заменить AnimationEvent массив для AnimationClip. Use the AnimationUtility.GetAnimationEvents метод, чтобы получить AnimationEvent массив из AnimationClip.

Дополнительные ресурсы: Animation Animator AnimationCurve ObjectReferenceKeyframe AnimationEvent

// Create a new MonoBehaviour in your project and paste in the following code.

using UnityEngine;

// The example creates a new MonoBehaviour that is used alongside a Camera component.
// At runtime, the component will create a procedural clip to animate the Camera field of view
// property and automatically play that clip on an Animation component.
[RequireComponent(typeof(Camera))]
public class ProceduralFieldOfViewAnimation : MonoBehaviour
{
    void OnEnable()
    {
        AnimationClip clip = new AnimationClip();
        AnimationCurve curve = AnimationCurve.Linear(0.0f, 60.0f, 10.0f, 90.0f);
        clip.SetCurve("", typeof(Camera), "field of view", curve);
        clip.legacy = true;

        if (!TryGetComponent<Animation>(out var animation))
            animation = gameObject.AddComponent<Animation>();

        animation.AddClip(clip, "animfov");
        animation.Play("animfov");
    }
}
using UnityEditor;
using UnityEngine;

static class AnimationClipWithAnimationCurvesExample
{
    // This example creates an AnimationClip with a single frame that captures the pose of a GameObject hierarchy.
    // The clip is saved as an asset in the project.
    [MenuItem("Example/Create Animation Clip Pose From GameObject")]
    static void CreateAnimationClipPoseFromGameObject()
    {
        var selectedGameObject = Selection.activeGameObject;
        if (selectedGameObject == null)
        {
            Debug.LogError("Please select a GameObject to create a clip for.");
            return;
        }

        AnimationClip clip = new AnimationClip();

        var transforms = selectedGameObject.GetComponentsInChildren<Transform>();
        var numberOfCurves = transforms.Length * 10; // 3 for position, 4 for rotation, 3 for scale

        var bindings = new EditorCurveBinding[numberOfCurves];
        var curves = new AnimationCurve[numberOfCurves];

        for (int i = 0; i < transforms.Length; ++i)
        {
            var startIndex = i * 10;

            var transform = transforms[i];
            var path = AnimationUtility.CalculateTransformPath(transform, selectedGameObject.transform);

            var index = startIndex;
            bindings[index++] = EditorCurveBinding.FloatCurve(path, typeof(Transform), "m_LocalPosition.x");
            bindings[index++] = EditorCurveBinding.FloatCurve(path, typeof(Transform), "m_LocalPosition.y");
            bindings[index++] = EditorCurveBinding.FloatCurve(path, typeof(Transform), "m_LocalPosition.z");

            bindings[index++] = EditorCurveBinding.FloatCurve(path, typeof(Transform), "m_LocalRotation.x");
            bindings[index++] = EditorCurveBinding.FloatCurve(path, typeof(Transform), "m_LocalRotation.y");
            bindings[index++] = EditorCurveBinding.FloatCurve(path, typeof(Transform), "m_LocalRotation.z");
            bindings[index++] = EditorCurveBinding.FloatCurve(path, typeof(Transform), "m_LocalRotation.w");

            bindings[index++] = EditorCurveBinding.FloatCurve(path, typeof(Transform), "m_LocalScale.x");
            bindings[index++] = EditorCurveBinding.FloatCurve(path, typeof(Transform), "m_LocalScale.y");
            bindings[index] = EditorCurveBinding.FloatCurve(path, typeof(Transform), "m_LocalScale.z");

            transform.GetLocalPositionAndRotation(out var localPosition, out var localRotation);
            var localScale = transform.localScale;

            index = startIndex;
            curves[index++] = AnimationCurve.Constant(0f, 1f, localPosition.x);
            curves[index++] = AnimationCurve.Constant(0f, 1f, localPosition.y);
            curves[index++] = AnimationCurve.Constant(0f, 1f, localPosition.z);

            curves[index++] = AnimationCurve.Constant(0f, 1f, localRotation.x);
            curves[index++] = AnimationCurve.Constant(0f, 1f, localRotation.y);
            curves[index++] = AnimationCurve.Constant(0f, 1f, localRotation.z);
            curves[index++] = AnimationCurve.Constant(0f, 1f, localRotation.w);

            curves[index++] = AnimationCurve.Constant(0f, 1f, localScale.x);
            curves[index++] = AnimationCurve.Constant(0f, 1f, localScale.y);
            curves[index] = AnimationCurve.Constant(0f, 1f, localScale.z);
        }

        AnimationUtility.SetEditorCurves(clip, bindings, curves);

        AssetDatabase.CreateAsset(clip, AssetDatabase.GenerateUniqueAssetPath($"Assets/{selectedGameObject.name}-Pose.anim"));
    }
}
using UnityEditor;
using UnityEngine;

static class AnimationClipWithObjectReferenceKeyframesExample
{
    // This example creates an AnimationClip of a sequence of sprites selected
    // in the project view. The clip is saved as an asset in the project.
    [MenuItem("Example/Create Flip Book Animation Clip From Sprites")]
    static void CreateFlipBookAnimationClipFromSprites()
    {
        var selectedSprites = Selection.GetFiltered<Sprite>(SelectionMode.Unfiltered);
        if (selectedSprites == null || selectedSprites.Length == 0)
        {
            Debug.LogError("Please select sprites in the project view to create a clip for.");
            return;
        }

        AnimationClip clip = new AnimationClip();

        var spriteCurve = new ObjectReferenceKeyframe[selectedSprites.Length];
        for (int i = 0; i < selectedSprites.Length; ++i)
        {
            var sprite = selectedSprites[i];
            spriteCurve[i] = new ObjectReferenceKeyframe
            {
                time = i/clip.frameRate,
                value = sprite
            };
        }

        var spriteBinding = EditorCurveBinding.PPtrCurve("", typeof(SpriteRenderer), "m_Sprite");
        AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, spriteCurve);

        AssetDatabase.CreateAsset(clip, AssetDatabase.GenerateUniqueAssetPath($"Assets/FlipBookClip.anim"));
    }
}

Properties

Property Description
emptyВозвращает true, если у клипа анимации нет ни кривых, ни событий.
eventsСобытия анимации для этого клипа анимации.
frameRateЧастота кадров, с которой выбираются ключевые кадры. (Только для чтения)
hasGenericRootTransformВозвращает true, если у Animation есть анимация корневой трансформации.
hasMotionCurvesВозвращает true, если у AnimationClip есть кривые корневого движения.
hasMotionFloatCurvesВозвращает true, если у AnimationClip есть редакторские кривые корневого движения.
hasRootCurvesВозвращает true, если у AnimationClip есть корневые кривые.
humanMotionВозвращает true, если анимация содержит кривую, управляющую гуманоидным ригом.
legacyЗадайте true, если AnimationClip будет использоваться с устаревшим компонентом Animation (а не с Animator).
lengthДлительность анимации в секундах. (Только для чтения)
localBoundsAABB этого клипа анимации в локальном пространстве компонента Animation, к которому он прикреплён.
wrapModeЗадаёт режим зацикливания по умолчанию, используемый в состоянии анимации.

Constructors

Constructor Description
AnimationClipСоздаёт новый клип анимации.

Public Methods

Method Description
AddEventДобавляет событие анимации в клип.
ClearCurvesУдаляет из клипа все кривые.
EnsureQuaternionContinuityВыравнивает ключи кватернионов так, чтобы обеспечить кратчайшие пути интерполяции.
SampleAnimationВыбирает значения анимации в заданный момент времени для всех анимируемых свойств.
SetCurveНазначает кривую для анимации конкретного свойства.
Inherited Members 4

Properties

PropertyDescription
hideFlagsДолжен ли объект быть скрытым, сохраняться вместе со сценой или быть доступным для изменения пользователем?
nameИмя объекта.

Public Methods

MethodDescription
GetInstanceIDВозвращает идентификатор экземпляра объекта.
ToStringВозвращает имя объекта.

Static Methods

MethodDescription
DestroyУдаляет GameObject, компонент или ассет.
DestroyImmediateНемедленно уничтожает указанный объект. Используйте с осторожностью и только в режиме Edit.
DontDestroyOnLoadНе уничтожать целевой объект при загрузке новой сцены.
FindAnyObjectByTypeВозвращает любой активный загруженный объект типа type.
FindFirstObjectByTypeВозвращает первый активный загруженный объект типа type.
FindObjectsByTypeВозвращает список всех загруженных объектов типа type.
InstantiateКлонирует объект original и возвращает клон.
InstantiateAsyncДелает снимок исходного объекта (который должен быть связан с каким-либо GameObject) и возвращает AsyncInstantiateOperation.

Operators

OperatorDescription
boolСуществует ли объект?
operator !=Сравнивает, ссылаются ли два объекта на разные объекты.
operator ==Сравнивает две ссылки на объекты и определяет, указывают ли они на один и тот же объект.