キャラクターの移動に加速度を持たせたい。
物理法則に基づいた動きを実装したい。
実は、加速度ベクトルを使うことで、自然な動きを実現できます。
加速度ベクトルは、速度の変化率を表すベクトルです。
力が加わると、加速度が生まれます。
加速度を速度に加算すれば、より自然な動きになります。
この記事では、加速度ベクトルの計算について、Unity実装例とともに解説します。
- 加速度ベクトルの計算方法が分からない…
- 物理演算で加速度をどう使えばいいか理解できていない。
- 自然な動きを実装したい。
✨ この記事でわかること
- 加速度ベクトルの基本概念
- 速度と加速度の関係
- 力から加速度への変換
- Unityでの実装方法
- 初心者でも理解できる物理演算の考え方
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
加速度ベクトルとは何か(ゲーム制作目線)

加速度ベクトルは、速度の変化率を表すベクトルです。
速度が時間とともに変化するとき、加速度が生まれます。
加速度の特徴は、方向と大きさを持つベクトルであることです。
力が加わると、加速度が生まれます。
F = ma(力 = 質量 × 加速度)の関係があります。
Unityでは、毎フレーム加速度を計算して、速度に加算します。
ゲームでの具体的な使い道

加速度ベクトルが、ゲームでどう使われているか確認してみましょう。
キャラクターの移動
入力に応じて加速度を加え、徐々に速度を上げます。
停止時も、加速度を使って減速します。
ジャンプと落下
重力加速度を使って、落下を実装します。
ジャンプ時は、初速度を与えてから、重力加速度で減速します。
車の加速と減速
エンジンの力やブレーキの力から、加速度を計算します。
加速度を速度に加算して、車の動きを実現します。
弾丸の軌道
弾丸に加速度を加えて、放物線の軌道を実現します。
空気抵抗なども、加速度として加算できます。
- キャラクターの移動(加速・減速)
- ジャンプと落下(重力加速度)
- 車の加速と減速
- 弾丸の軌道(放物線運動)
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

加速度ベクトルの計算は、「力の計算 → 加速度への変換 → 速度への加算 → 位置の更新」という流れで実現できます。
力の計算
入力や物理法則に基づいて、力を計算します。
入力に応じた力、重力、摩擦など、様々な力があります。
加速度への変換
F = maの関係を使って、加速度を計算します。
加速度 = 力 / 質量
速度への加算
加速度を時間で積分して、速度に加算します。
速度 = 速度 + 加速度 × 時間
位置の更新
速度を使って、位置を更新します。
位置 = 位置 + 速度 × 時間
- 加速度ベクトルは、速度の変化率を表す
- 力から加速度への変換は、F = maの関係を使う
- 加速度を速度に加算して、位置を更新する
- 毎フレーム計算すれば、自然な動きを実現できる
Unityで実装する際の注意点(代表例)

Unityで加速度ベクトルを扱う場合の注意点を見ていきましょう。
基本的な加速度計算
入力に応じて加速度を計算し、速度に加算します。
|
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 37 38 |
public class AccelerationMovement : MonoBehaviour { public float acceleration = 10f; // 加速度 public float maxSpeed = 5f; // 最大速度 public float friction = 0.9f; // 摩擦係数 private Vector3 velocity = Vector3.zero; 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 accelerationVector = input.normalized * acceleration; // 速度に加速度を加算 velocity += accelerationVector * Time.deltaTime; // 摩擦を適用 velocity *= friction; // 最大速度を制限 if (velocity.magnitude > maxSpeed) { velocity = velocity.normalized * maxSpeed; } // 位置を更新 transform.position += velocity * Time.deltaTime; } } |
重力加速度の実装
重力加速度を使って、落下を実装します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class GravityAcceleration : MonoBehaviour { public float gravity = -9.81f; // 重力加速度 private Vector3 velocity = Vector3.zero; void Update() { // 重力加速度を速度に加算 velocity.y += gravity * Time.deltaTime; // 位置を更新 transform.position += velocity * Time.deltaTime; } } |
ジャンプの実装
初速度を与えてから、重力加速度で減速します。
|
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 |
public class JumpWithAcceleration : MonoBehaviour { public float jumpForce = 10f; // ジャンプ力 public float gravity = -9.81f; // 重力加速度 private Vector3 velocity = Vector3.zero; private bool isGrounded = true; void Update() { // ジャンプ if (Input.GetKeyDown(KeyCode.Space) && isGrounded) { velocity.y = jumpForce; // 初速度 isGrounded = false; } // 重力加速度を加算 velocity.y += gravity * Time.deltaTime; // 位置を更新 transform.position += velocity * Time.deltaTime; // 地面との判定(簡易版) if (transform.position.y <= 0f) { transform.position = new Vector3(transform.position.x, 0f, transform.position.z); velocity.y = 0f; isGrounded = true; } } } |
力から加速度への変換
F = maの関係を使って、加速度を計算します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public class ForceToAcceleration : MonoBehaviour { public float mass = 1f; // 質量 private Vector3 velocity = Vector3.zero; void Update() { // 力を計算(例:入力に応じた力) Vector3 force = Vector3.zero; if (Input.GetKey(KeyCode.W)) force.z += 10f; if (Input.GetKey(KeyCode.S)) force.z -= 10f; // 加速度を計算(F = ma → a = F / m) Vector3 acceleration = force / mass; // 速度に加速度を加算 velocity += acceleration * Time.deltaTime; // 位置を更新 transform.position += velocity * Time.deltaTime; } } |
空気抵抗の実装
速度に比例した空気抵抗を、加速度として加算します。
|
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 AirResistance : MonoBehaviour { public float airResistance = 0.1f; // 空気抵抗係数 private Vector3 velocity = Vector3.zero; void Update() { // 入力による加速度 Vector3 inputAcceleration = Vector3.zero; if (Input.GetKey(KeyCode.W)) inputAcceleration.z += 10f; // 空気抵抗による加速度(速度に比例、反対方向) Vector3 airResistanceAcceleration = -velocity * airResistance; // 加速度を合算 Vector3 totalAcceleration = inputAcceleration + airResistanceAcceleration; // 速度に加速度を加算 velocity += totalAcceleration * Time.deltaTime; // 位置を更新 transform.position += velocity * Time.deltaTime; } } |
Rigidbodyを使った実装
UnityのRigidbodyを使うと、物理演算が簡単に実装できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class RigidbodyAcceleration : MonoBehaviour { private Rigidbody rb; void Start() { rb = GetComponent(); } void FixedUpdate() { // 力を加える(加速度を自動計算) Vector3 force = Vector3.zero; if (Input.GetKey(KeyCode.W)) force.z += 10f; rb.AddForce(force); } } |

まとめ

この記事では、加速度ベクトルの計算について見てきました。
重要なポイントをおさらいします。
- 加速度ベクトルは、速度の変化率を表す
- 力から加速度への変換は、F = maの関係を使う
- 加速度を速度に加算して、位置を更新する
- UnityのRigidbodyを使うと、物理演算が簡単に実装できる
- 毎フレーム計算すれば、自然な動きを実現できる
加速度ベクトルは、物理演算で重要な概念です。
力から加速度を計算して、速度に加算すれば、自然な動きを実現できます。
ジャンプや落下、移動など、様々な場面で活用できますね。
実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、物理演算を含むジャンプ・重力・移動の数学を、実際のゲーム実装とともに体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント