
Unityを使って2Dシューティングゲームを作り始めたとき、自機を動かして弾を撃つところまではチュートリアル通りにスムーズにできたという人は多いんじゃないかな。
でも、いざ「敵」を画面に出そうとした途端に、ピタッと手が止まってしまうことってけっこうあるよね。
「どうやって敵を自然に動かせばいいんだろう?」「自機の弾が当たったら爆発して消える処理って、どんな設定が必要なの?」「敵にも弾を撃たせたいけど、難しそう……」なんて、次から次へと疑問が湧いてきて悩んでしまうはずだ。
実は、シューティングゲームにおいて敵キャラクターを作る作業は、ゲームの面白さを左右する一番ワクワクする部分でもあるんだよ。
この記事では、Unityを使った2Dシューティングゲームでの「敵キャラクターの作り方」を、初心者向けにわかりやすく丁寧に解説していくよ。
最後までじっくり読めば、敵の画像の配置から、移動パターン、当たり判定の仕組み、そして弾を発射するロジックまで、一連の流れがバッチリ理解できるようになるんだ。
エラーに悩まされることなく、あなたのゲームに個性豊かな敵をどんどん登場させて、一気に完成へと近づけていこう!
敵キャラクターの作り方は「配置・動き・当たり判定」の3ステップが基本!

Unityの2Dシューティングにおける敵キャラクターの実装は、すごく複雑に見えるかもしれないけれど、実は大きく分けるとたったの3ステップで構成されているんだ。
それは、「スプライト(画像)の配置と物理設定」「スクリプトによる移動処理」「コライダーを使った当たり判定と破壊処理」の3つだよ。
この3つの要素を順番に一つずつクリアしていくことで、どんな初心者でも必ず動く敵を作ることができるんだ。
もちろん、後から「敵に弾を撃たせる」とか「複雑な軌道で動かす」といった応用を加えることもできるけど、すべての基礎はこの3ステップに詰まっていると言っても過言ではないんだね。
まずは焦らずに、この基本構造をしっかりと頭に入れておくことが、挫折せずにゲームを完成させるための最大のコツになるよ。
なぜこの3ステップの手順で進めるのが確実なの?

Unityのコンポーネント指向がカギになる
Unityというゲームエンジンは、画像などのオブジェクトに対して「物理演算」や「当たり判定」「プログラム(スクリプト)」といった部品(コンポーネント)をペタペタとくっつけていくことでキャラクターを動かす仕組みになっているんだ。
この仕組みのことを「コンポーネント指向」と呼ぶよ。
だから、まずはベースとなる「見た目」を画面に置き、そこに「物理的な実体」を持たせ、最後に「頭脳(スクリプト)」を取り付けるという順番が、一番理にかなっているんだね。
あちこち同時につまみ食いして作ろうとすると、「当たり判定の設定を忘れて弾がすり抜けた!」とか「重力の設定を間違えて敵が画面の下へ落下していった!」みたいなエラーが起きやすくなってしまうんだよ。
見た目と物理的な設定を分けるメリット
ゲーム開発に慣れていないうちは、プログラミングのコードを書くことばかりに意識が向いてしまいがちだよね。
でも、Unityではインスペクターと呼ばれる設定画面での操作がとても重要な役割を持っているんだ。
先にコライダー(当たり判定の枠)や、リジッドボディ(物理挙動の管理)の設定を済ませておくことで、あとから書くスクリプトの量がグッと減って、とてもシンプルに処理できるようになるんだよ。
スクリプトのミスなのか、Unity側の設定漏れなのかが切り分けやすくなるから、バグが起きたときの解決も早くなるというメリットがあるんだ。
最近のゲーム制作におけるトレンドと拡張性
最初は「右から左へ真っ直ぐ移動するだけの敵」から作り始めるのが定番だけど、近年のゲーム制作のトレンドとしては、「後からどんどん敵の種類を増やせる設計」を意識したチュートリアルが多くなっているとされているよ。
例えば、敵の出現パターンを直接コードに書き込むのではなくて、「ScriptableObject(スクリプタブルオブジェクト)」というUnityの機能を使ってデータとして管理したり、ベースとなる敵のプログラム(基底クラス)を作って、それを使い回して色々な敵を量産したりする手法が人気なんだ。
とはいえ、基礎となる3ステップができていないと、こういった応用テクニックを理解するのはすごく難しいよね。
だからこそ、まずは一番シンプルな敵を完璧に作れるようになることが、将来すごいゲームを作るための最短ルートになるんだよ。
2Dシューティングの敵キャラクターを実装する3つの具体例

ここからは、実際にUnityの画面を開きながら作業しているつもりで、具体的な実装の手順を3つのパートに分けて詳しく見ていこう。
どのステップもシューティングゲームには欠かせない重要な要素だよ。
具体例1:敵の配置と当たり判定(コライダー)の設定
スプライトの配置と物理演算の準備
まずは、Assetsフォルダにインポートした敵の画像を、Hierarchy(ヒエラルキー)ウィンドウに直接ドラッグ&ドロップして、ゲームシーンに配置してみよう。
配置したオブジェクトの名前は、そのままでは画像ファイル名になっていて分かりにくいから、シンプルに「Enemy」と変更しておくのがおすすめだよ。
次に、この画像に「当たり判定」をつける作業を行うんだ。
インスペクターから「Add Component」ボタンを押して、Box Collider 2D(四角形の判定)や、Polygon Collider 2D(画像に沿った複雑な判定)を追加しよう。
シューティングの場合は少しでも判定が大きすぎると「避けたはずなのに当たった!」とプレイヤーにストレスを与えてしまうから、判定枠は画像よりも少しだけ小さめに設定するのが、良いゲームにするためのちょっとしたコツなんだよ。
Rigidbody2Dの追加とタグの設定
当たり判定をつけたら、次は物理演算を扱うためのRigidbody2Dを追加しよう。
ここで初心者がよくやってしまう失敗が、重力の設定をそのままにしてしまい、ゲームを再生した瞬間に敵がボトボトと下へ落下してしまうことなんだ。
これを防ぐために、Rigidbody2Dの「Body Type」という項目を「Dynamic」から「Kinematic」に変更しよう。
Kinematicにすると、重力や物理的な衝突の影響を受けなくなり、スクリプトで指示した通りにだけ動くようになるから、シューティングゲームの敵にはピッタリなんだ。
さらに、この敵オブジェクトが「敵である」とプログラムから簡単に識別できるように、インスペクターの一番上にある「Tag」を「Enemy」に設定しておくのを絶対に忘れないでね。
後で弾が当たったときの処理を書くときに、このタグが大活躍するんだよ。
具体例2:敵の移動ロジック(スクリプト)を作る
簡単でシンプルな直線移動・往復移動
設定が終わったら、いよいよ敵を動かしてみよう。
「EnemyController」というようなC#スクリプトを新しく作って、敵オブジェクトにアタッチ(くっつける)してね。
一番簡単な動きは、Update関数の中で毎フレーム少しずつ座標(Transform)をずらしていく方法だよ。
例えば、縦スクロールシューティングなら、Y座標の値を少しずつマイナスしていくコードを書くだけで、上から下へ迫ってくる敵が完成するんだ。
もし横スクロールならX座標を減らしていけばいいよね。
さらに、「画面の端の座標まできたら、移動する方向を反転させる」という条件分岐(if文)を少し書き足すだけで、昔ながらのインベーダーゲームのような左右に往復する動きも簡単に作れちゃうんだよ。
追尾や複雑なパターンへの応用
直線的な動きに慣れてきたら、少し賢い敵を作ってみたくなるよね。
Unityなら、プレイヤーの現在位置を取得して、常に自機の方へ向かって進む「追尾型」のAIを作ることも難しくないんだ。
プレイヤーオブジェクトをスクリプト内で見つけて、その方向に向かって少しずつ進むような計算式を入れるだけで、一気に厄介な敵に早変わりするよ。
他にも、画面端から斜めに出てきて途中でカーブするような動きなど、スクリプトを複数用意して使い分けることで、ゲームの展開がグッと単調じゃなくなるんだ。
このように、動きのパターンごとにスクリプト(「EnemyStraight」や「EnemyHoming」など)を分けて作っておくと、管理がすごく楽になるからおすすめだよ。
具体例3:当たり判定処理と、敵の弾の発射
弾が当たったときのダメージ処理と爆発演出
シューティングゲームの醍醐味といえば、やっぱり敵を撃ち落とす爽快感だよね。
自機の弾が敵に当たったかどうかの判定は、先ほど設定した「タグ」を使っておこなうんだ。
敵側のスクリプトに「OnTriggerEnter2D」という、何かがぶつかった瞬間に呼ばれる特別な関数を用意しよう。
その中で、「もし、ぶつかってきた相手のタグが『PlayerBullet(自機の弾)』だったら」という条件を書いて、HPを減らす処理を行うのが定番のやり方だよ。
そしてHPが0になったら、やられ演出として爆発エフェクトのPrefab(プレハブ)をInstantiate関数で画面に出現させよう。
同時に、スコアを加算する処理を呼び出して、最後にDestroy(gameObject)を実行して敵自身を画面から消去すれば、完璧な撃破システムの完成なんだ。
敵に弾を撃たせて難易度を上げる方法
ゲームを進めていくと、体当たりしてくるだけじゃなくて、弾を撃ってくる手強い敵も出したくなってくるよね。
敵の弾も、基本的には自機の弾と同じように作れば大丈夫。
弾の画像にコライダーとスクリプトをつけてPrefab化しておき、敵のスクリプトの中でタイマーを使って「残り時間が0になったら弾を生成(Instantiate)して、タイマーをリセットする」というインターバル処理を書くのが一般的だよ。
これができるようになれば、少し工夫するだけで色々な攻撃が作れるようになるんだ。
例えば、Quaternion.Eulerという角度を計算する機能を使って、少しずつ弾の発射角度をずらしながら同時に複数の弾を撃ち出す処理を書けば、ボスキャラが使うような扇状の「弾幕(N-way弾)」を作ることもできるんだよ。
この部分を作り込むことで、あなたのゲームはプロが作ったようなクオリティに一気に近づくはずだね。
敵の実装をマスターしてシューティングゲームを完成させよう!

ここまで、Unityの2Dシューティングにおける敵の実装方法について詳しく解説してきたよ。
頭の中を整理するために、もう一度重要なポイントをまとめておくね。
- 敵の画像を配置したら、少し小さめのCollider2Dと、重力の影響を消すためのRigidbody2D(Kinematic)をセットする。
- 接触判定で識別するために、インスペクターで必ず「Enemy」タグを設定しておく。
- C#スクリプトを作成し、直進や往復、自機を追尾するなど、ゲームに合った移動ルールをプログラミングする。
- OnTriggerEnter2D関数を使って弾との当たり判定を行い、HP減少、爆発演出、スコア加算、そしてオブジェクトの削除(Destroy)を行う。
- 敵の攻撃は、Prefab化した敵弾をタイマー処理を使って一定間隔で生成(Instantiate)することで実装する。
これらの手順を一つずつ確実にクリアしていけば、初心者でも絶対に立派な敵キャラクターを作り上げることができるんだ。
基礎がしっかりしていれば、後から出現パターンを工夫したり、種類を増やしたりするのもずっと簡単になるからね。
最初は、スクリプトのスペルミスでエラーが出たり、設定を一つ忘れたせいで弾が敵をすり抜けてしまったりして、戸惑うこともあるかもしれない。
でも、それはゲーム開発をしている人ならプロでも初心者の頃に必ず通ってきた「あるある」の道だから、全然気にしないで大丈夫だよ!
一つひとつのコンポーネントの役割や、コードの意味を理解しながら落ち着いて進めていけば、必ずあなたの思い通りに動くようになるからね。
さっそくUnityのエディタを開いて、今回学んだステップを順番に試しながら、あなただけの最強の敵キャラクターを作ってみよう!
きっと、画面の中で自分の作った敵が動き出した瞬間、たまらない達成感を味わえるはずだよ。