Unityゲームの作り方メモシューティング

【Unity入門】2Dシューティングゲームを簡単に作る手順を解説

Unity
  1. 1. はじめに
  2. 2. Unityの準備
    1. ① Unityのインストールとプロジェクトの作成
    2. ② Unity Asset Storeからアセットをインポート
    3. ③ シーンをセットアップ
  3. 3. プレイヤーの配置
    1. ① プレイヤーのスプライトを配置
    2. ② プレイヤーにコライダーを設定
    3. ③ 弾を発射する位置を設定
  4. 4. プレイヤーを移動させる
    1. ① C#スクリプトを作成
    2. ② スクリプトを編集
    3. ③ スクリプトを適用
    4. ④ 動作を確認
  5. 5. 弾の作成
    1. ① 弾のスプライトを配置
    2. ② コライダー(当たり判定)を追加
    3. ③ Rigidbody2D(物理演算)の追加
    4. ④ プレハブ化
  6. 6. 弾を前方向に動かす
    1. ① C#スクリプトを作成
    2. ② スクリプトを編集
    3. ③ スクリプトの解説
    4. ④ 動作確認
  7. 7. 弾を発射させる
    1. ① PlayerManager スクリプトを編集
    2. ② Inspector でプレハブを設定
    3. ③ 動作確認
    4. ④ 追加調整(弾の発射間隔を制限)
  8. 8. 敵を配置
    1. ① 敵のスプライトを配置
    2. ② コライダー(当たり判定)を追加
    3. ③ 敵のスクリプトを作成
    4. ④ スクリプトを編集
    5. ⑤ 動作確認
  9. 9. 敵の弾の作成と発射
    1. ① 発射位置(EnemyBulletPosition)の設定
    2. ② 敵の弾のオブジェクトを作成
    3. ③ コライダー(当たり判定)の追加
    4. ④ Rigidbody2D(物理演算)の追加
    5. ⑤ 敵の弾のスクリプトを作成
    6. ⑥ スクリプトを編集
    7. ⑦ プレハブ化
    8. ⑧ 敵に弾を発射させる
    9. ⑨ Inspector でプレハブを設定
    10. ⑩ 動作確認
  10. 10. プレイヤーが敵に当たったら消滅させる
    1. ① プレイヤーと敵のタグを設定
    2. ② 敵がプレイヤーに当たったら消滅するスクリプトを追加
    3. ③ コライダーの設定を確認
    4. ④ 動作確認
  11. 11. 敵を生成する
    1. ① 敵をプレハブ化
    2. ② 敵を生成するスクリプトを作成
    3. ③ スクリプトを編集
    4. ④ Inspector でプレハブを設定
    5. ⑤ 動作確認
  12. よくある質問(FAQ)
    1. 関連記事:

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」**というアセットを使用します。
このアセットには、プレイヤー・敵キャラクター・弾・背景など、シューティングゲームに必要な素材がすべて含まれています。

アセットのインポート手順

  1. Unity Asset Storeを開く
    • 上記のリンクをクリックして、アセットストアにアクセス。
  2. アセットを購入(無料の場合は取得)
    • 「カートに追加」→「購入」→「マイアセット」からダウンロード。
  3. Unityにインポート
    • Unityのメニューバーから「Window」→「Package Manager」を開く。
    • 「My Assets」タブで**「Vertical 2D Shooting Assets Pack」**を検索し、「Import」をクリック。
    • **すべての項目を選択した状態で「インポート」**を実行。

③ シーンをセットアップ

アセットがインポートできたら、次の設定を行います。

  1. メインカメラを設定
    • Main Cameraを選択し、Orthographic(オーソグラフィック)に変更。(2Dゲーム向け)
    • Size5 に設定し、視野範囲を適切に調整。
  2. ゲームオブジェクトを整理する
    • 「Hierarchy(ヒエラルキー)」ウィンドウで、新しい空のオブジェクトを作成。
    • 名前を GameManager に変更し、今後の管理をしやすくする。
  3. 背景を配置する
    • アセット内の背景画像Hierarchyにドラッグ&ドロップ。
    • TransformPosition(0,0,0) に設定。

これでUnityの開発環境が整いました!
次のステップでは、プレイヤーを配置して、自由に動かせるようにしていきます! 🎮✨




3. プレイヤーの配置

次は、プレイヤーをゲーム画面に配置していきます!💡
2Dシューティングゲームでは、プレイヤーが自由に動き回れることが重要です。
ここでは、アセットのスプライトを使ってプレイヤーを配置し、当たり判定(コライダー)の設定まで行います。


① プレイヤーのスプライトを配置

まずは、プレイヤーの画像をヒエラルキー(Hierarchy)ウィンドウに追加しましょう。

  1. UnityのHierarchyウィンドウを開く
  2. アセットのスプライトを選択
    • Vertical 2D Shooting Assets Pack 内の プレイヤーのスプライト(Player) を選びます。
  3. スプライトをシーンにドラッグ&ドロップ
    • すると、ゲーム画面にプレイヤーキャラクターが表示されます。
  4. オブジェクトの名前を変更
    • Hierarchyウィンドウでオブジェクトを Player にリネーム。

② プレイヤーにコライダーを設定

プレイヤーが敵や弾と衝突した際に判定を行うために、**Collider(コライダー)**を追加します。

  1. Player オブジェクトを選択
  2. Inspector ウィンドウの Add Component をクリック
  3. CapsuleCollider2D を追加
  4. Edit Collider ボタンを押して、プレイヤーの形状に合わせてサイズを調整

💡 コライダーの役割

  • プレイヤーが敵や弾と衝突した際に、当たり判定を検出するのに必要。
  • 適切なサイズに調整することで、当たり判定の精度を上げる。

③ 弾を発射する位置を設定

プレイヤーの前方から弾を発射するために、**弾の発射位置を示すオブジェクト(BulletPosition)**を作成します。

  1. Hierarchyウィンドウで Player を右クリック → Create Empty を選択
  2. 新しくできた空のオブジェクトの名前を BulletPosition に変更
  3. BulletPositionPlayer子オブジェクト に設定
    • Hierarchy内で BulletPositionPlayer の下にドラッグ
  4. InspectorTransformPosition を調整
    • X: 0 / Y: 1 / Z: 0 に設定(プレイヤーの先端付近)

💡 子オブジェクトとは?

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

これで、プレイヤーがシーンに登場し、弾の発射位置もセットできました!
次のステップでは、プレイヤーを動かせるようにスクリプトを作成していきます! 🎮✨




4. プレイヤーを移動させる

次は、プレイヤーが自由に移動できるようにするスクリプトを作成します!🚀
上下左右のキーを押すと、プレイヤーがスムーズに移動するように設定していきます。


① C#スクリプトを作成

プレイヤーを動かすためのスクリプトを作成します。

  1. Projectウィンドウを開く
  2. Assetsフォルダ内で右クリック → CreateC# Script を選択
  3. スクリプト名を PlayerManager に変更
  4. 作成したスクリプトを Player オブジェクトにアタッチ
    • PlayerManagerHierarchyPlayer にドラッグ&ドロップ

② スクリプトを編集

プレイヤーを矢印キー(または 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:フレームレートによる移動速度の違いを調整し、なめらかに動かす

③ スクリプトを適用

作成した PlayerManagerPlayer に適用する方法:

  1. Hierarchyウィンドウで Player を選択
  2. Inspectorウィンドウで Add Component をクリック
  3. PlayerManager を検索して追加

これで、スクリプトが Player に適用されました!🎮


④ 動作を確認

▶ボタンを押してゲームを実行し、矢印キーや WASD キーでプレイヤーが動くか確認してみましょう!

できたこと

  • 矢印キー (← → ↑ ↓) でプレイヤーが移動
  • WASD キーでも操作可能

これで、自由に移動できるプレイヤーが完成しました!
次のステップでは、弾を発射できるようにしていきます! 🚀🔫




5. 弾の作成

プレイヤーが自由に動けるようになったので、次は弾を作成して発射できるようにします!🚀💥
このステップでは、弾のオブジェクトを作成し、適切な当たり判定を設定していきます。


① 弾のスプライトを配置

  1. Hierarchyウィンドウを開く
  2. ProjectウィンドウのAssetsフォルダを開く
  3. アセットから「Player Bullet 1」のスプライトを選択
  4. Hierarchyにドラッグ&ドロップ
  5. オブジェクト名を「PlayerBullet」に変更

これで、ゲーム画面にプレイヤーの弾が表示されました!🔫


② コライダー(当たり判定)を追加

弾が敵と衝突したときに判定できるように、コライダーを設定します。

  1. HierarchyPlayerBulletを選択
  2. Inspectorウィンドウの「Add Component」ボタンをクリック
  3. 「CircleCollider2D」を追加
  4. コライダーのサイズを弾に合わせて調整
    • Edit Colliderを押して、弾のサイズぴったりに調整しましょう。

💡 コライダーの役割

  • 敵や壁にぶつかったときの当たり判定を処理するために必要!

③ Rigidbody2D(物理演算)の追加

弾を自然に動かすために、Rigidbody2Dを追加します。

  1. PlayerBulletを選択
  2. Inspectorウィンドウで「Add Component」→ Rigidbody2Dを追加
  3. 設定を変更
    • Gravity Scale を 0 にする
    • Body TypeDynamic のままでOK

💡 Rigidbody2Dの役割

  • Unityの物理エンジンを使い、オブジェクトをスムーズに動かすのに必要!
  • Gravity Scale0 にしないと、弾が下に落ちてしまうので注意!

④ プレハブ化

弾を何度も発射できるようにするために、プレハブを作成します。

  1. HierarchyウィンドウでPlayerBulletを選択
  2. ProjectウィンドウのAssetsフォルダを開く
  3. PlayerBulletAssetsフォルダにドラッグ&ドロップ
  4. PlayerBulletがプレハブ化される
  5. HierarchyウィンドウからPlayerBulletを削除(プレハブがあるのでOK)

💡 プレハブの役割

  • プレハブにすると、コードで簡単に複製&発射できる!
  • 同じオブジェクトを繰り返し生成したいときに便利。

これで、弾のオブジェクトを作成&設定できました!
次のステップでは、弾が発射されて前方向に進むようにスクリプトを追加していきます!🚀✨




6. 弾を前方向に動かす

弾のオブジェクトが作成できたので、次は発射した弾を前方向に動かすスクリプトを作成します!🚀✨
このステップでは、弾が上方向に進み、画面外に出たら消える処理を実装していきます。


① C#スクリプトを作成

まずは、弾の動きを制御するスクリプトを作成します。

  1. Projectウィンドウを開く
  2. Assetsフォルダ内で右クリック → CreateC# Script を選択
  3. スクリプト名を Bullet に変更
  4. 作成したスクリプトを PlayerBullet プレハブにアタッチ
    • BulletHierarchy ではなく 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.positionY 方向に プラス しているので、弾が 上方向 に進む
  • bulletSpeed10 に設定(数値を変えれば速度調整可能)

Delete()

  • 弾が Y = 6 以上に到達したら Destroy(this.gameObject); で削除
  • 画面外の不要な弾を消して、パフォーマンスを最適化!

④ 動作確認

  1. PlayerBulletプレハブにBulletスクリプトがアタッチされているか確認
  2. Unityでゲームを再生
  3. ヒエラルキーに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ウィンドウで bulletPrefabbulletPosition を設定します。

1. Player オブジェクトを選択

  • Hierarchy ウィンドウで Player をクリック

2. Inspector ウィンドウを開く

  • PlayerManager コンポーネントの bulletPrefabbulletPosition の欄を確認

3. bulletPrefabPlayerBullet プレハブを設定

  • Project ウィンドウで PlayerBullet プレハブを探す
  • bulletPrefab の欄に PlayerBullet プレハブをドラッグ&ドロップ

4. bulletPositionBulletPosition オブジェクトを設定

  • Hierarchy ウィンドウで BulletPosition を探す
  • bulletPosition の欄に BulletPosition をドラッグ&ドロップ

③ 動作確認

  1. Unityでゲームを実行
  2. スペースキー を押して弾が発射されるか確認
  3. 弾がプレイヤーの前方から飛んでいけば成功!

④ 追加調整(弾の発射間隔を制限)

今のコードでは、スペースキーを連打すると一瞬で大量の弾が出てしまうことがあります。
発射間隔を制限するために、**クールダウン機能(連射間隔)**を追加します!

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. 敵を配置

プレイヤーの弾を発射できるようになったので、次は敵を配置して、シューティングゲームらしくしていきます!👾🎯
このステップでは、敵キャラクターをゲーム画面に配置し、当たり判定の設定を行います。


① 敵のスプライトを配置

  1. Hierarchyウィンドウを開く
  2. ProjectウィンドウのAssetsフォルダを開く
  3. アセットから「Enemy B」のスプライトを選択
  4. Hierarchyにドラッグ&ドロップ
  5. オブジェクト名を「Enemy」に変更
  6. TransformPosition を調整
    • X: 0 / Y: 5 / Z: 0 に設定(画面上部に配置)

これで敵がゲーム画面に表示されました!👾


② コライダー(当たり判定)を追加

敵が弾やプレイヤーと衝突した際に判定できるように、コライダーを設定します。

  1. HierarchyEnemyを選択
  2. Inspectorウィンドウの「Add Component」ボタンをクリック
  3. 「BoxCollider2D」を追加
  4. Edit Colliderボタンを押して、敵のサイズに合わせて調整

💡 コライダーの役割

  • 敵とプレイヤーの弾が衝突したときに、当たり判定を行うために必要!
  • 適切なサイズに調整することで、より正確なヒット判定ができる。

③ 敵のスクリプトを作成

敵を下方向に移動させるスクリプトを作成します。

  1. Project ウィンドウを開く
  2. Assets フォルダ内で右クリック → CreateC# Script を選択
  3. スクリプト名を EnemyManager に変更
  4. 作成したスクリプトを Enemy にアタッチ
    • EnemyManagerHierarchyEnemy にドラッグ&ドロップ

④ スクリプトを編集

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;:敵の移動速度(数値を変えると速さを調整可能)

⑤ 動作確認

  1. Unityでゲームを実行
  2. Enemy が下方向に移動するか確認
  3. 画面外に出ると Enemy が消えるかチェック

成功すると、敵が上から下にスムーズに移動し、画面外で削除されます!


これで、**敵キャラクターがゲームに登場!**👾
次のステップでは、敵を下方向に移動させるスクリプトを作成していきます!🚀🔥




9. 敵の弾の作成と発射

敵が攻撃できるように、弾のオブジェクトを作成し、発射する処理を実装します!👾🔫
このステップでは、敵の弾の作成・スクリプトの追加・発射処理の実装を行います。


① 発射位置(EnemyBulletPosition)の設定

敵の弾を発射するために、Enemy の子オブジェクトとして発射位置を設定します。

  1. Hierarchy ウィンドウで Enemy を選択
  2. 右クリック → Create Empty を選択
  3. オブジェクト名を EnemyBulletPosition に変更
  4. InspectorTransform を調整
    • X: 0 / Y: -1 / Z: 0(敵の先端に配置)
  5. EnemyBulletPositionEnemy の子オブジェクトにする
    • HierarchyEnemyBulletPositionEnemy の下にドラッグ

これで、敵の弾が発射される位置が決まりました!


② 敵の弾のオブジェクトを作成

  1. Projectウィンドウで Assets を開く
  2. アセットから Enemy Bullet 3 のスプライトを選択
  3. Hierarchy にドラッグ&ドロップ
  4. オブジェクト名を EnemyBullet に変更

③ コライダー(当たり判定)の追加

敵の弾に 当たり判定 を設定します。

  1. HierarchyEnemyBullet を選択
  2. Inspector ウィンドウの Add Component ボタンをクリック
  3. 「CircleCollider2D」を追加
  4. Edit Collider で弾のサイズに合わせて調整

敵の弾がプレイヤーと衝突できるようになりました!


④ Rigidbody2D(物理演算)の追加

弾が自然に動くように、Rigidbody2D を追加します。

  1. EnemyBullet を選択
  2. Inspector ウィンドウで Add ComponentRigidbody2D を追加
  3. 設定を変更
    • Gravity Scale0 にする(重力を無効化)

これで、弾が物理的に動く準備ができました!


⑤ 敵の弾のスクリプトを作成

敵の弾が下方向に移動する処理をスクリプトで実装します。

  1. Project ウィンドウで Assets フォルダを開く
  2. 右クリック → CreateC# Script を選択
  3. スクリプト名を EnemyBullet に変更
  4. 作成したスクリプトを EnemyBullet にアタッチ
    • EnemyBulletHierarchy ではなく 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 に到達したら削除

⑦ プレハブ化

敵が弾を発射できるように、プレハブを作成します。

  1. HierarchyEnemyBullet を選択
  2. Project ウィンドウの Assets フォルダを開く
  3. EnemyBulletAssets フォルダにドラッグ&ドロップ
  4. 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 のスクリプトに EnemyBulletPrefabEnemyBulletPosition を設定します。

  1. Hierarchy ウィンドウで Enemy を選択
  2. Inspector ウィンドウで EnemyManagerEnemyBulletPrefabEnemyBullet プレハブを設定
    • Project ウィンドウで EnemyBulletEnemyBulletPrefab の欄にドラッグ&ドロップ
  3. EnemyBulletPositionHierarchyEnemyBulletPosition を設定
    • Hierarchy ウィンドウで EnemyBulletPositionEnemyBulletPosition の欄にドラッグ&ドロップ

⑩ 動作確認

  1. Unity でゲームを実行
  2. 敵が弾を発射するか確認
  3. 弾がプレイヤーの方向へ飛んでいくかチェック

うまくいけば、敵が定期的に弾を発射します!👾🔫


これで 敵が定期的に弾を発射 するようになりました!🚀✨
次のステップでは、弾が当たったらプレイヤーや敵が消滅する処理を追加 していきます!🔥



10. プレイヤーが敵に当たったら消滅させる

ゲームらしくするために、プレイヤーが敵に衝突するとお互いに消滅する処理を追加します!💥🔥
このステップでは、敵とプレイヤーの当たり判定を設定し、衝突時にオブジェクトを削除するスクリプトを追加します。


① プレイヤーと敵のタグを設定

衝突判定を正しく行うために、プレイヤーと敵のタグを設定します。

1. プレイヤーのタグを「Player」に変更

  1. Hierarchy ウィンドウで Player を選択
  2. InspectorTag ドロップダウンを開く
  3. Player を選択
    • Player タグがなければ、「Add Tag」から新しく追加できます!

2. 敵のタグを「Enemy」に変更

  1. Hierarchy ウィンドウで Enemy を選択
  2. InspectorTag ドロップダウンを開く
  3. Enemy を選択
    • Enemy タグがなければ、「Add Tag」から新しく追加!

これで、プレイヤーと敵が識別できるようになりました!


② 敵がプレイヤーに当たったら消滅するスクリプトを追加

  1. Project ウィンドウで EnemyManager スクリプトを開く
  2. 以下のコードを追加
// 敵がプレイヤーにぶつかったら消滅
private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.CompareTag("Player"))
    {
        Destroy(this.gameObject); // 敵を削除
        Destroy(collision.gameObject); // プレイヤーも削除
    }
}

③ コライダーの設定を確認

衝突判定が正しく動作するために、プレイヤーと敵のコライダーの Is Trigger の設定を確認します。

  1. Hierarchy ウィンドウで Player を選択
  2. InspectorCapsuleCollider2DIs Trigger をオフにする
  3. Hierarchy ウィンドウで Enemy を選択
  4. InspectorBoxCollider2DIs Trigger をオフにする

Is Trigger をオフにすることで、OnCollisionEnter2D が正しく動作します!


④ 動作確認

  1. Unityでゲームを実行
  2. プレイヤーを敵にぶつけてみる
  3. 衝突した瞬間、プレイヤーと敵が消えるか確認

成功すると、敵とプレイヤーがぶつかった瞬間に消滅します!


これで、プレイヤーが敵に当たると消滅する処理が完成しました!💥
次のステップでは、敵をランダムに生成して、ゲームをより面白くしていきます! 🚀✨




11. 敵を生成する

プレイヤーが敵を倒しても、新しい敵が出現しないとゲームがつまらないですよね?
そこで今回は、敵をランダムな位置に定期的に生成する処理を実装します!🚀👾


① 敵をプレハブ化

敵を繰り返し生成できるように、プレハブを作成します。

  1. Hierarchy ウィンドウで Enemy を選択
  2. Project ウィンドウの Assets フォルダを開く
  3. EnemyAssets フォルダにドラッグ&ドロップ
  4. プレハブ化が完了したら、HierarchyEnemy を削除

これで、敵がプレハブとして保存され、コードで生成できるようになりました!


② 敵を生成するスクリプトを作成

  1. Project ウィンドウで Assets フォルダを開く
  2. 右クリック → CreateC# Script を選択
  3. スクリプト名を EnemySpawn に変更
  4. 作成したスクリプトを 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 を設定します。

  1. HierarchyEnemySpawn を選択
  2. InspectorEnemySpawn のスクリプトを確認
  3. EnemyPrefab の欄に Enemy プレハブをドラッグ&ドロップ

これで、スクリプトから敵を生成できるようになりました!


⑤ 動作確認

  1. Unityでゲームを実行
  2. 敵がランダムな位置から定期的に出現するか確認
  3. 生成された敵が下に移動し、プレイヤーと戦えるようになっていれば成功!

成功すると、敵が画面上部からランダムな位置に出現し、下へ移動します!👾🎯

「ゼロから作るのも楽しいですが、もっとスピーディーに開発したい方へ」
この記事では、Unityの基本機能を使ってシューティングゲームを作成しましたが、
Shoot ‘Em Up Kit 2D を使うと、
本格的なシューティングゲームがすぐに作れるテンプレートが揃っています!

また、シューティングに限らず、アクションゲーム全般に対応した「TopDown Engine もオススメです。
ぜひ、アセットを活用して、よりハイクオリティなゲームを作ってみてください!


これで、**敵が定期的にランダムな位置に出現するようになりました!**🚀✨
これで基本的な2Dシューティングゲームの形が完成しました!🎮🔥




よくある質問(FAQ)

Q
弾が発射されないのですが、どうすればいいですか?
A

以下のポイントを確認してください。

  • PlayerManagerbulletPrefabPlayerBullet プレハブが設定されているか?
  • Bullet スクリプトが PlayerBullet プレハブに正しくアタッチされているか?
  • bulletPositionPlayer の先端に正しく配置されているか?
  • Space キーを押したときに Shot() メソッドが実行されているか?
Q
敵が出現しないのですが、どうすればいいですか?
A

以下のポイントを確認してください。

  • EnemyPrefabEnemy プレハブが設定されているか?
  • EnemySpawn スクリプトが空のオブジェクト EnemySpawn にアタッチされているか?
  • InvokeRepeating("Spawn", 1f, 1f); で適切な間隔で敵が生成されるようになっているか?
  • EnemyManagerMove() メソッドで transform.position が適切に更新されているか?
Q
弾が敵に当たっても消えません。どうすればいいですか?
A

以下のポイントをチェックしてください。

  • PlayerBulletCircleCollider2D が追加されているか?
  • EnemyBoxCollider2D が追加されているか?
  • OnCollisionEnter2D() の処理が EnemyManager に正しく追加されているか?
  • PlayerBulletIs Triggerオフにしているか?
タイトルとURLをコピーしました