1. はじめに
「2Dシューティングゲームを作ってみたい!」と思ったことはありませんか?
Unityを使えば、初心者でも簡単に2Dシューティングゲームを作ることができます!🚀
この記事では、UnityのAsset Storeにある「Vertical 2D Shooting Assets Pack」を活用しながら、基本的な2Dシューティングゲームの作り方を解説します。
ゲームの基本的な流れは以下の通りです。
- プレイヤーを配置して移動できるようにする
- 弾を発射して敵を倒せるようにする
- 敵をランダムに出現させて、敵も攻撃するようにする
- プレイヤーや敵が弾に当たると破壊される処理を追加する
ゲーム作りが初めての人でも大丈夫!Unityの基本的な使い方からスクリプトの書き方まで、わかりやすく解説していきます。
一緒に楽しく2Dシューティングゲームを作っていきましょう!🎮✨
「もっと簡単にシューティングゲームを作りたい?」
この記事では、Unityで2Dシューティングゲームを一から作る方法を解説しますが、
「Shoot ‘Em Up Kit 2D」 を使えば、
すぐにプロレベルのシューティングゲームを作れるテンプレートが揃っています!
また、より高度なカスタマイズがしたい場合は、
「TopDown Engine」 が便利です。
この記事を読んだ後に、これらのアセットもチェックしてみてください!
2. Unityの準備
まずは、Unityの開発環境を整えていきましょう。
2Dシューティングゲームを作るために、Unityのセットアップとアセットのインポートを行います。
① Unityのインストールとプロジェクトの作成
まだUnityをインストールしていない場合は、以下の手順でインストールしてください。
② Unity Asset Storeからアセットをインポート
今回の2Dシューティングゲームでは、**「Vertical 2D Shooting Assets Pack」**というアセットを使用します。
このアセットには、プレイヤー・敵キャラクター・弾・背景など、シューティングゲームに必要な素材がすべて含まれています。
アセットのインポート手順
- Unity Asset Storeを開く
- 上記のリンクをクリックして、アセットストアにアクセス。
- アセットを購入(無料の場合は取得)
- 「カートに追加」→「購入」→「マイアセット」からダウンロード。
- Unityにインポート
- Unityのメニューバーから「Window」→「Package Manager」を開く。
- 「My Assets」タブで**「Vertical 2D Shooting Assets Pack」**を検索し、「Import」をクリック。
- **すべての項目を選択した状態で「インポート」**を実行。
③ シーンをセットアップ
アセットがインポートできたら、次の設定を行います。
- メインカメラを設定
Main Camera
を選択し、Orthographic(オーソグラフィック)
に変更。(2Dゲーム向け)Size
を5
に設定し、視野範囲を適切に調整。
- ゲームオブジェクトを整理する
- 「Hierarchy(ヒエラルキー)」ウィンドウで、新しい空のオブジェクトを作成。
- 名前を
GameManager
に変更し、今後の管理をしやすくする。
- 背景を配置する
- アセット内の背景画像を
Hierarchy
にドラッグ&ドロップ。 Transform
のPosition
を(0,0,0)
に設定。
- アセット内の背景画像を

これでUnityの開発環境が整いました!
次のステップでは、プレイヤーを配置して、自由に動かせるようにしていきます! 🎮✨
3. プレイヤーの配置
次は、プレイヤーをゲーム画面に配置していきます!💡
2Dシューティングゲームでは、プレイヤーが自由に動き回れることが重要です。
ここでは、アセットのスプライトを使ってプレイヤーを配置し、当たり判定(コライダー)の設定まで行います。
① プレイヤーのスプライトを配置
まずは、プレイヤーの画像をヒエラルキー(Hierarchy)ウィンドウに追加しましょう。
- Unityの
Hierarchy
ウィンドウを開く - アセットのスプライトを選択
Vertical 2D Shooting Assets Pack
内の プレイヤーのスプライト(Player) を選びます。
- スプライトをシーンにドラッグ&ドロップ
- すると、ゲーム画面にプレイヤーキャラクターが表示されます。
- オブジェクトの名前を変更
Hierarchy
ウィンドウでオブジェクトをPlayer
にリネーム。

② プレイヤーにコライダーを設定
プレイヤーが敵や弾と衝突した際に判定を行うために、**Collider(コライダー)**を追加します。
Player
オブジェクトを選択Inspector
ウィンドウのAdd Component
をクリックCapsuleCollider2D
を追加Edit Collider
ボタンを押して、プレイヤーの形状に合わせてサイズを調整

💡 コライダーの役割
- プレイヤーが敵や弾と衝突した際に、当たり判定を検出するのに必要。
- 適切なサイズに調整することで、当たり判定の精度を上げる。
③ 弾を発射する位置を設定
プレイヤーの前方から弾を発射するために、**弾の発射位置を示すオブジェクト(BulletPosition)**を作成します。
Hierarchy
ウィンドウでPlayer
を右クリック →Create Empty
を選択- 新しくできた空のオブジェクトの名前を
BulletPosition
に変更 BulletPosition
をPlayer
の 子オブジェクト に設定Hierarchy
内でBulletPosition
をPlayer
の下にドラッグ
Inspector
でTransform
のPosition
を調整- X:
0
/ Y:1
/ Z:0
に設定(プレイヤーの先端付近)
- X:

💡 子オブジェクトとは?
Player
にBulletPosition
を 子オブジェクト として設定することで、プレイヤーが動いてもBulletPosition
が一緒に移動するようになります。

これで、プレイヤーがシーンに登場し、弾の発射位置もセットできました!
次のステップでは、プレイヤーを動かせるようにスクリプトを作成していきます! 🎮✨
4. プレイヤーを移動させる
次は、プレイヤーが自由に移動できるようにするスクリプトを作成します!🚀
上下左右のキーを押すと、プレイヤーがスムーズに移動するように設定していきます。
① C#スクリプトを作成
プレイヤーを動かすためのスクリプトを作成します。
Project
ウィンドウを開くAssets
フォルダ内で右クリック →Create
→C# Script
を選択- スクリプト名を
PlayerManager
に変更 - 作成したスクリプトを
Player
オブジェクトにアタッチPlayerManager
をHierarchy
のPlayer
にドラッグ&ドロップ
② スクリプトを編集
プレイヤーを矢印キー(または WASD
キー)で移動できるようにします。
using UnityEngine;
public class PlayerManager : MonoBehaviour
{
// プレイヤーの移動速度
private int moveSpeed = 10;
void Update()
{
Move();
}
// プレイヤーを移動させる
private void Move()
{
// キーの入力値を取得
float x = Input.GetAxis("Horizontal") * moveSpeed;
float y = Input.GetAxis("Vertical") * moveSpeed;
// 取得した入力値をプレイヤーの位置に反映させる
transform.position += new Vector3(x, y, 0) * Time.deltaTime;
}
}
💡 コードの解説
Input.GetAxis("Horizontal")
:左右キー (← →
またはA D
) の入力を取得Input.GetAxis("Vertical")
:上下キー (↑ ↓
またはW S
) の入力を取得moveSpeed
:プレイヤーの移動速度(デフォルトは10
)Time.deltaTime
:フレームレートによる移動速度の違いを調整し、なめらかに動かす
③ スクリプトを適用
作成した PlayerManager
を Player
に適用する方法:
Hierarchy
ウィンドウでPlayer
を選択Inspector
ウィンドウでAdd Component
をクリックPlayerManager
を検索して追加
これで、スクリプトが Player
に適用されました!🎮
④ 動作を確認
▶ボタンを押してゲームを実行し、矢印キーや WASD
キーでプレイヤーが動くか確認してみましょう!
✅ できたこと
- 矢印キー (
← → ↑ ↓
) でプレイヤーが移動 WASD
キーでも操作可能

これで、自由に移動できるプレイヤーが完成しました!
次のステップでは、弾を発射できるようにしていきます! 🚀🔫
5. 弾の作成
プレイヤーが自由に動けるようになったので、次は弾を作成して発射できるようにします!🚀💥
このステップでは、弾のオブジェクトを作成し、適切な当たり判定を設定していきます。
① 弾のスプライトを配置
Hierarchy
ウィンドウを開くProject
ウィンドウのAssets
フォルダを開く- アセットから「Player Bullet 1」のスプライトを選択
Hierarchy
にドラッグ&ドロップ- オブジェクト名を「PlayerBullet」に変更

これで、ゲーム画面にプレイヤーの弾が表示されました!🔫
② コライダー(当たり判定)を追加
弾が敵と衝突したときに判定できるように、コライダーを設定します。
Hierarchy
でPlayerBullet
を選択Inspector
ウィンドウの「Add Component」ボタンをクリック- 「CircleCollider2D」を追加
- コライダーのサイズを弾に合わせて調整
Edit Collider
を押して、弾のサイズぴったりに調整しましょう。

💡 コライダーの役割
- 敵や壁にぶつかったときの当たり判定を処理するために必要!
③ Rigidbody2D(物理演算)の追加
弾を自然に動かすために、Rigidbody2Dを追加します。
PlayerBullet
を選択Inspector
ウィンドウで「Add Component」→Rigidbody2D
を追加- 設定を変更
- Gravity Scale を
0
にする Body Type
はDynamic
のままでOK
- Gravity Scale を
💡 Rigidbody2Dの役割
- Unityの物理エンジンを使い、オブジェクトをスムーズに動かすのに必要!
Gravity Scale
を0
にしないと、弾が下に落ちてしまうので注意!
④ プレハブ化
弾を何度も発射できるようにするために、プレハブを作成します。
Hierarchy
ウィンドウでPlayerBullet
を選択Project
ウィンドウのAssets
フォルダを開くPlayerBullet
をAssets
フォルダにドラッグ&ドロップPlayerBullet
がプレハブ化されるHierarchy
ウィンドウからPlayerBullet
を削除(プレハブがあるのでOK)
💡 プレハブの役割
- プレハブにすると、コードで簡単に複製&発射できる!
- 同じオブジェクトを繰り返し生成したいときに便利。

これで、弾のオブジェクトを作成&設定できました!
次のステップでは、弾が発射されて前方向に進むようにスクリプトを追加していきます!🚀✨
6. 弾を前方向に動かす
弾のオブジェクトが作成できたので、次は発射した弾を前方向に動かすスクリプトを作成します!🚀✨
このステップでは、弾が上方向に進み、画面外に出たら消える処理を実装していきます。
① C#スクリプトを作成
まずは、弾の動きを制御するスクリプトを作成します。
Project
ウィンドウを開くAssets
フォルダ内で右クリック →Create
→C# Script
を選択- スクリプト名を
Bullet
に変更 - 作成したスクリプトを
PlayerBullet
プレハブにアタッチBullet
をHierarchy
ではなくPlayerBullet
のプレハブにドラッグ&ドロップ
② スクリプトを編集
Bullet
スクリプトを開いて、以下のコードを入力します。
using UnityEngine;
public class Bullet : MonoBehaviour
{
// 弾の速度
private int bulletSpeed = 10;
void Update()
{
Move();
Delete();
}
// 弾を前方向に動かす
private void Move()
{
transform.position += new Vector3(0, bulletSpeed, 0) * Time.deltaTime;
}
// 画面外に出たら消す
private void Delete()
{
if (this.transform.position.y > 6) // 画面の外に出たら削除
{
Destroy(this.gameObject);
}
}
}
③ スクリプトの解説
✅ Move()
transform.position
をY
方向に プラス しているので、弾が 上方向 に進むbulletSpeed
を10
に設定(数値を変えれば速度調整可能)
✅ Delete()
- 弾が
Y = 6
以上に到達したらDestroy(this.gameObject);
で削除 - 画面外の不要な弾を消して、パフォーマンスを最適化!
④ 動作確認
PlayerBullet
プレハブにBullet
スクリプトがアタッチされているか確認- Unityでゲームを再生
- ヒエラルキーに
PlayerBullet
を配置して、シーン上で弾が上方向に移動するか確認
🎯 うまくいけば、弾が上に向かって飛んでいき、画面外で消える!
「弾の発射はできたけど、もっと多彩な攻撃パターンを作りたい?」
「Shoot ‘Em Up Kit 2D」 を使えば、
多彩な武器システム・パワーアップ・敵の行動パターンが簡単に実装できます!
一から作るのも楽しいですが、プロ仕様のアセットを活用すると、開発スピードが大幅アップ!
カスタマイズもできるので、もっと高度なゲーム作りに挑戦したい方にオススメです。

これで、弾が発射後に前方向へ移動し、画面外に出たら消えるようになりました!
次のステップでは、プレイヤーがスペースキーを押すと弾を発射できるようにします! 🚀🔫
7. 弾を発射させる
前のステップで弾が前方向に動くようになりました!
次は、プレイヤーがスペースキーを押すと弾を発射する処理を実装していきます!🚀✨
① PlayerManager スクリプトを編集
プレイヤーがスペースキーを押すと弾が発射されるように、PlayerManager
スクリプトを編集します。
1. bulletPrefab
(弾のプレハブ)と bulletPosition
(発射位置)を設定
bulletPrefab
→ 発射する弾のプレハブbulletPosition
→ 弾の発射位置
2. Shot()
メソッドを追加
Input.GetKeyDown(KeyCode.Space)
で スペースキーが押されたら弾を発射Instantiate(bulletPrefab, bulletPosition.transform.position, transform.rotation)
で 弾のプレハブを生成
編集後の PlayerManager
スクリプト
using UnityEngine;
public class PlayerManager : MonoBehaviour
{
private int moveSpeed = 10;
// 弾のプレハブと発射位置
public GameObject bulletPrefab;
public GameObject bulletPosition;
void Update()
{
Move();
Shot();
}
private void Move()
{
float x = Input.GetAxis("Horizontal") * moveSpeed;
float y = Input.GetAxis("Vertical") * moveSpeed;
transform.position += new Vector3(x, y, 0) * Time.deltaTime;
}
// 弾を発射する
private void Shot()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(bulletPrefab, bulletPosition.transform.position, transform.rotation);
}
}
}
② Inspector でプレハブを設定
コードを書いた後は、UnityのInspectorウィンドウで bulletPrefab
と bulletPosition
を設定します。
1. Player
オブジェクトを選択
Hierarchy
ウィンドウでPlayer
をクリック
2. Inspector
ウィンドウを開く
PlayerManager
コンポーネントのbulletPrefab
とbulletPosition
の欄を確認
3. bulletPrefab
に PlayerBullet
プレハブを設定
Project
ウィンドウでPlayerBullet
プレハブを探すbulletPrefab
の欄にPlayerBullet
プレハブをドラッグ&ドロップ
4. bulletPosition
に BulletPosition
オブジェクトを設定
Hierarchy
ウィンドウでBulletPosition
を探すbulletPosition
の欄にBulletPosition
をドラッグ&ドロップ
③ 動作確認
- Unityでゲームを実行
スペースキー
を押して弾が発射されるか確認- 弾がプレイヤーの前方から飛んでいけば成功!
④ 追加調整(弾の発射間隔を制限)
今のコードでは、スペースキーを連打すると一瞬で大量の弾が出てしまうことがあります。
発射間隔を制限するために、**クールダウン機能(連射間隔)**を追加します!
using UnityEngine;
public class PlayerManager : MonoBehaviour
{
private int moveSpeed = 10;
public GameObject bulletPrefab;
public GameObject bulletPosition;
private float shotCooldown = 0.2f; // 連射間隔
private float nextShotTime = 0f; // 次に撃てる時間
void Update()
{
Move();
Shot();
}
private void Move()
{
float x = Input.GetAxis("Horizontal") * moveSpeed;
float y = Input.GetAxis("Vertical") * moveSpeed;
transform.position += new Vector3(x, y, 0) * Time.deltaTime;
}
private void Shot()
{
if (Input.GetKeyDown(KeyCode.Space) && Time.time > nextShotTime)
{
Instantiate(bulletPrefab, bulletPosition.transform.position, transform.rotation);
nextShotTime = Time.time + shotCooldown; // 次の発射時間を更新
}
}
}
💡 クールダウン機能の説明
shotCooldown = 0.2f;
→ 0.2秒ごとに弾を発射nextShotTime = Time.time + shotCooldown;
→ 次に撃てる時間を設定if (Time.time > nextShotTime)
→ 次の発射時間になるまで弾を撃てないようにする
この変更を加えることで、連射速度を制限し、よりバランスの取れたシューティングになります!🎮✨

これで スペースキーを押すと弾を発射 できるようになりました! 🚀✨
次のステップでは、敵を配置してシューティングゲームらしくしていきます! 🔥🎯
8. 敵を配置
プレイヤーの弾を発射できるようになったので、次は敵を配置して、シューティングゲームらしくしていきます!👾🎯
このステップでは、敵キャラクターをゲーム画面に配置し、当たり判定の設定を行います。
① 敵のスプライトを配置
Hierarchy
ウィンドウを開くProject
ウィンドウのAssets
フォルダを開く- アセットから「Enemy B」のスプライトを選択
Hierarchy
にドラッグ&ドロップ- オブジェクト名を「Enemy」に変更
Transform
のPosition
を調整- X:
0
/ Y:5
/ Z:0
に設定(画面上部に配置)
- X:

これで敵がゲーム画面に表示されました!👾
② コライダー(当たり判定)を追加
敵が弾やプレイヤーと衝突した際に判定できるように、コライダーを設定します。
Hierarchy
でEnemy
を選択Inspector
ウィンドウの「Add Component」ボタンをクリック- 「BoxCollider2D」を追加
Edit Collider
ボタンを押して、敵のサイズに合わせて調整

💡 コライダーの役割
- 敵とプレイヤーの弾が衝突したときに、当たり判定を行うために必要!
- 適切なサイズに調整することで、より正確なヒット判定ができる。
③ 敵のスクリプトを作成
敵を下方向に移動させるスクリプトを作成します。
Project
ウィンドウを開くAssets
フォルダ内で右クリック →Create
→C# Script
を選択- スクリプト名を
EnemyManager
に変更 - 作成したスクリプトを
Enemy
にアタッチEnemyManager
をHierarchy
のEnemy
にドラッグ&ドロップ
④ スクリプトを編集
EnemyManager
スクリプトを開いて、以下のコードを入力します。
using UnityEngine;
public class EnemyManager : MonoBehaviour
{
private int moveSpeed = 5; // 敵の移動速度
void Update()
{
Move();
Delete();
}
// 敵を下方向に移動させる
private void Move()
{
transform.position += new Vector3(0, -moveSpeed, 0) * Time.deltaTime;
}
// 画面外に出たら削除
private void Delete()
{
if (this.transform.position.y < -6) // 画面の外に出たら削除
{
Destroy(this.gameObject);
}
}
}
✅ スクリプトのポイント
Move()
:敵が Y軸のマイナス方向(下) に移動Delete()
:敵が画面の下(y < -6
)に到達したらDestroy(this.gameObject);
で削除moveSpeed = 5;
:敵の移動速度(数値を変えると速さを調整可能)
⑤ 動作確認
- Unityでゲームを実行
Enemy
が下方向に移動するか確認- 画面外に出ると
Enemy
が消えるかチェック
✅ 成功すると、敵が上から下にスムーズに移動し、画面外で削除されます!

これで、**敵キャラクターがゲームに登場!**👾
次のステップでは、敵を下方向に移動させるスクリプトを作成していきます!🚀🔥
9. 敵の弾の作成と発射
敵が攻撃できるように、弾のオブジェクトを作成し、発射する処理を実装します!👾🔫
このステップでは、敵の弾の作成・スクリプトの追加・発射処理の実装を行います。
① 発射位置(EnemyBulletPosition)の設定
敵の弾を発射するために、Enemy の子オブジェクトとして発射位置を設定します。
Hierarchy
ウィンドウでEnemy
を選択- 右クリック →
Create Empty
を選択 - オブジェクト名を
EnemyBulletPosition
に変更 Inspector
でTransform
を調整- X:
0
/ Y:-1
/ Z:0
(敵の先端に配置)
- X:
EnemyBulletPosition
をEnemy
の子オブジェクトにするHierarchy
でEnemyBulletPosition
をEnemy
の下にドラッグ

✅ これで、敵の弾が発射される位置が決まりました!
② 敵の弾のオブジェクトを作成
Project
ウィンドウでAssets
を開く- アセットから
Enemy Bullet 3
のスプライトを選択 Hierarchy
にドラッグ&ドロップ- オブジェクト名を
EnemyBullet
に変更

③ コライダー(当たり判定)の追加
敵の弾に 当たり判定 を設定します。
Hierarchy
でEnemyBullet
を選択Inspector
ウィンドウのAdd Component
ボタンをクリック- 「CircleCollider2D」を追加
Edit Collider
で弾のサイズに合わせて調整

✅ 敵の弾がプレイヤーと衝突できるようになりました!
④ Rigidbody2D(物理演算)の追加
弾が自然に動くように、Rigidbody2D を追加します。
EnemyBullet
を選択Inspector
ウィンドウでAdd Component
→Rigidbody2D
を追加- 設定を変更
Gravity Scale
を0
にする(重力を無効化)
✅ これで、弾が物理的に動く準備ができました!
⑤ 敵の弾のスクリプトを作成
敵の弾が下方向に移動する処理をスクリプトで実装します。
Project
ウィンドウでAssets
フォルダを開く- 右クリック →
Create
→C# Script
を選択 - スクリプト名を
EnemyBullet
に変更 - 作成したスクリプトを
EnemyBullet
にアタッチEnemyBullet
をHierarchy
ではなくEnemyBullet
のオブジェクトにドラッグ&ドロップ
⑥ スクリプトを編集
EnemyBullet
スクリプトを開いて、以下のコードを入力します。
using UnityEngine;
public class EnemyBullet : MonoBehaviour
{
private int bulletSpeed = 8;
void Update()
{
Move();
Delete();
}
// 弾を下方向に移動させる
private void Move()
{
transform.position += new Vector3(0, -bulletSpeed, 0) * Time.deltaTime;
}
// 画面外に出たら消す
private void Delete()
{
if (this.transform.position.y < -6)
{
Destroy(this.gameObject);
}
}
}
✅ コードのポイント
Move()
:弾が Y軸のマイナス方向(下) に移動Delete()
:弾が 画面の下(y < -6
) に到達したら削除
⑦ プレハブ化
敵が弾を発射できるように、プレハブを作成します。
Hierarchy
でEnemyBullet
を選択Project
ウィンドウのAssets
フォルダを開くEnemyBullet
をAssets
フォルダにドラッグ&ドロップHierarchy
からEnemyBullet
を削除
✅ これで、敵の弾がプレハブ化されました!
⑧ 敵に弾を発射させる
次に、敵が弾を発射する処理を EnemyManager
に追加します。
1. EnemyManager
スクリプトを開き、以下のコードを追加
public GameObject EnemyBulletPrefab;
public GameObject EnemyBulletPosition;
void Start()
{
InvokeRepeating("Shot", 1f, 2f); // 1秒後から2秒ごとに弾を発射
}
private void Shot()
{
Instantiate(EnemyBulletPrefab, EnemyBulletPosition.transform.position, transform.rotation);
}
✅ コードのポイント
InvokeRepeating("Shot", 1f, 2f);
- 1秒後から、2秒ごとに弾を発射
Instantiate(EnemyBulletPrefab, EnemyBulletPosition.transform.position, transform.rotation);
- 弾を発射位置(
EnemyBulletPosition
)から生成
- 弾を発射位置(
⑨ Inspector でプレハブを設定
EnemyManager
のスクリプトに EnemyBulletPrefab
と EnemyBulletPosition
を設定します。
Hierarchy
ウィンドウでEnemy
を選択Inspector
ウィンドウでEnemyManager
のEnemyBulletPrefab
にEnemyBullet
プレハブを設定Project
ウィンドウでEnemyBullet
をEnemyBulletPrefab
の欄にドラッグ&ドロップ
EnemyBulletPosition
にHierarchy
のEnemyBulletPosition
を設定Hierarchy
ウィンドウでEnemyBulletPosition
をEnemyBulletPosition
の欄にドラッグ&ドロップ
⑩ 動作確認
- Unity でゲームを実行
- 敵が弾を発射するか確認
- 弾がプレイヤーの方向へ飛んでいくかチェック
✅ うまくいけば、敵が定期的に弾を発射します!👾🔫

これで 敵が定期的に弾を発射 するようになりました!🚀✨
次のステップでは、弾が当たったらプレイヤーや敵が消滅する処理を追加 していきます!🔥
10. プレイヤーが敵に当たったら消滅させる
ゲームらしくするために、プレイヤーが敵に衝突するとお互いに消滅する処理を追加します!💥🔥
このステップでは、敵とプレイヤーの当たり判定を設定し、衝突時にオブジェクトを削除するスクリプトを追加します。
① プレイヤーと敵のタグを設定
衝突判定を正しく行うために、プレイヤーと敵のタグを設定します。
1. プレイヤーのタグを「Player」に変更
Hierarchy
ウィンドウでPlayer
を選択Inspector
のTag
ドロップダウンを開くPlayer
を選択Player
タグがなければ、「Add Tag」から新しく追加できます!
2. 敵のタグを「Enemy」に変更
Hierarchy
ウィンドウでEnemy
を選択Inspector
のTag
ドロップダウンを開くEnemy
を選択Enemy
タグがなければ、「Add Tag」から新しく追加!
✅ これで、プレイヤーと敵が識別できるようになりました!
② 敵がプレイヤーに当たったら消滅するスクリプトを追加
Project
ウィンドウでEnemyManager
スクリプトを開く- 以下のコードを追加
// 敵がプレイヤーにぶつかったら消滅
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Player"))
{
Destroy(this.gameObject); // 敵を削除
Destroy(collision.gameObject); // プレイヤーも削除
}
}
③ コライダーの設定を確認
衝突判定が正しく動作するために、プレイヤーと敵のコライダーの Is Trigger
の設定を確認します。
Hierarchy
ウィンドウでPlayer
を選択Inspector
でCapsuleCollider2D
のIs Trigger
をオフにするHierarchy
ウィンドウでEnemy
を選択Inspector
でBoxCollider2D
のIs Trigger
をオフにする
✅ Is Trigger
をオフにすることで、OnCollisionEnter2D
が正しく動作します!
④ 動作確認
- Unityでゲームを実行
- プレイヤーを敵にぶつけてみる
- 衝突した瞬間、プレイヤーと敵が消えるか確認
✅ 成功すると、敵とプレイヤーがぶつかった瞬間に消滅します!

これで、プレイヤーが敵に当たると消滅する処理が完成しました!💥
次のステップでは、敵をランダムに生成して、ゲームをより面白くしていきます! 🚀✨
11. 敵を生成する
プレイヤーが敵を倒しても、新しい敵が出現しないとゲームがつまらないですよね?
そこで今回は、敵をランダムな位置に定期的に生成する処理を実装します!🚀👾
① 敵をプレハブ化
敵を繰り返し生成できるように、プレハブを作成します。
Hierarchy
ウィンドウでEnemy
を選択Project
ウィンドウのAssets
フォルダを開くEnemy
をAssets
フォルダにドラッグ&ドロップ- プレハブ化が完了したら、
Hierarchy
のEnemy
を削除
✅ これで、敵がプレハブとして保存され、コードで生成できるようになりました!
② 敵を生成するスクリプトを作成
Project
ウィンドウでAssets
フォルダを開く- 右クリック →
Create
→C# Script
を選択 - スクリプト名を
EnemySpawn
に変更 - 作成したスクリプトを
EnemySpawn
にアタッチHierarchy
で右クリック →Create Empty
を選択- オブジェクト名を
EnemySpawn
に変更 EnemySpawn
オブジェクトにEnemySpawn
スクリプトをドラッグ&ドロップ
③ スクリプトを編集
敵を ランダムな位置に一定間隔で生成するスクリプト を作成します。
using UnityEngine;
public class EnemySpawn : MonoBehaviour
{
public GameObject EnemyPrefab; // 敵のプレハブ
private float spawnInterval = 1f; // 敵を生成する間隔
void Start()
{
// 一定間隔で敵を生成
InvokeRepeating("Spawn", 1f, spawnInterval);
}
// 敵をランダムな位置に生成する
private void Spawn()
{
// X座標をランダムに設定
float randomX = Random.Range(-8f, 8f);
// 生成位置を決定(画面上部)
Vector2 spawnPosition = new Vector2(randomX, transform.position.y + 6f);
// 敵を生成
Instantiate(EnemyPrefab, spawnPosition, Quaternion.identity);
}
}
✅ スクリプトのポイント
InvokeRepeating("Spawn", 1f, spawnInterval);
- 1秒後から、1秒ごとに敵を生成
Random.Range(-8f, 8f);
- 敵の出現位置をランダム化
Instantiate(EnemyPrefab, spawnPosition, Quaternion.identity);
- 敵を生成し、ランダムな位置に配置
④ Inspector でプレハブを設定
EnemySpawn
に 敵のプレハブ(EnemyPrefab
) を設定します。
Hierarchy
でEnemySpawn
を選択Inspector
でEnemySpawn
のスクリプトを確認EnemyPrefab
の欄にEnemy
プレハブをドラッグ&ドロップ
✅ これで、スクリプトから敵を生成できるようになりました!
⑤ 動作確認
- Unityでゲームを実行
- 敵がランダムな位置から定期的に出現するか確認
- 生成された敵が下に移動し、プレイヤーと戦えるようになっていれば成功!
✅ 成功すると、敵が画面上部からランダムな位置に出現し、下へ移動します!👾🎯
「ゼロから作るのも楽しいですが、もっとスピーディーに開発したい方へ」
この記事では、Unityの基本機能を使ってシューティングゲームを作成しましたが、
「Shoot ‘Em Up Kit 2D」 を使うと、
本格的なシューティングゲームがすぐに作れるテンプレートが揃っています!
また、シューティングに限らず、アクションゲーム全般に対応した「TopDown Engine」 もオススメです。
ぜひ、アセットを活用して、よりハイクオリティなゲームを作ってみてください!

