Lerpとは?

Lerpとは、Linear Interpolationの略で、線形補間といった意味になります。

値AとBのの間を経過時間で線形的に補間し、その間の値を返すメソッドがUnityにはいくつか用意されています。

// 関数のイメージ
public static float Lerp(float a, float b, float t);
引数意味
a補間の開始値
b補間の終了値
t補間の進行度(0〜1の範囲)

t=0ならaの値、t=1ならbの値を返します。

tに0.5を渡すと、aとbの丁度中間の値を返します。

tが0.0から1.0に変化する間、aからbの値を返すことになります。

float

Mathf.Lerpは、Unityで用意されている算術関数で、浮動小数(float型)を線形補間するためのメソッドです。

以下の例では、0と100の中間で50が返ってきます。

時間経過で画像の透明度を変化させたい場合などに使用できます。

float result = Mathf.Lerp(0f, 100f, 0.5f);

Vector2

Vector2構造体にもLerpメソッドがあります。

2次元ベクトルを線形補間するために使用できます。

2Dの座標空間上を滑らかに移動させる場合に役立ちます。

Vector2 start = new Vector2(0f, 0f);
Vector2 end = new Vector2(10f, 10f);

Vector2 result = Vector2.Lerp(start, end, 0.5f)

Vector3

Vector3構造体にもLerpメソッドがあります。

3次元ベクトルを線形補間するために使用できます。

3Dゲームで座標空間上を滑らかに移動させる場合に役立ちます。

Vector3 start = new Vector3(0f, 0f, 0f);
Vector3 end = new Vector3(10f, 10f, 10f);

Vector3 result = Vector3.Lerp(start, end, 0.5f)

Vector4

Vector4構造体にもあります。

4次元ベクトルを線形補間するために使用できます。

3次元の座標情報に加えて、他の情報も含めて補間したい場合に使われることが多いです。

Vector4 start = new Vector4(0f, 0f, 0f, 0f);
Vector4 end = new Vector4(10f, 10f, 10f, 0f);

Vector4 result = Vector4.Lerp(start, end, 0.5f)

Quaternion

Quaternion構造体にもあります。

Color

Color.Lerpは色の線形補間するために使用できます。

時間経過で色を変化させたい場合に使用できます。

Color startColor = Color.red;
Color endColor = Color.blue;
float t = 0.3f;

Color newColor = Color.Lerp(startColor, endColor, t);

LerpUnclamped

Lerpに渡す時間は、0.0〜1.0に限られます。

範囲外の値を渡してもその範囲に修正されます。

範囲を超えた時間を渡したい場合は、LerpUnclampedを使用します。

以下の例では、15が返ってきます。

float result = Mathf.LerpUnclamped(0, 10, 1.5f);

まとめ

今回はLerpメソッドについて説明しました。

Lerpは単純な線形補間用のメソッドですが、2つの値を時間経過で単純に補間したい場合に役に立ちます。

オブジェクトを2点間で移動させたり、

透明度を変化させてフェードアウトさせたり、

UIをアニメーションさせたり、

ダメージを受けた時にゲージを減らしたり、

結構使いどころがあります。

適切に活用することで直感的で自然な動きや変化を実現できます。

まだ使ったことが無い場合は是非取り入れてみてください。