Unity|簡単な縦型の2Dシューティング作成(スマホ)。Part3.弾の発射

簡単な2Dシューティングゲーム作成の第3回目を進めていきます。今回は機体(プレイヤー)から弾を発射できるようにしていきます。

はじめに

Part1は下記から。

簡単なおさらいと今回やる事

前回まで、簡単な画面を作成して、矢印ボタンを押して機体が動くようにしました。今回は、機体から弾が出るようにします。

ゲーム作成開始

では、さっそく弾を撃つのを実装していきます。

弾の作成

まずは仮となる弾を用意します。Resourceフォルダ内で右クリック。作成から「2D」→「Sprites」→「Circle」を選びます。

名前をBulletにしてヒエラルキーにドラッグアンドドロップ。このままだと大きいのでスケールを変更しておきます。

スクリプトで弾を発射

次に、Scriptsフォルダ内で右クリックして「Bullet」と言う名前で新しくスクリプトファイルを作成します。

Bulletスクリプトの中身は下記のように変更します。縦方向に場所を移動しているだけです。

using UnityEngine;

public class Bullet : MonoBehaviour
{
    private float bulletspeed = 4.0f;

    private void FixedUpdate()
    {
        transform.position += new Vector3(0, bulletspeed, 0) * Time.fixedDeltaTime;
    }
}

このスクリプトをBulletにくっつけます。

当然ですが、弾は何発も発射します。もちろん、同じ弾なのでこのようなものはプレハブ化しておきます。テンプレートみたいなものですね。ヒエラルキーからPrefabsフォルダ内にドラッグアンドドロップ。

試しに動かしてみると、弾が上に向かって動いていきます。これで弾の動きは一旦OKですね。

弾を複数作成する

次に「Attack」ボタンを押した時に弾が出るようにします。

Playerスクリプトの中身は下記のように変更します。一番下のAttack()を追加しただけです。

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField] private GameObject prefabBullet;
    private float speed = 4.0f;
    private float MaxPos = 2.3f;
    private bool LPush = false;
    private bool RPush = false;

    private void FixedUpdate()
    {
        if (LPush && transform.position.x >= -MaxPos)
        {
            transform.position -= new Vector3(speed, 0, 0) * Time.fixedDeltaTime;
        }
        else if (RPush && transform.position.x <= MaxPos)
        {
            transform.position += new Vector3(speed, 0, 0) * Time.fixedDeltaTime;
        }

    }

    public void LeftPush(bool isPush)
    {
        LPush = isPush;
    }
    public void RightPush(bool isPush)
    {
        RPush = isPush;
    }

    public void Attack()
    {
        Instantiate(prefabBullet);
    }
}

変数に「Bulletプレハブ」を指定します。ヒエラルキーにあったBulletは不要なので消しておきます。

Attackボタンを押した時に呼ばれるように、Attackのクリック時のイベントに追加します。

これで一度実行してみます。ボタンを押すと弾が出ますが、機体がどこにいても真ん中の決まった場所から弾が出ます。

弾の出る位置を調整

次に、弾が出る位置を「機体の先端」に変更します。Player配下に「CreateEmpty」で空オブジェクトを追加します。

弾が出る位置なので名前は「BulletPoint」にでもしておきます。機体の前の方のいい感じの位置に調整します。

PlayerスクリプトのAttack()を下記のように変更します。オブジェクトの生成場所をパラメータで指定します。

    [SerializeField] private Transform BulletPoint;

    public void Attack()
    {
        Instantiate(prefabBullet, BulletPoint.position, Quaternion.identity);
    }

新たに追加した変数にBulletPointを指定します。

これで試しに動かして機体から弾が出るような動きになればOK。次回はマトとなる敵を生成していきます。

タイトルとURLをコピーしました