はじめに
プレイヤーに弾速、連射間隔、攻撃力、移動速度、の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つの処理を追加しました。
- アイテムの定義
- プレイヤーのステータス管理
- アイテム取得時の処理
各処理の概要は下記となります。
アイテムの定義
下記のコードでアイテムを定義することで、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); // アイテムを消去
}
}
以上です。
コメント