Version: Unity 6.1 Beta (6000.1)
LanguageEnglish
  • C#

AnimationCurve

class in UnityEngine

/

Implemented in:UnityEngine.CoreModule

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

Description

Represents the variation of a value over time. AnimationCurves are typically used to animate the value of Component properties in AnimationClip, but you can use them to dynamically drive any float value.

The AnimationCurve class is a core component of Unity's Animation System.
To construct a simple AnimationCurve through code, use one of the following static utility methods:

To construct a complex AnimationCurve, use AnimationCurve.AnimationCurve and AnimationCurve.AddKey.

Once constructed, use an AnimationCurve to animate the following properties:

The following example illustrates how to use an AnimationCurve to gradually change the intensity of a 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;
        }
    }
}

Properties

keysAll keys defined in the animation curve.
lengthThe number of keys in the curve. (Read Only)
postWrapModeThe behaviour of the animation after the last keyframe.
preWrapModeThe behaviour of the animation before the first keyframe.
this[int]Retrieves the key at index. (Read Only)

Constructors

AnimationCurveCreates an animation curve from an arbitrary number of keyframes.

Public Methods

AddKeyAdd a new key to the curve.
ClearKeysErases all KeyFrame from this instance of the AnimationCurve.
CopyFromCopies the keys and properties of the specified AnimationCurve object into this instance of the AnimationCurve class.
EvaluateEvaluate the curve at time.
GetHashCodeA HashCode for the animation curve, computed using all individual Keyframe.
MoveKeyMoves the key at index to key.time and key.value.
RemoveKeyRemoves a key.
SmoothTangentsSmooth the in and out tangents of the keyframe at index.

Static Methods

ConstantCreates a constant "curve" starting at timeStart, ending at timeEnd, and set to the value value.
EaseInOutCreates an ease-in and out curve starting at timeStart, valueStart and ending at timeEnd, valueEnd.
LinearA straight Line starting at timeStart, valueStart and ending at timeEnd, valueEnd.