# Slerp

> Spherically linear interpolates between unit quaternions a and b by a ratio of t.

## Definition

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

## Slerp(Quaternion, Quaternion, float)

Spherically linear interpolates between unit quaternions `a` and `b` by a ratio of `t`.

```csharp
public static Quaternion Slerp(Quaternion a, Quaternion b, float t)
```

### Parameters

**** (\[Quaternion]\(/engine/6000.7/script-reference/unityengine/quaternion)): Start unit quaternion value, returned when t = 0.**** (\[Quaternion]\(/engine/6000.7/script-reference/unityengine/quaternion)): End unit quaternion value, returned when t = 1.**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): Interpolation ratio. Value is clamped to the range \[0, 1].

### Returns

| Type                                                                    | Description                                                                 |
| ----------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| [Quaternion](/engine/6000.7/script-reference/unityengine/quaternion.md) | A unit quaternion spherically interpolated between quaternions `a` and `b`. |

### Remarks

Use this to create a rotation which smoothly interpolates between the first unit quaternion `a` to the second unit quaternion `b`, based on the value of the parameter `t`. If the value of the parameter is close to 0, the output will be close to `a`, if it is close to 1, the output will be close to `b`.

```csharp
// Interpolates rotation between the rotations "from" and "to"
// (Choose from and to not to be the same as
// the object you attach this script to)

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    public Transform from;
    public Transform to;

    private float timeCount = 0.0f;

    void Update()
    {
        transform.rotation = Quaternion.Slerp(from.rotation, to.rotation, timeCount);
        timeCount = timeCount + Time.deltaTime;
    }
}
```

Additional Resources: [Quaternion.Lerp](/engine/6000.7/script-reference/unityengine/quaternion/lerp.md), [Quaternion.SlerpUnclamped](/engine/6000.7/script-reference/unityengine/quaternion/slerpunclamped.md).

## Slerp(Quaternion, Quaternion, float)

Spherically linear interpolates between unit quaternions `a` and `b` by a ratio of `t`.

```csharp
public static Quaternion Slerp(in Quaternion a, in Quaternion b, float t)
```

### Parameters

**** (\[Quaternion]\(/engine/6000.7/script-reference/unityengine/quaternion)): Start unit quaternion value, returned when t = 0.**** (\[Quaternion]\(/engine/6000.7/script-reference/unityengine/quaternion)): End unit quaternion value, returned when t = 1.**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): Interpolation ratio. Value is clamped to the range \[0, 1].

### Returns

| Type                                                                    | Description                                                                 |
| ----------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| [Quaternion](/engine/6000.7/script-reference/unityengine/quaternion.md) | A unit quaternion spherically interpolated between quaternions `a` and `b`. |

### Remarks

Use this to create a rotation which smoothly interpolates between the first unit quaternion `a` to the second unit quaternion `b`, based on the value of the parameter `t`. If the value of the parameter is close to 0, the output will be close to `a`, if it is close to 1, the output will be close to `b`.

```csharp
// Interpolates rotation between the rotations "from" and "to"
// (Choose from and to not to be the same as
// the object you attach this script to)

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    public Transform from;
    public Transform to;

    private float timeCount = 0.0f;

    void Update()
    {
        transform.rotation = Quaternion.Slerp(from.rotation, to.rotation, timeCount);
        timeCount = timeCount + Time.deltaTime;
    }
}
```

Additional Resources: [Quaternion.Lerp](/engine/6000.7/script-reference/unityengine/quaternion/lerp.md), [Quaternion.SlerpUnclamped](/engine/6000.7/script-reference/unityengine/quaternion/slerpunclamped.md).