これで、**敵が定期的にランダムな位置に出現するようになりました!**🚀✨
これで基本的な2Dシューティングゲームの形が完成しました!🎮🔥
よくある質問(FAQ)
- Q弾が発射されないのですが、どうすればいいですか?
- A
以下のポイントを確認してください。
PlayerManager
のbulletPrefab
にPlayerBullet
プレハブが設定されているか?Bullet
スクリプトがPlayerBullet
プレハブに正しくアタッチされているか?bulletPosition
がPlayer
の先端に正しく配置されているか?Space
キーを押したときにShot()
メソッドが実行されているか?
- Q敵が出現しないのですが、どうすればいいですか?
- A
以下のポイントを確認してください。
EnemyPrefab
にEnemy
プレハブが設定されているか?EnemySpawn
スクリプトが空のオブジェクトEnemySpawn
にアタッチされているか?InvokeRepeating("Spawn", 1f, 1f);
で適切な間隔で敵が生成されるようになっているか?EnemyManager
のMove()
メソッドでtransform.position
が適切に更新されているか?
- Q弾が敵に当たっても消えません。どうすればいいですか?
- A
以下のポイントをチェックしてください。
PlayerBullet
にCircleCollider2D
が追加されているか?Enemy
にBoxCollider2D
が追加されているか?OnCollisionEnter2D()
の処理がEnemyManager
に正しく追加されているか?PlayerBullet
のIs Trigger
をオフにしているか?