概要
Unityでゲーム開発を始めたばかりのとき、オブジェクトの移動や回転を実装する際に、transform.position = targetPosition; のように直接座標を代入していませんか?
この方法では、オブジェクトは一瞬で目標地点にワープしてしまい、「カクカク」とした不自然な動きになってしまいます。特にプレイヤーキャラクターやカメラの動きが不自然だと、ゲームの品質は大きく損なわれてしまいます。
私たちが目指すのは、まるでプロのゲームのような 「滑らかで心地よい」 アニメーションです。この滑らかな動きを実現するために、Unity開発者が必ずと言っていいほど利用するのが、 Lerp (ラープ)と Slerp (スラープ)という二つの強力な関数です。
この記事では、この二つの補間(ほかん)関数、Lerp(線形補間) と Slerp(球面線形補間) の基本的な概念から、実際のUnityプロジェクトでコピペしてすぐに使える実践的なC#コードまでを、初心者の方にも分かりやすく丁寧に解説します。
Lerp(線形補間)とは?
Lerpは「Linear Interpolation(線形補間)」の略です。これは、二つの値(AとB)の間を、指定した割合(t)で直線的に補間する(埋める)計算手法です。
Unityでは、Vector3.Lerp、Color.Lerp、Mathf.Lerpなど、様々な型に対してこの関数が用意されています。
関数の基本形:
// A: 開始値, B: 終了値, t: 補間係数 (0.0fから1.0f)
結果 = Lerp(A, B, t);
t = 0.0fのとき、結果はAになります。t = 1.0fのとき、結果はBになります。t = 0.5fのとき、結果はAとBのちょうど中間になります。
Lerpは、オブジェクトの移動や色の変化、数値の滑らかな変化など、直線的な変化が必要な場面で最もよく使われます。
Slerp(球面線形補間)とは?
Slerpは「Spherical Linear Interpolation(球面線形補間)」の略です。Lerpが直線的な補間を行うのに対し、Slerpは球面上の最短経路に沿って補間を行います。
Slerpは主にQuaternion(クォータニオン)