13歩目 敵を倒したときに経験値とGを獲得! Unityで1日1ステップ!ノンフィールドRPG開発日記

1日1歩開発日記

ふりかえり

前回は、プレイヤーや敵が倒されたあと自動でリスポーンする仕組みを実装しました。これでバトルが途切れず続くようになり、よりRPGらしくなってきました!

敵を倒したらEXPとGを獲得!

今回は「敵を倒したときにプレイヤーが経験値(EXP)とお金(G)を獲得できるようにする」仕組みを実装します。

実装手順

① PlayerData.csにEXPとGのフィールドを追加

[System.Serializable]
public class PlayerData
{
    public string name;
    public int level;
    public int maxHP;
    public int currentHP;
    public int attack;
    public int defense;
    public int exp;
    public int gold;
}

② EnemyData.csに報酬用のEXPとGを追加

[System.Serializable]
public class EnemyData
{
    public string name;
    public int level;
    public int maxHP;
    public int currentHP;
    public int attack;
    public int defense;
    public int expReward;
    public int goldReward;
}

③ EnemyManager.csのTakeDamage()に報酬処理を追加

public void TakeDamage(int damage)
{
    enemy.currentHP -= damage;
    if (enemy.currentHP <= 0)
    {
        enemy.currentHP = 0;
        Debug.Log($"{enemy.name}を倒した!");

        // プレイヤーにEXPとGを与える
        if (playerManager != null)
        {
            playerManager.GainRewards(enemy.expReward, enemy.goldReward);
        }

        SpawnEnemy(); // 新しい敵を生成
    }
}

④ PlayerManager.csに報酬獲得メソッドを追加

public void GainRewards(int exp, int gold)
{
    player.exp += exp;
    player.gold += gold;
    Debug.Log($"{player.name}は{exp}EXPと{gold}Gを獲得しました!");
}

⑤ PlayerUIManager.csでEXPとGを表示

public class PlayerUIManager : MonoBehaviour
{
    public PlayerManager playerManager;
    public TextMeshProUGUI nameText;
    public TextMeshProUGUI hpText;
    public TextMeshProUGUI levelText;
    public TextMeshProUGUI expText;
    public TextMeshProUGUI goldText;

    void Update()
    {
        UpdateUI();
    }

    void UpdateUI()
    {
        nameText.text = playerManager.player.name;
        hpText.text = $"HP: {playerManager.player.currentHP}/{playerManager.player.maxHP}";
        levelText.text = $"Lv: {playerManager.player.level}";
        expText.text = $"EXP: {playerManager.player.exp}";
        goldText.text = $"G: {playerManager.player.gold}";
    }

    public void OnAttackButtonClicked()
    {
        if (battleManager != null)
        {
            battleManager.PlayerAttack();
        }
        else
        {
            Debug.LogError("BattleManager is not assigned.");
        }
    }
}

Unity側の設定

  • PlayerEXPTextとPlayerGoldTextをシーン上に作成し、UIとして配置します。
  • PlayerUIManagerにそれぞれのTextをアタッチします。
  • EnemyManagerのInspectorからPlayerManagerを紐付けます。

ゲーム起動時の動作

初期状態では「EXP: 0」「G: 0」と表示されます。

敵(スライム)を倒すと、ログに報酬獲得が表示され、UIにも即座に反映されます。

まとめ

今回は、敵を倒すと経験値とお金が手に入るという基本的なRPG要素を追加しました!

EXPやGがどんどん増えていくと、「もっと戦いたい!」という気持ちになりますね!

次回予告

いよいよ… プレイヤーのレベルアップ機能を実装します!

溜まったEXPで成長していくワクワクを、ぜひお楽しみに!

コメント

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