ロックマン風の2Dアクションを作りたい。でも、ショットやダッシュの実装が分からない。
多くの学生が最初に感じるのが、この疑問です。
実は、ロックマン風のゲームは、いくつかの特徴的な要素で構成されています。
この記事では、ロックマン風2Dアクションの作り方として、ショット・ダッシュ・当たり判定の仕組みを解説します。
✨ この記事でわかること
- ロックマンの特徴的な要素
- ショットの実装方法
- ダッシュの実装方法
- 当たり判定の仕組み

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

ロックマンの特徴的な要素は、次の通りです。
- 硬直時間のある攻撃
- ダッシュによる高速移動
- 精密な当たり判定
- ステージ構造の設計
これらの要素を組み合わせることで、ロックマン風2Dアクションの“基礎部分”が完成します。
ここからアニメーションやギミック、敵AIを追加していくことで、自分の操作に反応して動く、本格的なアクションゲームへと進化していきます。
ショットの実装方法

ロックマン風のアクションでは、「ショット」がゲーム性の中心になります。
弾のスピードや硬直のタイミングによって、操作の手応えが大きく変わります。
まずは、ショット実装の流れをステップで整理しましょう。

ここで全体像をつかんでおくと、後の実装がぐっと楽になります。
- STEP1弾のオブジェクトを作成
弾のスプライトを設定し、Rigidbody2D と Collider を追加します。
重力を使わない場合は「Gravity Scale = 0」に設定します。
- STEP2発射処理を実装
ボタン入力(例:Fire1)で弾を生成し、前方向に速度を与えます。
- STEP3硬直時間を設定
ショット後に一定時間操作を制限し、ロックマンらしい手応えを演出します。
- STEP4弾の管理を実装
画面外に出た弾を削除し、無限に溜まらないようにします。
この流れを押さえておけば、ショットの仕組みはほぼ完成です。
次に、実際のコード例を見ていきましょう。
ショット実装の具体例(Unity)
ここでは、Unityでショットを実装するシンプルな例を紹介します。
細かく理解しなくても問題ありません。「こういう流れで動く」とざっくり眺めるだけでOKです。
|
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 |
public class PlayerShot : MonoBehaviour { [SerializeField] GameObject bulletPrefab; [SerializeField] Transform muzzle; [SerializeField] float bulletSpeed = 8f; [SerializeField] float shotInterval = 0.3f; bool canShot = true; void Update() { if (Input.GetButtonDown("Fire1") && canShot) { StartCoroutine(Shot()); } } IEnumerator Shot() { canShot = false; var bullet = Instantiate(bulletPrefab, muzzle.position, Quaternion.identity); var rb = bullet.GetComponent<Rigidbody2D>(); rb.velocity = new Vector2(transform.localScale.x * bulletSpeed, 0f); yield return new WaitForSeconds(shotInterval); canShot = true; } } |
このコードをベースに、弾の速度や硬直時間を調整していくことで、「自分だけのショット」を作れるようになります。
ショット実装でよくあるつまずき
ショット実装は、初心者が特につまずきやすいポイントです。
事前に知っておくだけで、無駄な試行錯誤を減らせます。
よくあるトラブル例
- 弾が動かない
→ Rigidbody2D に velocity を設定していない / Gravity Scale が高すぎる - 弾が逆方向に飛ぶ
→ キャラクターの向き(scale.x)を反映していない - 弾が消えずに増え続ける
→ 画面外で Destroy する処理を入れていない - 硬直中も撃ててしまう
→ 入力制御用のフラグ管理が抜けている
これらは、誰もが一度は経験するミスです。
順番に原因をつぶしていけば、必ずショットは形になります。
ダッシュの実装方法

ロックマン風のアクションでは、ダッシュは「スピード感」と「回避」の手段になります。
ダッシュ中の速度や時間、無敵の有無によって、ゲーム全体のテンポが大きく変わります。
ここでは、ダッシュの基本的な仕組みをステップごとに整理したうえで、実際のコード例と、つまずきやすいポイントを紹介します。
- STEP1ダッシュ用のパラメータを用意
通常移動とは別に、「ダッシュ速度」「ダッシュ時間」「クールタイム」などの変数を用意します。
- STEP2ダッシュ入力を判定
ボタン入力(例:Fire3 や LeftShift)を検出し、「今ダッシュしてよいか」をフラグで管理します。
- STEP3一定時間だけ速度を上げる
ダッシュ中フラグを立て、指定時間だけ移動速度をダッシュ用の値に切り替えます。
- STEP4無敵・アニメーションなどを制御
必要に応じて、ダッシュ中だけ当たり判定をオフにしたり、専用アニメーションに切り替えます。
この流れをベースにすれば、ロックマン風の「一瞬だけスッと前に出る」ダッシュを実装できます。

次に、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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
public class PlayerDash : MonoBehaviour { [SerializeField] float moveSpeed = 4f; // 通常移動速度 [SerializeField] float dashSpeed = 10f; // ダッシュ速度 [SerializeField] float dashTime = 0.2f; // ダッシュ継続時間 [SerializeField] float dashCooldown = 0.5f; // クールタイム bool isDashing = false; bool canDash = true; float dashTimer = 0f; float cooldownTimer = 0f; Rigidbody2D rb; void Awake() { rb = GetComponent<Rigidbody2D>(); } void Update() { float x = Input.GetAxisRaw("Horizontal"); // ダッシュ入力 if (Input.GetButtonDown("Fire3") && canDash) { StartDash(); } // ダッシュ中の時間管理 if (isDashing) { dashTimer -= Time.deltaTime; if (dashTimer <= 0f) { EndDash(); } } else if (!canDash) { cooldownTimer -= Time.deltaTime; if (cooldownTimer <= 0f) { canDash = true; } } // 速度の適用 float speed = isDashing ? dashSpeed : moveSpeed; rb.velocity = new Vector2(x * speed, rb.velocity.y); } void StartDash() { isDashing = true; canDash = false; dashTimer = dashTime; cooldownTimer = dashCooldown; // 必要ならここで無敵フラグやアニメーション切り替えを行う } void EndDash() { isDashing = false; // ダッシュ終了時の処理を入れる場合はここに記述 } } |
この例では、isDashing と canDash の2つのフラグで「今ダッシュ中か」「ダッシュしてよい状態か」を分けて管理しています。
ダッシュ時間やクールタイムを調整することで、好みのテンポに仕上げていけます。
ダッシュ実装でよくあるつまずき
ダッシュ機能は、ショット以上に「挙動がおかしくなりやすい」部分です。
特に、通常移動との切り替えや、ジャンプとの組み合わせでバグが出やすくなります。
ダッシュ実装でよくあるトラブル
- ダッシュが止まらない
→ ダッシュ終了時にisDashingを false にしていない / タイマー管理が抜けている - ダッシュ後に移動速度が元に戻らない
→ ダッシュ中と通常時の速度切り替えロジックが一箇所にまとまっていない - 空中でダッシュしてほしくないのにできてしまう
→ 接地判定(isGrounded)を見ずにダッシュ入力だけで処理している - ダッシュ連打で高速移動になってしまう
→ クールタイム用のフラグ(canDash)やタイマー管理が足りない
どれも、原因が分かれば必ず直せるものばかりです。
「ダッシュ開始時に何をして、ダッシュ中は何を維持して、終了時に何を戻すのか」
この3つのタイミングを意識してコードを書くと、安定した挙動になっていきます。
当たり判定の仕組み

これらの要素を組み合わせることで、プレイヤー・敵・弾がそれぞれ「いつ・どこで」ぶつかったかを細かく判定できるようになります。
レイヤーを使って「当たる組み合わせ」「当たらない組み合わせ」を整理しておくと、思い通りの当たり判定をコントロールできます。
当たり判定の具体例(Unity)
ここでは、プレイヤーの弾が「敵だけ」に当たり、ステージの床とは当たらないようにする簡単な例を紹介します。
イメージとして、「誰と誰がぶつかるか」をレイヤーで整理してあげるイメージです。
例として、次のようなレイヤーを用意します。
- Player … プレイヤー本体
- Enemy … 敵キャラクター
- PlayerBullet … プレイヤーの弾
- Ground … 床や壁などのステージ
そのうえで、Unity のメニューから [Edit] > [Project Settings] > [Physics 2D] を開き、
「Layer Collision Matrix」で「PlayerBullet × Enemy」だけチェックを入れます。
こうすることで、PlayerBullet は Enemy にだけ当たり、Ground や Player とは衝突しなくなります。
弾側のスクリプトでは、次のように当たり判定を受け取ります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class BulletHit : MonoBehaviour { void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Enemy")) { // ダメージ処理 // Destroy などで弾を消す Destroy(gameObject); } } } |
レイヤーとタグを組み合わせることで、「この弾はこの敵だけに当たってほしい」といった細かい当たり判定を作り込めます。
当たり判定でよくあるつまずき
当たり判定は、一見シンプルに見えてトラブルが多い部分です。
とくに、レイヤー設定や Collider の種類でつまずきやすくなります。
当たり判定まわりのよくあるトラブル
- そもそも当たり判定が発生しない
→ Collider が片方しか付いていない / どちらも Trigger ではない / レイヤーマトリクスでオフにしている - 想定外のものに当たってしまう
→ 全レイヤー同士を衝突オンにしていて、「当たってほしくない組み合わせ」を切れていない - ダメージが2回以上入ってしまう
→ 同じフレーム内で複数回 OnTriggerEnter2D が呼ばれている / ヒット後の無敵処理やフラグ管理がない - 見た目と当たり判定の位置がズレている
→ Sprite の画像サイズと Collider の大きさ・位置が合っていない
当たり判定で迷ったときは、「レイヤー設定」「Collider の有無と種類」「Trigger / Collision のどちらを使うか」の3つを順番に確認すると原因にたどり着きやすくなります。
当たり判定の作り方|2D/3DのCollider・Trigger完全解説
ステージ構造の設計

ロックマン風2Dアクションでは、ステージ構造がゲーム体験を大きく左右します。
同じショットやダッシュでも、ステージ次第で「楽しい」「難しい」「理不尽」に変わります。
まずは、基本となるステージ構造の要素を整理しておきましょう。
- 足場の配置(高さ・距離)
- 敵の配置(出現位置・数)
- ギミックの配置(トゲ、落下床など)
- 難易度の調整(回復・安全地帯)
これらを意識して配置することで、
「どこで止まり、どこで撃ち、どこでダッシュするか」を
プレイヤーに自然と判断させるステージを作れます。
ロックマン風ステージの考え方
ロックマン風ステージの基本は、
「操作を試す場所 → 成功体験 → 少し難しい配置」の繰り返しです。
- 低い足場でジャンプと移動に慣れさせる
- 敵+足場を組み合わせてショットと回避を使わせる
- 安全地帯を挟んで、少し難しい配置を置く
いきなり難しい配置を置くのではなく、
プレイヤーが「自然と上達していく流れ」を作るのがポイントです。
ステージ設計でよくあるつまずき
ステージ構造は、作っている側が気づきにくい落とし穴が多い部分です。
初心者がやりがちなステージ設計ミス
- 足場の間隔が広すぎて、ダッシュ前提になっている
- 敵を多く置きすぎて、撃つ前に被弾してしまう
- 安全地帯がなく、立て直す場所がない
- ギミックが突然出てきて、対処方法を学べない
ステージが難しく感じる場合は、
「安全に止まれる場所があるか」「一度に判断させる要素が多すぎないか」
この2点をチェックすると調整しやすくなります。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
実践的なロックマン風ゲーム制作を学ぶには

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

ロックマン風2Dアクションの作り方について解説しました。
要点のまとめ
- ロックマンの特徴的な要素は、硬直時間・ダッシュ・当たり判定・ステージ構造
- ショットは、硬直時間を設定することで、戦略的な要素が増える
- ダッシュは、高速移動と無敵時間で実現
- 当たり判定は、レイヤーを設定することで、精密に制御できる
基本を押さえれば、あとは応用していくだけです。
まずは、シンプルなショットから始めてみてください。
動かしながら理解を深めていくのが、上達への近道です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント