シューティングゲームの作成③(アイテム追加)

C#

はじめに

プレイヤーに弾速、連射間隔、攻撃力、移動速度、の4つのステータスを追加しました。
アイテムを取得することで、ステータスを向上するようにしました。

<追加アイテムの一覧>

 

ここまでの成果

ゲームの仕様

新しく追加した仕様には「(新)」を付けています。
変更した仕様に「(変)」を付けています。

  • プレイヤーHP設定:初期HPは5
  • プレイヤーHP表示:画面右上に「HP:X」を常時表示する
  • 敗北条件:HPが0になった時点で「GAME OVER」UIを表示し、ゲームを停止する
  • 操作方法:WASDキー または 十字キー(上下左右の移動)
  • 攻撃方法:自動発射
  • 敵キャラ実装数:20体(e001~e020)
  • 敵キャラHP
    • (新)e001~e010:1
    • (新)e011~e020:2
  • 敵キャラの移動:画面上から下方向に直進する
  • (新)スコア:画面左上に「Score:X」を常時表示する
    • e001~e010:100点
    • e011~e021:200点
  • (新)ステータス:アイテムの取得で強化できるステータス
    • 弾速:上限無し
    • 連射速度:発射間隔は0.05秒未満にならないように設計
    • 攻撃力:上限無し
    • 移動速度:初期値から4倍以上にならにように設計
    • HP:上限は5
  • (新)アイテムの一覧
    • 青い札:弾の飛ぶ速度がアップ
    • 手裏剣:発射間隔が短縮される
    • 赤い勾玉:弾の威力アップ
    • 韋駄天草履:移動速度アップ
    • 桃:HP回復

アイテムの実装

アイテムを実装するためには、3つの処理を追加しました。

  1. アイテムの定義
  2. プレイヤーのステータス管理
  3. アイテム取得時の処理

各処理の概要は下記となります。

アイテムの定義

下記のコードでアイテムを定義することで、Unityのエディタにおいて、アイテムのプレハブのInspectorでアイテムの種類を設定できるようになります。

<抜粋:アイテム定義>

public class PowerUpItem : MonoBehaviour
{
    // アイテムの種類を定義
    public enum ItemType
    {
        BulletSpeedUp,  // 弾速アップ
        FireRateUp,     // 連射速度アップ
        HealHp,         // HP回復
        MoveSpeedUp,    // 移動速度アップ
        AttackUp        // 攻撃力アップ
    }

    [Header("アイテム設定")]
    [Tooltip("このアイテムの種類を選択")]
    public ItemType itemType = ItemType.WeaponStraight;
    
    // ...
}

Inspectorでプルダウンからアイテムの種類を設定

プレイヤーのステータス管理

アイテム取得によるステータスアップは、単純な足し算だけでなく「倍率」を持たせています。
今後のことを考慮し、アイテム取得によるステータス変化を柔軟に対応できるようにしています。

プレイヤーが発射する弾について、直進弾/放射弾/誘導弾、の3種類実装する予定です。各弾によって、アイテム取得によるステータス向上に変化を持たせるため、倍率を採用しています。

<抜粋:発射間隔の処理>

[Header("バフ効果")]
[Tooltip("弾速の倍率 (初期値 1.0)")]
public float bulletSpeedMultiplier = 1.0f;

[Tooltip("発射間隔の倍率 (初期値 1.0、小さいほど連射が速い)")]
public float fireRateIntervalMultiplier = 1.0f;

// 発射間隔を短縮するメソッド
public void ReduceFireRateInterval(float amount)
{
    fireRateIntervalMultiplier -= amount;

    // 連射が速くなりすぎないよう下限を設定
    if (fireRateIntervalMultiplier < 0.2f)
    {
        fireRateIntervalMultiplier = 0.2f;
    }
}

アイテム取得時の処理

アイテム取得時、switch文を使って効果を分岐させています。
新しいアイテムを追加したい時は、この分岐処理に行を追加するだけで済みます。

<抜粋:アイテム取得時の処理>

private void OnTriggerEnter2D(Collider2D other)
{
    if (other.CompareTag("Player"))
    {
        PlayerController player = other.GetComponent();
        if (player != null)
        {
            // itemType に応じて処理を分岐
            switch (itemType)
            {
                case ItemType.WeaponStraight:
                    player.ObtainWeapon(WeaponType.Straight);
                    break;

                case ItemType.FireRateUp:
                    // プレイヤー側のメソッドを呼び出してステータス更新
                    player.ReduceFireRateInterval(fireRateReduceAmount);
                    break;

                case ItemType.HealHp:
                    player.HealHp(healAmount);
                    break;
                
                // ... 他のケースも同様に記述
            }
        }
        Destroy(gameObject); // アイテムを消去
    }
}

以上です。

コメント

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