キャラクターを移動させたい時、いきなり目的地に飛ぶのではなく、滑らかに移動させたい。
でも、どうすれば滑らかな動きになるのか分からない。
そんな悩みを抱えていませんか。
キャラクターを滑らかに移動させるには、Lerp(Linear Interpolation、線形補間)という技術を使います。
Lerpを使えば、現在の位置から目標の位置へ、一定の割合で滑らかに移動できますね。
この記事では、キャラクターを滑らかに移動させる方法を、Unity実装例とともに解説します。
滑らかな移動とは何か(ゲーム制作目線)

滑らかな移動とは、現在の位置から目標の位置へ、一定の速度で徐々に近づけることです。
いきなり目的地に飛ぶのではなく、中間位置を計算して、フレームごとに更新していきます。
ゲームでは、キャラクターの移動、カメラの追従、UI要素の移動、オブジェクトの配置など、様々な場面で滑らかな移動が必要です。
Unityでは、Vector3.Lerpという関数が用意されており、3D空間での位置の補間を簡単に実装できます。
Lerpの基本的な考え方
Lerpは、2つの値の間を、指定した割合で計算する処理です。
位置の場合、現在の位置と目標の位置の間を、補間係数t(0.0〜1.0)で補間します。
tが0なら現在の位置、tが1なら目標の位置、tが0.5なら中間位置が返されます。
毎フレーム、tの値を更新すれば、徐々に目標の位置に近づいていきます。
移動速度の制御
滑らかな移動を実現するには、移動速度を制御することが重要です。
Time.deltaTimeを使うことで、フレームレートに依存しない一定の速度で移動できますね。
また、一定の割合(例:10%)を毎フレーム適用する方法もあります。
どちらの方法を使うかは、目的に応じて選択します。
ゲームでの具体的な使い道

滑らかな移動が、ゲームでどう使われているか、具体的なシーンを確認してみましょう。
キャラクターの移動
プレイヤーキャラクターが、特定の位置へ移動する時、滑らかな移動が必要です。
例えば、クリックした位置へ移動する時や、アイテムを取得するために移動する時です。
いきなり目的地に飛ぶと、操作感が悪くなります。
滑らかに移動させることで、自然な動きになります。
カメラの追従
カメラがプレイヤーを追従する時も、滑らかな移動が重要です。
カメラが急に動くと、プレイヤーが迷子になってしまいます。
滑らかに追従させることで、見やすい映像になります。
UI要素の移動
UI要素が画面内を移動する時も、滑らかな移動が使われます。
メニューの開閉、ボタンの表示・非表示など、UIのアニメーションです。
滑らかに移動させることで、見た目が洗練されます。
オブジェクトの配置
ゲームオブジェクトが特定の位置へ移動する時にも、滑らかな移動が役立ちます。
敵キャラクターが特定の位置へ移動する時、アイテムがプレイヤーに向かって移動する時などです。
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
なぜLerpで「心地よい移動」が作れるのか?数学的仕組み

滑らかな移動の正体は、数学的には「2点間を特定の比率で切り分けること」にあります。
UnityのLerpが内部で何をしているのか、その計算の裏側を覗いてみましょう。
線形補間(Lerp)の正体:比率 $t$ による位置決定
Lerpは「Linear Interpolation」の略で、日本語では「線形補間」と呼びます。
これは、開始点 $a$ と終了点 $b$ を結ぶ直線の上で、「今どのあたり(何%)にいるか」を計算する処理です。
計算式を詳しく見ると、その仕組みがより鮮明になります。
この式の $(b – a)$ は「ゴールまでの残り距離」を表し、それに割合 $t$ を掛けることで「今進むべき距離」を出しています。
つまり、「現在地に、残り距離の $t$ 割を足す」という極めてシンプルな足し算なのです。
Update関数で「滑らかな減速」が生まれるマジック
多くの開発者が transform.position = Vector3.Lerp(transform.position, target, 0.1f) のようなコードを書きます。
ここで面白いのは、第3引数を固定(例えば0.1)にしても、動きが一定(等速)にはならない点です。
毎フレーム、その時点での「残り距離の10%」を移動し続けると、次のような現象が起こります。
- 最初は「大きな残り距離」の10%なので、グンと大きく動く。
- ゴールに近づくほど「残り距離」が小さくなるため、10%の移動量もミリ単位で小さくなっていく。
これが、数学的に導き出される「吸い付くような減速(イージング)」の正体です。
物理的な摩擦をシミュレーションしなくても、Lerp一行で自然界に近い動きが再現できるのはこのためです。
「キビキビ動かす」か「しっとり動かす」かの制御
この数学的な特性を理解していれば、ゲームの「手触り」を自由自在にコントロールできます。
1つ目は、Time.deltaTimeを活用した動的な割合制御です。
Time.deltaTime * speed を使うことで、マシンの性能(フレームレート)に関わらず、常に一定の「時間あたりの進捗」を保証できます。
2つ目は、完全に一定の速度(等速)での移動です。
もしRPGの歩行グラフィックのように、最初から最後まで同じ速さで動かしたい場合は、Lerpの第3引数に「(現在の位置ではなく)開始時からの経過時間」を渡す必要があります。
- Update内で現在地を更新するLerpは「指数関数的」な動きになり、自然な手触りを作る。
- $t$ の値が大きすぎると一瞬でワープし、小さすぎるといつまでもゴールに辿り着かない(無限に近づき続ける)。
- 数学上は「0.999…」と永遠に続くため、実務では一定距離まで近づいたら値を固定する処理が不可欠。
まとめ

この記事では、キャラクターを滑らかに移動させる方法について見てきました。
重要なポイントをおさらいします。
重要なポイント:
- 滑らかな移動は、Lerp(線形補間)という技術で実現できる
- Time.deltaTimeを使った固定速度か、一定の割合を適用すれば、滑らかに移動できる
- 毎フレーム補間を更新すれば、徐々に目標の位置に近づいていく
- 目標の位置に到達したかを判定し、必要に応じて直接設定する処理を追加することが重要
- キャラクターの移動、カメラの追従、UI要素の移動など、様々な場面で活用できる
滑らかな移動は、ゲームの操作感を大きく左右する重要な要素です。
Lerpを使えば、簡単に実装できます。
まずは、基本的な実装から始めて、実際の動作を確認してみましょう。
実際に試してみることで、滑らかな移動の効果を実感できるはずです。
数学的な理論だけでなく、実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、ゲーム開発で使う数学を、実装しながら体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント