ゲーム開発でオブジェクトを移動させたい場合、瞬時に移動させるのではなく、滑らかに移動させたい場面が多くあります。
「どうやって滑らかに移動させるの?」
「Vector3.Lerpって何?」
「パラメータをどう調整すればいい?」
そんな疑問を抱えている方に向けて、なめらかに移動させる方法について、初心者でも理解できるように詳しく解説します。
\読むだけで終わらせない!実際にゲームを作って実力をつけよう/
トレンド×入門に最適
Unity ノンフィールドRPG
+スレスパ風JRPG講座
Unity6対応・スマホ化対応の最新カリキュラム。今もっとも人気のデッキ構築型ゲームをJRPGと組み合わせて実装。初心者が最初に選ぶ一本として最適です。
王道アクションに挑戦
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
ロックマン風の本格横スクロールACTをスマホ化・広告実装まで対応。7ステージ+ラスボスという市販ゲームに近い本格構成で、リリースまで見据えて作れます。
3D入門に最適
ゼルダ風3Dアクションゲーム
の作り方講座
ゼルダの伝説・モンハン・原神のような3Dアクションをスマホ対応で作れる入門講座。初心者でも全16回でしっかり3D開発の基礎を習得できます。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
なめらかな移動とは

なめらかな移動とは、目標の位置へ段階的に近づいていく移動のことです。
瞬時に移動させるのではなく、補間を使って滑らかに移動させます。
これにより、より自然で見やすい動きを実現できるんです。
なぜなめらかな移動が必要なのか
ゲームでは、オブジェクトを瞬時に移動させると不自然に見える場合があります。
カメラの追従、UIの移動、エフェクトの移動など、様々な場面でなめらかな移動が必要になります。
なめらかな移動を実現することで、ゲームの見た目や操作感が向上します。
基本的な考え方
なめらかな移動を実現するには、現在の位置と目標の位置の間を補間します。
毎フレーム、現在の位置から目標の位置へ少しずつ近づけていくことで、滑らかな移動が実現できます。
- 目標の位置へ段階的に近づく
- 補間を使って滑らかに移動する
- 見た目が自然になる
- 操作感が向上する
Vector3.Lerpを使った実装

Unityでなめらかな移動を実装するには、Vector3.Lerpを使用します。
実際の実装方法を見ていきましょう。
基本的な実装
最も基本的ななめらかな移動の実装です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class SmoothMovement : MonoBehaviour { public Transform target; public float speed = 2.0f; void Update() { if (target != null) { float t = Time.deltaTime * speed; transform.position = Vector3.Lerp(transform.position, target.position, t); } } } |
このスクリプトにより、オブジェクトがターゲットの位置へ滑らかに移動します。
時間ベースの移動
指定した時間で移動を完了させたい場合の例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public class TimedMovement : MonoBehaviour { public float moveDuration = 2.0f; private float timer = 0f; private Vector3 startPosition; private Vector3 endPosition; public void MoveTo(Vector3 targetPosition) { startPosition = transform.position; endPosition = targetPosition; timer = 0f; } void Update() { if (timer < moveDuration) { timer += Time.deltaTime; float t = timer / moveDuration; t = Mathf.Clamp01(t); transform.position = Vector3.Lerp(startPosition, endPosition, t); } } } |
これにより、指定した時間で移動が完了します。
距離制限付きの移動
移動距離に制限を設ける例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class LimitedMovement : MonoBehaviour { public float maxDistance = 10f; public float speed = 2.0f; void Update() { Vector3 targetPosition = Vector3.zero; float distance = Vector3.Distance(transform.position, targetPosition); if (distance > maxDistance) { Vector3 direction = (targetPosition - transform.position).normalized; targetPosition = transform.position + direction * maxDistance; } float t = Time.deltaTime * speed; transform.position = Vector3.Lerp(transform.position, targetPosition, t); } } |
これにより、移動距離を制限できます。
- 移動の補間にはVector3.Lerpを使う
- Time.deltaTimeを使ってフレームレートに依存しない動きにする
- speedパラメータで移動の速度を調整する
- 毎フレームLerpを呼ぶ場合、最終位置に到達しない場合がある
なめらかな移動の実装手順

※この順番を守らずに作り始めると、だいたい後で全部作り直すことになります。
- STEP1目標位置を決定
移動させたい目標の位置を決定します。Vector3やTransform.positionなどを使って指定。
- STEP2移動速度を設定
speedパラメータで移動の速度を設定します。一般的には1.0から5.0の範囲が使いやすい。
- STEP3補間の進行度を計算
Time.deltaTimeとspeedを使って、進行度を計算します。時間ベースの計算で、フレームレートに依存しない動きを実現。
- STEP4Lerpで補間
Vector3.Lerpを使って、現在の位置から目標位置へ補間します。毎フレーム呼び出すことで、滑らかな移動が実現。
- STEP5動作確認と調整
実際に動かして、移動速度や動きを確認します。必要に応じてspeedパラメータを調整して、好みの動きにしましょう。
実践的な使用例

なめらかな移動を使った実践的な例を見ていきましょう。
カメラの滑らかな追従
カメラをプレイヤーに滑らかに追従させる例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class SmoothCameraFollow : MonoBehaviour { public Transform target; public float followSpeed = 2.0f; public Vector3 offset = new Vector3(0, 5, -10); void LateUpdate() { if (target != null) { Vector3 targetPosition = target.position + offset; float t = Time.deltaTime * followSpeed; transform.position = Vector3.Lerp(transform.position, targetPosition, t); } } } |
これにより、カメラがプレイヤーを滑らかに追従します。
UI要素の滑らかな移動
UI要素を滑らかに移動させる例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class UIMovement : MonoBehaviour { public RectTransform targetRect; public Vector2 targetPosition; public float moveSpeed = 2.0f; void Update() { float t = Time.deltaTime * moveSpeed; Vector2 currentPos = targetRect.anchoredPosition; targetRect.anchoredPosition = Vector2.Lerp(currentPos, targetPosition, t); } } |
これにより、UI要素が滑らかに移動します。
エフェクトの移動
エフェクトを滑らかに移動させる例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class EffectMovement : MonoBehaviour { public Vector3 targetPosition; public float moveSpeed = 3.0f; void Update() { float t = Time.deltaTime * moveSpeed; transform.position = Vector3.Lerp(transform.position, targetPosition, t); float distance = Vector3.Distance(transform.position, targetPosition); if (distance < 0.1f) { Destroy(gameObject); } } } |
これにより、エフェクトが目標位置へ滑らかに移動し、到達したら削除されます。

まずは基本的な実装から始めて、徐々に応用的な使い方を覚えていきましょう。
よくある問題と解決方法

なめらかな移動を実装する際によくある問題と、その解決方法を紹介します。
最終位置に到達しない
毎フレームLerpを呼び出す場合、理論上は最終位置に到達しません。
解決方法は、十分に近づいたら最終位置を設定すること。
|
1 2 3 4 5 6 7 8 9 10 11 |
float distance = Vector3.Distance(transform.position, targetPosition); if (distance < 0.01f) { transform.position = targetPosition; } else { float t = Time.deltaTime * speed; transform.position = Vector3.Lerp(transform.position, targetPosition, t); } |
距離をチェックして、十分に近づいたら最終位置を設定します。
移動速度が変わる
Time.deltaTimeを使わないと、フレームレートによって移動速度が変わってしまいます。
必ずTime.deltaTimeを掛けるようにしましょう。
|
1 2 3 4 5 6 |
// ✅ 正しい実装 float t = Time.deltaTime * speed; // ❌ 間違った実装 float t = 0.1f; // フレームレートで速度が変わる |
動きが不自然になる
speedが速すぎたり、遅すぎたりすると、動きが不自然に見えます。
適切な値を見つけるには、試行錯誤が必要。
一般的には、1.0から5.0の範囲が使いやすいです。
- 最終位置に到達しない → 距離をチェックして、十分に近づいたら最終位置を設定
- 移動速度が変わる → Time.deltaTimeを必ず使う
- 動きが不自然 → speedパラメータを調整する
- 補間が遅い → speedを上げる
移動速度の調整方法

なめらかな移動の速度を調整する方法を見ていきましょう。
固定速度での移動
固定の速度で移動させたい場合の例です。
|
1 2 3 4 5 6 7 8 |
public float speed = 2.0f; void Update() { float t = Time.deltaTime * speed; transform.position = Vector3.Lerp(transform.position, targetPosition, t); } |
speedパラメータで移動速度を調整できます。
距離に応じた速度調整
移動距離に応じて、速度を調整する方法もあります。
|
1 2 3 4 5 6 7 |
float distance = Vector3.Distance(transform.position, targetPosition); float normalizedDistance = Mathf.Clamp01(distance / 10f); float speed = Mathf.Lerp(5f, 1f, normalizedDistance); // 距離が大きいほど遅く float t = Time.deltaTime * speed; transform.position = Vector3.Lerp(transform.position, targetPosition, t); |
これにより、距離に応じて移動速度を調整できます。
加速・減速の実装
移動に加速・減速を加える例です。
|
1 2 3 4 5 6 7 8 9 10 |
float EaseInOut(float t) { return t * t * (3f - 2f * t); } float distance = Vector3.Distance(transform.position, targetPosition); float normalizedDistance = Mathf.Clamp01(distance / 10f); float easedDistance = EaseInOut(normalizedDistance); float speed = Mathf.Lerp(5f, 1f, easedDistance); |
これにより、移動に加速・減速を加えられます。
なめらかな移動の学習を深めるには

なめらかな移動の基礎を理解した後は、さらに深く学んでいくことが大切です。
Unity入門の森では、ゲーム開発に必要な数学とアニメーションの知識を体系的に学べる環境が整っています。
特に、永久会員チケットでは、移動補間だけでなく、アニメーション、物理演算など、関連する知識も幅広くカバーしています。
また、2Dアクションゲーム講座では、実際にゲームを作りながら、なめらかな移動の実践的な使い方を身につけられます。
移動補間の基礎から応用まで、実際のコードと紐付けて学べるので、理解が深まりやすいはずです。
- なめらかな移動とは何か、なぜ必要なのか
- Vector3.Lerpを使った実装方法
- 実践的な使用例(カメラ追従、UI移動、エフェクトなど)
- よくある問題と解決方法
- 移動速度の調整方法
記事を読んで「作ってみたい!」と思ったら!人気ゲームを題材にした講座で実力をつけよう
知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを1本完成させることで、理解が一気に深まります。人気タイトルをモデルにした講座で、ゲーム開発の第一歩を踏み出しましょう。
Unity ノンフィールドRPG+スレスパ風JRPG講座【Unity6対応!トレンドのデッキ構築×JRPGをスマホ向けに作れる!】

- Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
- Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
- 初心者でも取り組みやすい丁寧な解説構成
- ノンフィールドRPGとデッキ構築JRPGの2つを合わせて学ぶのがおすすめ
Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、今もっともトレンドのデッキ構築型ゲームシステムをJRPGと組み合わせて実装する方法を学べる講座です。
Unity6対応・スマホ化対応の最新カリキュラムで、コラムやTIPSで読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。
「Slay the Spireみたいなゲームを自分でも作ってみたい!」という人の最初の一歩として最適な講座です。
Unity6対応・スマホ化対応の最新カリキュラム
トレンドのデッキ構築×JRPGを最速で実装しよう
→ スレスパ風デッキ構築JRPG講座を見てみる
スマホ対応の最新環境で、ゲーム開発の第一歩を踏み出そう!
Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!スマホ化・広告実装まで対応した本格横スクロールACTを作れる!】

- ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
- 7ステージ+ラスボスステージの市販ゲームに近い本格的なゲーム設計
- スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
- 敵AI15体・多彩なマップギミック・武器システムを完全実装
- 完全オリジナルゲームをアセット不使用で素材提供付きで制作
Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを開発できるようになる本格的な講座です。
TIPSやコラムで学んだ当たり判定・物理挙動・敵AIの知識を、実際のゲームコードとして実装する体験が全16回に凝縮されています。スマホ化・広告実装まで対応しているため、作って終わりではなくリリースまで見据えた実践スキルが身につきます。
「読んで理解した知識を、動くゲームとして形にしたい」という人に強くおすすめの一本です。
スマホ化・広告実装まで対応した本格横スクロールACT
ロックマン風の2Dアクションゲームをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
広告収益まで視野に入れた実践スキルを今すぐ手に入れよう!
ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

- ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
- 初心者でも取り組みやすい丁寧な解説構成
- スマホ化対応で実機で動かせるゲームが完成
- アセットを使った実践的なゲーム開発手法が身につく
- 画像・動画・全ソースコード公開の充実したサポート
ゼルダ風3Dアクションゲームの作り方講座は、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを作りたい人におすすめの入門講座です。
コラム・TIPSで「3Dゲームはなんとなく難しそう」と感じていた人でも、全16回の丁寧な解説で確実に完成まで到達できます。スマホ化対応で実機で動かせるため、作った達成感がひときわ大きい講座です。
「3Dゲームの仕組みを理解した次は、実際に自分で作ってみたい」という人の最初の一歩として最適です。
初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の第一歩を踏み出そう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
3D開発の壁を一気に突破!スマホで動くオリジナルゲームを完成させよう!
まとめ

この記事では、なめらかに移動させる方法について解説しました。
なめらかな移動は、Vector3.Lerpを使って簡単に実装できます。
目標の位置へ段階的に近づけることで、より自然で見やすい動きを実現可能。
「なめらかな移動って難しそう💧」と感じる方もいるかもしれませんが、基本的な実装方法を理解すれば、様々な場面で活用できるようになります。
まずは基本的な実装から始めて、徐々に応用的な使い方を覚えていきましょう。
- なめらかな移動はVector3.Lerpを使って実装する
- 現在の位置から目標位置へ段階的に近づける
- Time.deltaTimeを使ってフレームレートに依存しない動きを実現する
- speedパラメータで移動の速度を調整できる
- 最終位置に到達しない問題は、距離チェックで解決できる
まずは基本的な実装から始めて、徐々に応用的な使い方に挑戦していきましょう。
Unity入門の森では、なめらかな移動の基礎から応用まで、実践的な知識を体系的に学べる環境が整っています。
疑問があれば、ぜひ活用してみてください。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。





コメント