この記事は Unity 公式スクリプトリファレンスの Vector3.Lerp を日本語に翻訳し、若干の補足を加えたものです。
翻訳元のページは以下となります。
何故か、Vector3.Lerp の日本語訳がないので、翻訳しました。
原文を直訳するだけでは分かりにくい文章になってしまうので、分かりやすくなるよう文章を変えたり、足したりしています。
Vector3.Lerp
補足
Lerp とは、線形補間の英語 Linear Interpolation(リニア・インターポレイション)を省略した略語です。
2つの点を直線で結ぶことを線形補間と言います。
2つの点を直線で結ぶことを線形補間と言います。
メソッドの定義
public static Vector3 Lerp (Vector3 a, Vector3 b, float t);
概要
2点間を線形補間する。
説明
補間式 t を使って、点 a と b の間を補間します。
引数 t の値は 0~1 の範囲をとります。
このメソッドは、2つの終点の間を直線で進むときに、どれくらい進むか?を割合で指定し、その進めた位置(点)を求めるために使います。
例えば、なんらかのオブジェクトを2つの点の間で少しづつ移動させるような状況で使います。
メソッドは (b – a) * t と等しい値を返します。
t = 0 の場合は a を返します。
t = 1 の場合は b を返します。
t = 0.5 の場合は、a と b のちょうど中間の位置(点)を返します。
サンプルソースコード
using UnityEngine; public class ExampleClass : MonoBehaviour { // 今回の旅の出発地点と終着地点のマーカーとして使うオブジェクトの transform public Transform startMarker; public Transform endMarker; // 1秒間で進む距離 public float speed = 1.0F; // 出発時の時刻 private float startTime; // 2つのマーカー間の直線距離 private float journeyLength; void Start() { // 出発時の時刻を記録 startTime = Time.time; // 今回の旅の直線距離(総距離)を計算 journeyLength = Vector3.Distance(startMarker.position, endMarker.position); } // 終着地点に向かって進む void Update() { // 出発時の時刻から経過した時間を使って、進むべき距離を計算 // 進むべき距離 = 経過時間 × 1秒間で進む距離 float distCovered = (Time.time - startTime) * speed; // 進むべき距離の割合 = 進むべき距離 ÷ 総距離 // ※ここで、進むべき距離は分かったが、実際にどこへ行けば良いのか?具体的な位置(点)はまだ分かっていない float fractionOfJourney = distCovered / journeyLength; // 進むべき距離の割合から Vector3.Lerp を使って具体的な位置(点)を求める // 進むべき位置(点)が分かったので、その位置に進む transform.position = Vector3.Lerp(startMarker.position, endMarker.position, fractionOfJourney); } }