# Keyframe

> A keyframe that can be injected into an AnimationCurve.

## Definition

* **Type:** Struct
* **Namespace:** [UnityEngine](/engine/6000.7/script-reference/unityengine.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public struct Keyframe
```

## Remarks

Keyframes are used to control how the value of an [AnimationCurve](/engine/6000.7/script-reference/unityengine/animationcurve.md) changes over time. Each Keyframe is determined by its position in the [AnimationCurve](/engine/6000.7/script-reference/unityengine/animationcurve.md) through the [Keyframe.time](/engine/6000.7/script-reference/unityengine/keyframe/time.md) (horizontal axis) and [Keyframe.value](/engine/6000.7/script-reference/unityengine/keyframe/value.md) (vertical axis) properties. You can control how interpolation is handled between different Keyframes and the [AnimationCurve](/engine/6000.7/script-reference/unityengine/animationcurve.md) slopes through the [Keyframe.inTangent](/engine/6000.7/script-reference/unityengine/keyframe/intangent.md), [Keyframe.outTangent](/engine/6000.7/script-reference/unityengine/keyframe/outtangent.md), [Keyframe.weightedMode](/engine/6000.7/script-reference/unityengine/keyframe/weightedmode.md), [Keyframe.inWeight](/engine/6000.7/script-reference/unityengine/keyframe/inweight.md) and [Keyframe.outWeight](/engine/6000.7/script-reference/unityengine/keyframe/outweight.md) properties. Note that unlike what the [Keyframe.time](/engine/6000.7/script-reference/unityengine/keyframe/time.md) property name might imply, it is not actually tied to time and can simply be thought of as a position on the horizontal axis of a two-dimensional space.

**Hermite Segment**

When both keyframes [weightedMode](/engine/6000.7/script-reference/unityengine/keyframe/weightedmode.md) are set to `WeightedMode.None`, the curve segment is interpolated using a Hermite curve algorithm. Hermite evaluates faster than Bezier and is the default [weightedMode](/engine/6000.7/script-reference/unityengine/keyframe/weightedmode.md) for a [Keyframe](/engine/6000.7/script-reference/unityengine/keyframe.md).

**Bezier Segment**

Setting [weightedMode](/engine/6000.7/script-reference/unityengine/keyframe/weightedmode.md) will change how the neighbouring segments are interpolated. Weighted segments are interpolated using a Bezier curve algorithm. For a given weighted keyframe, the interpolating function uses the [Keyframe.outWeight](/engine/6000.7/script-reference/unityengine/keyframe/outweight.md) value and the next keyframe’s [Keyframe.inWeight](/engine/6000.7/script-reference/unityengine/keyframe/inweight.md) alongside both keyframes [values](/engine/6000.7/script-reference/unityengine/keyframe/value.md) to calculate the curve. If no weight is set (when either keyframe [Keyframe.weightedMode](/engine/6000.7/script-reference/unityengine/keyframe/weightedmode.md) is set to `WeightedMode.None`), then a weight value of 1/3 is used.

Additional Resources: [AnimationCurve.AddKey](/engine/6000.7/script-reference/unityengine/animationcurve/addkey.md), [AnimationCurve.keys](/engine/6000.7/script-reference/unityengine/animationcurve/keys.md), [AnimationCurve.Evaluate](/engine/6000.7/script-reference/unityengine/animationcurve/evaluate.md).

## Examples

```csharp
using UnityEngine;

//This script makes the GameObject move back and forth from -5 to +5 on the x-axis
public class KeyFrameExample : MonoBehaviour
{
    AnimationCurve  animCurve = null;

    void Start()
    {
        Keyframe[] ks = new Keyframe[2];

        ks[0] = new Keyframe(0f, -5f); //Create a Keyframe at time 0 with a value of -5f

        ks[1] = new Keyframe(1f, 5f); //Create a Keyframe at time 1 with a value of 5f

        animCurve = new AnimationCurve(ks);
        animCurve.postWrapMode = WrapMode.PingPong; //Set the WrapMode to PingPong in order to make the GameObject go back and forth
    }

    void Update()
    {
        if (animCurve != null)
            transform.position = new Vector3(animCurve.Evaluate(Time.time), 0.0f, 0.0f);
    }
}
```

## Constructors

| Constructor                                                                                                                                                                                                   | Description                                                                                                                                                                                                                  |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Keyframe(System.Single,System.Single)](/engine/6000.7/script-reference/unityengine/keyframe/ctor.md#keyframe\(float-float\))                                                                                 | Creates a keyframe with a [Keyframe.weightedMode](/engine/6000.7/script-reference/unityengine/keyframe/weightedmode.md) defaulting to [WeightedMode.None](/engine/6000.7/script-reference/unityengine/weightedmode/none.md). |
| [Keyframe(System.Single,System.Single,System.Single,System.Single)](/engine/6000.7/script-reference/unityengine/keyframe/ctor.md#keyframe\(float-float-float-float\))                                         | Creates a keyframe with a [Keyframe.weightedMode](/engine/6000.7/script-reference/unityengine/keyframe/weightedmode.md) defaulting to [WeightedMode.None](/engine/6000.7/script-reference/unityengine/weightedmode/none.md). |
| [Keyframe(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)](/engine/6000.7/script-reference/unityengine/keyframe/ctor.md#keyframe\(float-float-float-float-float-float\)) | Creates a keyframe with a [Keyframe.weightedMode](/engine/6000.7/script-reference/unityengine/keyframe/weightedmode.md) defaulting to [WeightedMode.Both](/engine/6000.7/script-reference/unityengine/weightedmode/both.md). |

## Properties

| Property                                                                             | Description                                                                                                                    |
| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
| [inTangent](/engine/6000.7/script-reference/unityengine/keyframe/intangent.md)       | Sets the incoming tangent for this key. The incoming tangent affects the slope of the curve from the previous key to this key. |
| [inWeight](/engine/6000.7/script-reference/unityengine/keyframe/inweight.md)         | Sets the incoming weight for this key. The incoming weight affects the slope of the curve from the previous key to this key.   |
| [outTangent](/engine/6000.7/script-reference/unityengine/keyframe/outtangent.md)     | Sets the outgoing tangent for this key. The outgoing tangent affects the slope of the curve from this key to the next key.     |
| [outWeight](/engine/6000.7/script-reference/unityengine/keyframe/outweight.md)       | Sets the outgoing weight for this key. The outgoing weight affects the slope of the curve from this key to the next key.       |
| [time](/engine/6000.7/script-reference/unityengine/keyframe/time.md)                 | The time of the keyframe.                                                                                                      |
| [value](/engine/6000.7/script-reference/unityengine/keyframe/value.md)               | The value of the curve at keyframe.                                                                                            |
| [weightedMode](/engine/6000.7/script-reference/unityengine/keyframe/weightedmode.md) | Weighted mode for the keyframe.                                                                                                |
