ゲームでキャラクターをジャンプさせたいけど、どう計算すればいいのか分からない。
重力や加速度って、どう使えばいいのか。
実は、ゲーム物理の基礎は、速度・加速度・重力の関係を理解することから始まります。
これらを理解すれば、自然な物理挙動を実装できます。
この記事では、ゲーム物理の基礎として、速度・加速度・重力の計算方法を見ていきましょう。
- ゲーム物理の基礎が分からない…
- 速度や加速度、重力の計算方法が理解できていない。
- 自然な物理挙動を実装したい。
✨ この記事でわかること
- 速度・加速度・重力の基本概念
- 等速運動と等加速度運動の違い
- 重力を使った落下の実装
- Unityでの物理演算の実装方法
- 初心者でも理解できる物理の基礎
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
ゲーム物理基礎とは何か(ゲーム制作目線)

ゲーム物理の基礎は、単なる数式の暗記ではなく、速度・加速度・重力といった物理的な概念をプログラムでどう扱うかという知恵です。
ゲーム開発において、キャラクターがジャンプしたり、崖から飛び降りたりする挙動を「それっぽく」見せるためには、物理演算の考え方が欠かせません。
物理演算の核心は、「位置・速度・加速度」の密接な関係を理解することにあります。
数学的な視点で見れば、これらは「積分」の関係にあります。加速度を積み上げると「速度」になり、速度を積み上げると「位置」が決まります。
このシンプルな積み上げ計算こそが、ゲーム物理の正体です。
重力も特別なものではなく、常に下方向へかかり続ける「一定の加速度」として処理することで、リアリティのある落下を実現できます。
ゲームでの具体的な使い道

ゲーム物理の基礎をマスターすると、普段遊んでいるゲームの裏側が手に取るように分かるようになります。具体的な活用シーンを見てみましょう。
ジャンプの実装
キャラクターをジャンプさせる際、プログラム上では一瞬だけ上方向への「初速度」を与えます。
あとは重力(加速度)が勝手に速度を減らしてくれるため、何もしなくても綺麗な放物線を描いて着地します。
落下の実装
オブジェクトを自然に落下させるには、毎フレームごとに重力加速度を加え続けます。
これにより、空気抵抗を無視すれば、物は時間が経つほど「徐々に加速しながら」落ちていくという現実の挙動を再現できます。
移動の実装
パッと動いてパッと止まる移動よりも、加速度を使って「徐々に加速し、入力をやめると慣性で少し滑って止まる」という処理を加えるだけで、キャラクターの「重み」や操作感が劇的に向上します。
物理エンジンの活用
Unityの「Rigidbody」コンポーネントは、こうした面倒な計算をすべて代行してくれる強力なツールです。
重力の影響や衝突判定などを自動で処理してくれるため、開発者はよりクリエイティブな部分に集中できます。
- 速度:位置がどのくらい変化するか(位置の変化率)
- 加速度:速度がどのくらい変化するか(速度の変化率)
- 重力:常に下方向へかかる加速度の代表例
- 物理エンジン:これらを自動で一括計算してくれる仕組み
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

ゲーム物理を実装する際、最も重要なのは「現在の値を次のフレームへどう更新するか」というルールです。
速度と加速度の関係(オイラー法)
ゲームでは「オイラー法」という簡略化された計算手法がよく使われます。
これは、微小な時間(Time.deltaTime)の間に変化した量を足し算していく方法です。
[Image of relationship between position velocity and acceleration graphs]
以下の式が、ゲーム物理の心臓部です。
- 新しい速度 = 現在の速度 + (加速度 × 時間)
- 新しい位置 = 現在の位置 + (速度 × 時間)
重力の実装
重力は「下方向への一定の加速度」です。
毎フレーム、プログラムが「速度のY成分」から重力分を差し引くことで、ジャンプしたキャラは頂点で速度が0になり、その後マイナスの速度(落下)へと転じます。
等速運動と等加速度運動
加速度が0であれば、物体は同じスピードで進み続ける「等速運動」になります。
一方で、重力のように一定の加速度がかかり続ける場合は「等加速度運動」となり、速度が直線的に変化していきます。
Time.deltaTimeの役割
ここで重要なのが「時間(Time.deltaTime)」を掛ける理由です。
パソコンの性能によってフレームレート(1秒間に描画する回数)は異なります。
時間に依存させずに「1秒間に10m進む」という一貫した挙動を作るために、この Time.deltaTime が魔法のスパイスとして機能します。
- 物理演算の本質は「加速度→速度→位置」の更新処理。
- 新しい速度 = 現在の速度 + 加速度 × Time.deltaTime
- 新しい位置 = 現在の位置 + 速度 × Time.deltaTime
- 重力は「下向きの加速度」として毎フレーム計算する。
Unityで実装する際の注意点(代表例)

