キャラクターを、指定した方向に移動させたい。
方向ベクトルと速度で、移動を制御したい。
実は、方向ベクトルと速度を使うことで、指定方向に移動できます。
指定方向への移動計算は、方向ベクトルと速度を掛け合わせて、移動量を計算する処理です。
これにより、キャラクターを任意の方向に移動させることができます。
この記事では、指定方向に移動する計算について、Unity実装例とともに解説します。
- 指定方向に移動する計算方法が分からない…
- 方向ベクトルと速度で移動を制御したい。
- 移動計算の実装方法を知りたい。
✨ この記事でわかること
- 指定方向への移動計算の基本
- 方向ベクトルの計算方法
- 速度による移動制御
- Unityでの実装方法
- 初心者でも理解できる移動計算の考え方
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
指定方向への移動計算とは何か(ゲーム制作目線)

指定方向への移動計算は、方向ベクトルと速度を掛け合わせて、移動量を計算する処理です。
方向ベクトルは、移動したい方向を表す単位ベクトルです。
速度は、1秒間に移動する距離です。
これらを掛け合わせることで、1フレームあたりの移動量を計算できます。
移動量 = 方向ベクトル × 速度 × 時間
Unityでは、この計算を毎フレーム実行すれば、キャラクターを移動させます。
ゲームでの具体的な使い道

指定方向への移動計算が、ゲームでどう使われているか確認してみましょう。
キャラクターの移動
プレイヤーキャラクターを、入力に応じて移動させます。
WASDキーなどの入力から方向ベクトルを計算し、移動します。
敵の追尾移動
敵がプレイヤーを追う際、プレイヤーへの方向ベクトルを計算して移動します。
方向ベクトルと速度を掛け合わせて、移動量を計算します。
弾丸の移動
弾丸を、発射方向に移動させます。
発射時の方向ベクトルを使って、移動します。
カメラの移動
カメラを、指定した方向に移動させます。
カメラの移動や、視点の切り替えなどに使われます。
- キャラクターの移動(入力に応じた移動)
- 敵の追尾移動(プレイヤーへの追従)
- 弾丸の移動(発射方向への移動)
- カメラの移動(視点の切り替え)
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

指定方向への移動計算は、「方向ベクトルの計算 → 速度との掛け算 → 移動量の計算 → 位置の更新」という流れで実現できます。
方向ベクトルの計算
移動したい方向を表す単位ベクトルを計算します。
目標位置と現在位置の差を正規化すれば、方向ベクトルを求めます。
速度との掛け算
方向ベクトルに速度を掛けます。
これにより、1秒間の移動量が求められます。
移動量の計算
時間を掛けることで、1フレームあたりの移動量を計算します。
移動量 = 方向ベクトル × 速度 × Time.deltaTime
位置の更新
現在位置に移動量を加算して、新しい位置を計算します。
位置 = 位置 + 移動量
- 指定方向への移動計算は、方向ベクトルと速度を掛け合わせる
- 方向ベクトルは、移動したい方向を表す単位ベクトル
- 移動量 = 方向ベクトル × 速度 × 時間
- 毎フレーム計算すれば、滑らかな移動を実現できる
Unityで実装する際の注意点(代表例)

Unityで指定方向への移動計算を実装する場合の注意点を見ていきましょう。
基本的な移動実装
方向ベクトルと速度を使って、移動を実装します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class DirectionMovement : MonoBehaviour { public float speed = 5f; // 移動速度 void Update() { // 方向ベクトルを計算(例:右方向) Vector3 direction = Vector3.right; // 移動量を計算 Vector3 movement = direction * speed * Time.deltaTime; // 位置を更新 transform.position += movement; } } |
入力に応じた移動
入力に応じて、方向ベクトルを計算して移動します。
|
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 |
public class InputMovement : MonoBehaviour { public float speed = 5f; void Update() { Vector3 input = Vector3.zero; // 入力を受け取る if (Input.GetKey(KeyCode.W)) input.z += 1f; if (Input.GetKey(KeyCode.S)) input.z -= 1f; if (Input.GetKey(KeyCode.A)) input.x -= 1f; if (Input.GetKey(KeyCode.D)) input.x += 1f; // 方向ベクトルを正規化 Vector3 direction = input.normalized; // 移動量を計算 Vector3 movement = direction * speed * Time.deltaTime; // 位置を更新 transform.position += movement; } } |
目標方向への移動
目標位置への方向ベクトルを計算して移動します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class MoveToTarget : MonoBehaviour { public Transform target; public float speed = 5f; void Update() { // 目標への方向ベクトルを計算 Vector3 direction = (target.position - transform.position).normalized; // 移動量を計算 Vector3 movement = direction * speed * Time.deltaTime; // 位置を更新 transform.position += movement; } } |
カメラの向きを考慮した移動
カメラの向きを考慮して、移動方向を計算します。
|
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 28 29 30 31 32 33 34 35 36 |
public class CameraRelativeMovement : MonoBehaviour { public Camera mainCamera; public float speed = 5f; void Update() { Vector3 input = Vector3.zero; // 入力を受け取る if (Input.GetKey(KeyCode.W)) input.z += 1f; if (Input.GetKey(KeyCode.S)) input.z -= 1f; if (Input.GetKey(KeyCode.A)) input.x -= 1f; if (Input.GetKey(KeyCode.D)) input.x += 1f; // カメラの向きを考慮した方向ベクトル Vector3 cameraForward = mainCamera.transform.forward; Vector3 cameraRight = mainCamera.transform.right; // Y軸成分を0にする(水平移動) cameraForward.y = 0f; cameraRight.y = 0f; cameraForward.Normalize(); cameraRight.Normalize(); // 入力方向をカメラの向きに変換 Vector3 direction = (cameraForward * input.z + cameraRight * input.x).normalized; // 移動量を計算 Vector3 movement = direction * speed * Time.deltaTime; // 位置を更新 transform.position += movement; } } |
最大速度の制限
移動速度に最大値を設定します。
|
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 LimitedSpeedMovement : MonoBehaviour { public float maxSpeed = 10f; private Vector3 velocity = Vector3.zero; void Update() { Vector3 input = Vector3.zero; if (Input.GetKey(KeyCode.W)) input.z += 1f; // 速度を加算 velocity += input.normalized * 10f * Time.deltaTime; // 最大速度を制限 if (velocity.magnitude > maxSpeed) { velocity = velocity.normalized * maxSpeed; } // 位置を更新 transform.position += velocity * Time.deltaTime; // 摩擦を適用 velocity *= 0.9f; } } |

まとめ

この記事では、指定方向に移動する計算について見てきました。
重要なポイントをおさらいします。
- 指定方向への移動計算は、方向ベクトルと速度を掛け合わせる
- 移動量 = 方向ベクトル × 速度 × 時間
- 方向ベクトルは、移動したい方向を表す単位ベクトル
- 毎フレーム計算すれば、滑らかな移動を実現できる
- 入力に応じた移動や、目標方向への移動などに活用できる
指定方向への移動計算は、ゲーム開発で重要な技術です。
方向ベクトルと速度を組み合わせることで、様々な移動パターンを実現できます。
入力に応じた移動や、目標方向への移動など、実用的な場面で活用できますね。
実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、移動計算を含む物理演算を、実際のゲーム実装とともに体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント