Version: 2022.3
LanguageEnglish
  • C#

Vector3.Lerp

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

Declaration

public static Vector3 Lerp(Vector3 a, Vector3 b, float t);

Parameters

a Start value, returned when t = 0.
b End value, returned when t = 1.
t Value used to interpolate between a and b.

Returns

Vector3 Interpolated value, equals to a + (b - a) * t.

Description

Linearly interpolates between two points.

Interpolates between the points a and b by the interpolant t. The parameter t is clamped to the range [0, 1]. This is most commonly used to find a point some fraction of the way along a line between two endpoints (e.g. to move an object gradually between those points).

The value returned equals a + (b - a) * t (which can also be written a * (1-t) + b*t).
When t = 0, Vector3.Lerp(a, b, t) returns a.
When t = 1, Vector3.Lerp(a, b, t) returns b.
When t = 0.5, Vector3.Lerp(a, b, t) returns the point midway between a and b.

// A short example of Vector3.Lerp usage.
// Add it to an object in your scene, and at Play time it will draw in the Scene View a small yellow line between the scene origin, and a position interpolated between two other positions (one on the up axis, one on the forward axis).

using UnityEngine;

public class ExampleClass : MonoBehaviour { public int interpolationFramesCount = 45; // Number of frames to completely interpolate between the 2 positions int elapsedFrames = 0;

void Update() { float interpolationRatio = (float)elapsedFrames / interpolationFramesCount;

Vector3 interpolatedPosition = Vector3.Lerp(Vector3.up, Vector3.forward, interpolationRatio);

elapsedFrames = (elapsedFrames + 1) % (interpolationFramesCount + 1); // reset elapsedFrames to zero after it reached (interpolationFramesCount + 1)

Debug.DrawLine(Vector3.zero, Vector3.up, Color.green); Debug.DrawLine(Vector3.zero, Vector3.forward, Color.blue); Debug.DrawLine(Vector3.zero, interpolatedPosition, Color.yellow); } }
// A longer example of Vector3.Lerp usage.
// Drop this script under an object in your scene, and specify 2 other objects in the "startMarker"/"endMarker" variables in the script inspector window.
// At play time, the script will move the object along a path between the position of those two markers.

using UnityEngine; using System.Collections;

public class ExampleClass : MonoBehaviour { // Transforms to act as start and end markers for the journey. public Transform startMarker; public Transform endMarker;

// Movement speed in units per second. public float speed = 1.0F;

// Time when the movement started. private float startTime;

// Total distance between the markers. private float journeyLength;

void Start() { // Keep a note of the time the movement started. startTime = Time.time;

// Calculate the journey length. journeyLength = Vector3.Distance(startMarker.position, endMarker.position); }

// Move to the target end position. void Update() { // Distance moved equals elapsed time times speed.. float distCovered = (Time.time - startTime) * speed;

// Fraction of journey completed equals current distance divided by total distance. float fractionOfJourney = distCovered / journeyLength;

// Set our position as a fraction of the distance between the markers. transform.position = Vector3.Lerp(startMarker.position, endMarker.position, fractionOfJourney); } }

Additional resources: Slerp, LerpUnclamped.