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

AnimationCurve

класс в UnityEngine

Выполнено в:UnityEngine.CoreModule

Описание

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

Класс AnimationCurve — один из основных компонентов системы анимации Unity.
Чтобы построить простую AnimationCurve из кода, используйте один из следующих статических вспомогательных методов:

  • Используйте AnimationCurve.EaseInOut для кривой, которая плавно переходит от одного значения к другому.
  • Используйте AnimationCurve.Linear для кривой, которая линейным образом переходит от одного значения к другому.
  • Используйте AnimationCurve.Constant для кривой, которая сохраняет постоянное значение на протяжении всей своей продолжительности.

Чтобы построить комплекс AnimationCurve, используйте AnimationCurve.AnimationCurve и AnimationCurve.AddKey.

После построения комплекса, используйте AnimationCurve для анимирования следующих свойств:

Следующий пример иллюстрирует, как использовать AnimationCurve для постепенного изменения интенсивности Light.

using System.Collections;
using UnityEngine;

/// <summary>
/// Increases or decreases light intensity based on an ease-in-ease-out curve.
/// </summary>
[RequireComponent(typeof(Light))]
public class SmoothLight : MonoBehaviour
{
    float m_MaxIntensity;
    AnimationCurve m_LightCurve;
    float m_CurrentTime;
    public float m_Direction;
    Light m_Light;

    void Start()
    {
        m_Light = GetComponent<Light>();
        m_MaxIntensity = m_Light.intensity;
        m_LightCurve = AnimationCurve.EaseInOut(0, 0, 1, m_MaxIntensity);

        //Initialize the current time to represent the ratio between 0 and max intensity
        var currentIntensity = Mathf.Clamp(m_Light.intensity, 0.0f, m_MaxIntensity);
        m_CurrentTime = currentIntensity / m_MaxIntensity;
    }

    //Use this method to bring the light back to the maximum intensity over one second.
    public IEnumerator TurnUp()
    {
        //Increase the intensity until we reach MaxIntensity or a TurnDown call is made.
        m_Direction = 1.0f;
        while (m_Direction > 0.0f && m_CurrentTime < m_MaxIntensity)
        {
            m_CurrentTime += Time.deltaTime;
            m_Light.intensity = m_LightCurve.Evaluate(m_CurrentTime);
            yield return null;
        }
    }

    //Use this method to bring the light back to zero intensity over one second.
    public IEnumerator TurnDown()
    {
        //Decrease the intensity until we reach MaxIntensity or a TurnDown call is made.
        m_Direction = -1.0f;
        while (m_Direction < 0.0f && m_CurrentTime > 0)
        {
            m_CurrentTime -= Time.deltaTime;
            m_Light.intensity = m_LightCurve.Evaluate(m_CurrentTime);
            yield return null;
        }
    }
}

Свойства

Свойство Описание
keysВсе ключи определены в кривой анимации.
lengthКоличество ключей в кривой. (только для чтения)
postWrapModeПоведение анимации после последнего ключевого кадра.
preWrapModeПоведение анимации перед первым ключевым кадром.
это[int]Получает ключ в индексе. (Только чтение)

Конструкторы

Конструктор Описание
AnimationCurveСоздает кривую анимации из произвольного количества ключевых кадров.

Открытые методы

Метод Описание
AddKeyДобавить новый ключ к кривой.
ClearKeysУдаляет все KeyFrame из этого экземпляра AnimationCurve.
CopyFromКопирует ключи и свойства указанного объекта AnimationCurve в этот экземпляр класса AnimationCurve.
EvaluateОценка кривой во времени.
GetHashCodeHashCode для кривой анимации, рассчитанной с использованием всех индивидуальных ключевых кадров.
GetKeysПолучить все ключи, определенные в AnimationCurve.
MoveKeyПеремещает ключ в индексе в key.time и key.value.
RemoveKeyУдаление ключа.
SetKeysУстанавливает все ключи, определенные в AnimationCurve.
SmoothTangentsСглаживание входящих и исходящих каскадов ключевого кадра на индексе.

Статические методы

Метод Описание
ConstantСоздает постоянную "кривую", начинающуюся на timeStart, заканчивающуюся на timeEnd, и устанавливает значение на значение.
EaseInOutСоздает кривую плавного входа и выхода, начинающуюся в timeStart, valueStart и заканчивающуюся в timeEnd, valueEnd.
LinearПрямая линия, начинающаяся в timeStart, valueStart и заканчивающаяся в timeEnd, valueEnd.