ダッシュ機能を実装したい。でも、速度やスタミナの管理が分からない。
多くの学生が最初に感じるのが、この疑問です。
実は、ダッシュは、速度とスタミナを管理することで実現できます。
この記事では、ダッシュ実装の方法として、速度・スタミナ・演出の作り方を解説します。
✨ この記事でわかること
- ダッシュの基本実装
- 速度制御の方法
- スタミナ管理の方法
- 演出の追加方法

ダッシュは、アクションゲームに必須の機能です。まずは、基本的な速度制御から始めましょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
ダッシュの基本実装

ダッシュの基本実装は、次の要素で構成します。
- 通常速度とダッシュ速度の定義
- ダッシュキーの検知
- 速度の切り替え
3つの仕組みを繋ぐだけで、「歩く → 加速する → 走り抜ける」というアクション特有の爽快感が生まれます。
ダッシュキーを押した瞬間にキャラが加速すると、ゲームらしい“手応え”がグッと増します。
速度制御の方法

速度制御は、変数で速度を管理します。
主な方法は次の通りです。
- 通常速度とダッシュ速度を定義
- ダッシュ中は速度を上げる
- ダッシュ終了時に速度を戻す
これらを組み合わせることで、基本的な速度制御ができます。
ダッシュ中は、通常速度より速く移動します。

速度制御は、変数で速度を管理することで実現できます。まずは、この方法を試してみてください。
速度制御ができると“ゲームらしい手触り”が生まれる
キャラクターの速度を自由にコントロールできるようになると、操作の気持ちよさが一気に変わります。
通常移動とダッシュの切り替えは、次のようなシンプルなコードで実装できます。
|
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 |
[SerializeField] float walkSpeed = 3f; [SerializeField] float dashSpeed = 6f; bool isDashing = false; float currentSpeed; void Update() { // ダッシュキーの検知 if (Input.GetKeyDown(KeyCode.LeftShift)) { isDashing = true; } if (Input.GetKeyUp(KeyCode.LeftShift)) { isDashing = false; } // 速度の切り替え currentSpeed = isDashing ? dashSpeed : walkSpeed; // 実際にキャラを移動させる処理 Move(currentSpeed); } void Move(float speed) { float x = Input.GetAxisRaw("Horizontal"); Vector3 direction = new Vector3(x, 0, 0); transform.Translate(direction * speed * Time.deltaTime); } |
Shiftキーを押した瞬間にキャラがスッと加速する、この“手応え”がアクションゲームの醍醐味です。
スタミナ管理の方法

スタミナ管理は、ダッシュの使用回数を制限します。
主な方法は次の通りです。
- スタミナ変数を定義
- ダッシュ時にスタミナを消費
- スタミナがなくなったらダッシュ不可
- 時間経過でスタミナを回復
これらを組み合わせることで、基本的なスタミナ管理ができます。
スタミナがなくなると、ダッシュができなくなります。
スタミナ管理を入れると“駆け引き”が生まれる
ダッシュし放題だとゲームが単調になります。
スタミナを導入することで、「どこでダッシュを切るか」という戦略性が生まれ、ゲームに深みが出ます。
|
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 |
[SerializeField] float maxStamina = 100f; // 最大スタミナ [SerializeField] float stamina = 100f; // 現在のスタミナ [SerializeField] float dashCost = 30f; // ダッシュ使用時の消費量 [SerializeField] float recoverSpeed = 15f; // 1秒あたりの回復量 bool isDashing = false; void Update() { // ダッシュ開始(スタミナが足りるときだけ) if (Input.GetKeyDown(KeyCode.LeftShift) && stamina >= dashCost) { isDashing = true; stamina -= dashCost; } // ダッシュ終了 if (Input.GetKeyUp(KeyCode.LeftShift)) { isDashing = false; } // スタミナ回復(上限まで) stamina = Mathf.Min(maxStamina, stamina + recoverSpeed * Time.deltaTime); // このあと速度制御コードで isDashing を参照して速度を切り替える } |
スタミナ管理が入るだけで、ただの移動が“ゲームらしい判断”に変わります。
演出の追加方法

演出を追加することで、より分かりやすくなります。
主な方法は次の通りです。
- ダッシュ時のエフェクト
- スタミナゲージの表示
- 音効果の追加
これらを組み合わせることで、視覚的な演出ができます。
ダッシュ時にエフェクトを表示することで、より分かりやすくなります。
演出を加えると“ダッシュの気持ちよさ”が一段アップする
ダッシュは速度が上がるだけだと地味です。
エフェクト・音・UIゲージなどの演出を加えることで、「走ってる!」という爽快感を強く表現できます。
|
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 |
// ダッシュ時の演出制御用 [SerializeField] ParticleSystem dashEffect; // エフェクト [SerializeField] AudioSource dashSound; // 音 [SerializeField] UnityEngine.UI.Image staminaBar; // スタミナゲージ(任意) bool isDashing = false; float stamina = 100f; float maxStamina = 100f; void Update() { // ダッシュ開始 if (Input.GetKeyDown(KeyCode.LeftShift) && stamina > 0) { isDashing = true; dashEffect.Play(); // エフェクト再生 dashSound.Play(); // 効果音再生 } // ダッシュ終了 if (Input.GetKeyUp(KeyCode.LeftShift)) { isDashing = false; dashEffect.Stop(); } // UIゲージ更新(任意) if (staminaBar != null) { staminaBar.fillAmount = stamina / maxStamina; } } |
エフェクトが光り、音が鳴り、UIが動く──操作した瞬間に“ゲームが生きて動いている”感覚が味わえます。
2D/3D両対応の実装

2D/3D両対応の実装は、基本的な構造は同じです。
主な違いは次の通りです。
| 項目 | 2D | 3D |
| 移動方向 | X/Y軸 | X/Y/Z軸 |
| 速度制御 | Rigidbody2D | Rigidbody |
基本的な構造は同じなので、2D/3D両方に対応できます。
2Dと3Dの違いは「移動処理」だけ。基本構造は同じ
ダッシュの考え方は2Dでも3Dでも共通です。
変わるのはRigidbodyの種類と移動方向の扱いだけ。
最小構成のコードは以下のとおりです。
|
1 2 3 4 5 6 7 8 9 10 11 |
// 【2Dの場合】Rigidbody2Dを使う public Rigidbody2D rb2d; float speed = 5f; void Update() { float x = Input.GetAxisRaw("Horizontal"); rb2d.velocity = new Vector2(x * speed, rb2d.velocity.y); } |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
// 【3Dの場合】Rigidbodyを使う public Rigidbody rb; float speed = 5f; void Update() { float x = Input.GetAxisRaw("Horizontal"); float z = Input.GetAxisRaw("Vertical"); rb.velocity = new Vector3(x * speed, rb.velocity.y, z * speed); } |
この2つを見比べるだけで、2D/3Dの違いが直感的に理解できます。
ダッシュ速度に切り替えるときは、speed の値を変えるだけでOK。

ほんの数行の違いで、2Dのゲームも3Dのゲームも作れるようになる──この瞬間が、開発者としての楽しさを感じるポイントです。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
実践的なダッシュ実装を学ぶには

ここまで、ダッシュ実装の方法について解説してきました。
ダッシュは、アクションゲームに必須の機能です。
Unity入門の森では、Unityを使ったアクションゲームの作り方を、基礎から完成まで丁寧に解説しています。
コードの意味から、なぜその実装方法を選ぶのかまで、しっかり理解できる内容になっています。
アクションゲーム制作に特化した講座なら、効率的にスキルアップできます。
ゲーム制作でスキルを上げたい方は、ぜひチェックしてみてください。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
まとめ

ダッシュ実装の方法について解説しました。
要点のまとめ
- ダッシュは、通常速度とダッシュ速度を定義して実装
- 速度制御は、変数で速度を管理する
- スタミナ管理は、ダッシュの使用回数を制限する
- 2D/3D両対応の実装は、基本的な構造は同じ
基本を押さえれば、あとは応用していくだけです。
まずは、シンプルなダッシュから始めてみてください。
動かしながら理解を深めていくのが、上達への近道です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント