スポンサーリンク
スポンサーリンク
Unityゲームの作り方メモ

【Unity】2Dシューティングの作り方

Unity

ユニティーを使用した2Dシューティングの作り方のメモです。ゲーム制作の参考にしていただければ嬉しいです。トグルボタンをクリックすると記事が表示されます。小さくて見ずらい画像はクリックで拡大できます。

使用するUnityAssetStoreのアセット

プレイヤーを配置する

インストールしたアセットからプレイヤーの画像を配置しました。

名前はPlayerにしました。

PlayerにCapsulecolider2Dを追加して、サイズを調整しました。

Playerの子オブジェクトに空のオブジェクトを作成しました。

名前はBulletPositionにしました。

ここから弾を発射させるのでplayerの先端に配置しました。

プレイヤーを移動させる

新しくC#スクリプトを作成します。名前はPlayerManagerにしました。

作成したスクリプトをPlayerにアタッチしました。

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;

    }
}

これでキーボードの上下左右でプレイヤーを移動させるようにできました。

弾の作成

Player Bullet 1をヒエラルキーウィンドウにドラッグ&ドロップしました。

Player BulletにCircleColider2Dを追加して、コライダーの大きさを調整しました。

Player Bulletにrigidbody2Dを追加しました。GravityScaleを0に変更しました。

弾を動かす

新しく弾のC#スクリプトを作成します。名前はBulletにしました。

弾を前方向に動かす処理をします。

using UnityEngine;

public class Bullet : MonoBehaviour
{
    private int bulletSpeed = 10;

    

    // Update is called once per frame
    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);
        }
    
    }
}

作成したスクリプトをPlayer Bulletにアタッチします。

弾が前方向に飛んでいくようになりました。

弾を発射させる

PlayerManagerを開いてコードを追加しました。

    public GameObject bulletPrefab;
    public GameObject bulletPosition;

    void Update()
    {
        Shot();
    }
    private void Shot() 
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Instantiate(bulletPrefab, bulletPosition.transform.position, transform.rotation);
        }
    }

Player Bulletをprefabにしました。

playerのinspector画面からBulletPositionとbulletprefabを設定しました。

スペースキーで弾が発射できるようになりました。

敵の作成

アセットのSpriteからEnemy Bを選択して配置しました。

Enemy Bにboxcorider2Dを追加しました。

敵のスクリプト

新しくC#スクリプトを作成しました。

名前はEnemyManagerにしました。

作成したスクリプトをEnemyにアタッチしました。

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);
        }

    }
}

Enemyが下に移動するようになりました。

Enemyの弾の作成

Enemyの子オブジェクトに空のオブジェクトを作成しました。

名前はEnemyBulletPositionにしました。

EnemyBulletPositionの位置をEnemyの先端に配置しました。

弾のspriteからEnemy Bullet 3を選んで配置しました。

Enemy Bullet 3にCircleColider2Drigidbody2Dを追加しました。

敵の弾のスクリプト

新しくC#スクリプトを作成しました。

名前はEnemyBulletにしました。

作成したスクリプトをEnemyにアタッチしました。

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);
        }

    }
}

敵に弾を発射させる

EnemyBulletをprefabにしました。

EnemyManagerにコードを追加して、Enemy生成時に弾を発射させるようにしました。

public GameObject EnemybulletPrefab;
public GameObject EnemybulletPosition;

//Enemyが生成された時に弾を発射させる

 private void Start()
    {
        Shot();
    }
    private void Shot()
    {
         Instantiate(EnemybulletPrefab, EnemybulletPosition.transform.position, transform.rotation);
    }

Enemyのinspector画面からEnemybulletPrefabとEnemybulletPositionを設定しました。

敵が弾を発射するようになりました。

弾が当たったら破壊する

PlayerとEnemyにタグを設定します。

BulletとEnemyBulletにコードを追加します。

  //bulletがPlayer以外にぶつかったら消滅
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (!collision.gameObject.CompareTag("Player"))
        {
            Destroy(this.gameObject);
            Destroy(collision.gameObject);
        }
    }

 //bulletがEnemy以外にぶつかったら消滅
private void OnCollisionEnter2D(Collision2D collision)
    {
        if (!collision.gameObject.CompareTag("Enemy"))
        {
            Destroy(this.gameObject);
            Destroy(collision.gameObject);
        }
    }

弾が当たると消滅するようになりました。

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

EnemyManagerを開いてコードを追加しました。

  //EnemyがPlayerにぶつかったら消滅
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            Destroy(this.gameObject);
            Destroy(collision.gameObject);
        }
    }

敵を生成する

Enemyをprefabにしました。

新しくC#スクリプトを作成しました。名前はEnemySpawnにしました。

空のオブジェクトを作成してEnemySpawnをアタッチしました。

using UnityEngine;

public class EnemySpawn : MonoBehaviour
{
    public GameObject EnemyPrefab;
    
    void Start()
    {
        //一秒間隔で実行する
        InvokeRepeating("Spawn", 1f, 1f);
        
    }

   //Enemyを生成する。

    private void Spawn()
    {
        //X軸をランダムにして生成する。

        Vector2 randomPos = new Vector2(Random.Range(-8f, 8f), transform.position.y + 6f);
        
        Instantiate(EnemyPrefab, randomPos, transform.rotation);
    }
}

inspector画面からEnemyprefabを設定しました。

敵が出現するようになりました。

シューティングゲームのアセット

スポンサーリンク
C-BA memo
タイトルとURLをコピーしました