Unityで物理を扱う際、スクリプトで直接位置(transform.position)をいじる方法と、物理エンジン(Rigidbody)に任せる方法の2通りがあります。
速度を使った移動
一定の速度で移動させる、最もシンプルな実装です。
|
1 2 3 4 5 6 7 8 9 |
void Update() { // 入力から速度を決定 velocity = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")) * moveSpeed; // 現在の位置に(速度 × フレーム時間)を足す transform.position += velocity * Time.deltaTime; } |
加速度を使った移動
慣性を感じるような、滑らかな動きを作る実装です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void Update() { Vector3 input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); // 速度に(加速度 × フレーム時間)を蓄積させる velocity += input * acceleration * Time.deltaTime; // 摩擦や空気抵抗がないと無限に加速するため制限が必要 velocity = Vector3.ClampMagnitude(velocity, maxSpeed); transform.position += velocity * Time.deltaTime; } |
重力を使った落下
自前で重力を計算する場合の基本パターンです。
|
1 2 3 4 5 6 7 8 |
void Update() { // 垂直方向の速度に重力加速度を加味(Unity標準はPhysics.gravity.yで取得可能) velocity.y -= 9.81f * Time.deltaTime; transform.position += velocity * Time.deltaTime; } |
Rigidbodyを使った物理演算(FixedUpdateの活用)
Rigidbodyを使う場合は、計算のタイミングに注意が必要です。
|
1 2 3 4 5 6 7 8 9 10 11 |
private Rigidbody rb; void Start() => rb = GetComponent<Rigidbody>(); // 物理演算はUpdateではなくFixedUpdateで行うのがプロの鉄則 void FixedUpdate() { Vector3 force = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")) * 10f; rb.AddForce(force); } |
実装のコツ:UpdateとFixedUpdateの使い分け
ここがプロへの第一歩です。
通常の移動(transform操作)は Update で問題ありませんが、Rigidbodyを使って力を加えたり(AddForce)、速度を操作したりする場合は必ず FixedUpdate を使いましょう。
Update は描画のタイミングで呼ばれるため実行間隔が不安定ですが、FixedUpdate は一定の間隔で呼ばれるため、物理演算の結果が安定します。

まとめ

この記事では、ゲーム制作の土台となる物理の基礎について解説しました。
最後に、特に覚えておきたいポイントを整理します。
重要なポイント:
- 速度は「位置の変化」、加速度は「速度の変化」である。
- 新しい状態を求めるには「現在の値 + 変化量 × 時間」を計算する。
- 重力は「下向きの一定の加速度」として扱えばOK。
- 物理エンジン(Rigidbody)を使う際は FixedUpdate を活用する。
- Time.deltaTime はフレームレートに関わらず動きを一定にするための必須アイテム。
ゲーム物理は一見難しそうですが、基本は「足し算の繰り返し」です。
この仕組みが分かれば、キャラクターの動きを自由にカスタマイズしたり、オリジナルの物理ギミックを作ったりできるようになります。
実際のコードを書きながら、数値を変えて挙動がどう変わるか試してみるのが上達への近道です。
さらに詳しく、実践的なゲーム開発と数学の関係を学びたい方は、Unity入門の森を覗いてみてください。
体系的なカリキュラムで、あなたの開発スキルを一段階引き上げてくれるはずです。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント