【Unity】2Dシューティングを作る ~強化アイテムの作成~

アイテムの作成 unity

プレイするゲームがないなら、自分で作ればいいじゃない!

ということで Unity 初心者が「ゲームを作る」ゲームをやっていきます!

今回は「自機を強化するアイテムを作成してみた」の記事です

 

スポンサーリンク

内容

自機を強化するアイテムを作成する

今回は移動速度UPを作ります

 

まずはとりあえずの実装

アイテムの画像をシーンに配置する

 

コライダーを追加して、アイテム用のタグを設定します

アイテムオブジェクトの設定
画像はスクリプトも追加してプレハブ化している

 

あとはプレイヤーのスクリプトにヒット判定を追加して

強化処理を書けばとりあえずの実装は完了です

void OnTriggerEnter2D(Collider2D other)
{
    if (other.gameObject.CompareTag("Item"))
    {
        // 強化処理
        moveSpeed += 2;

        // アイテムを消す
        Destroy(other.gameObject);
    }
}

 

実行

アイテムに当たると強化処理が実行されて、移動が速くなりました!

作成したオブジェクトはプレハブ化しておく

 

本実装

アイテムの処理は出来たので、次は仕様に合わせて実装します

 

敵から出現させる

敵のスクリプトにアイテムの設定を追加

[SerializeField] GameObject itemObj;          // アイテムオブジェクト

 

弾がヒットしたときにアイテムを生成するように修正します

void OnTriggerEnter2D(Collider2D other)
{
    // 当たったのがプレイヤーの弾
    if (other.gameObject.CompareTag("player_bullet"))
    {
        // アイテムがセットされていれば生成
        if(itemObj)
        {
            Instantiate(itemObj, transform.position, Quaternion.identity);
        }
    }
}

 

あとはアイテムを落とす敵を決めて、

敵オブジェクトにアイテムを設定すればOK!

敵にアイテムオブジェクトを設定

 

アイテムのスクリプト

他のアイテムにも対応できるようにします

public class ItemController : MonoBehaviour
{
    public enum ITEM_TYPE
    {
        SPEED_UP = 0,   // 速度アップ
        SHOT_UP,        // ショットアップ
    }

    [SerializeField] float moveSpeed = 2.0f;                    // 移動値
    [SerializeField] ITEM_TYPE itemType = ITEM_TYPE.SPEED_UP;   // アイテムタイプ

    void Update()
    {
        float addMove = -moveSpeed * Time.deltaTime;
        transform.Translate(addMove, 0, 0);
    }

    // タイプの取得
    public ITEM_TYPE GetItemType()
    {
        return itemType;
    }
}

 

プレイヤーのスクリプト

こちらも他のアイテムに対応できるように修正

void OnTriggerEnter2D(Collider2D other)
{
    // アイテムにヒット
    if (other.gameObject.CompareTag("Item"))
    {
        ItemController item = other.gameObject.GetComponent<ItemController>();

        if(item)
        {
            switch (item.GetItemType())
            {
                // 移動スピードアップ
                case ItemController.ITEM_TYPE.SPEED_UP:
                    {
                        ++moveSpeedIndex;
                        moveSpeedIndex = Mathf.Min(moveSpeedIndex, MoveSpeedList.Count - 1);

                        SoundManager.Instance.PlaySe("speed_up");
                    }
                    break;
            }
        }

        // アイテムを消す
        Destroy(other.gameObject);
    }
}
gameObject.GetComponent<ItemController>()

オブジェクトに指定したコンポーネントがあれば取得できます

ない場合は null になります

 

MoveSpeedList
移動スピードのリスト
移動の速さをリストで設定するように変更

 

これでアイテムのタイプで強化処理を変更することができました!

まだスピードアップしかないですが…

 

サンプル動画

 

さいごに

アイテムの種類も増やしたいですし、敵の行動も増やしていきたいですね!

かれいど

ゲームをしたり、作ったり
色々な事に挑戦していきたい!

サッカー観戦も趣味で
主にJ1リーグを観ています。

かれいどをフォローする
unity
スポンサーリンク
シェアする
かれいどブログ

コメント