ふりかえり
前回は、プレイヤーや敵が倒されたあと自動でリスポーンする仕組みを実装しました。これでバトルが途切れず続くようになり、より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で成長していくワクワクを、ぜひお楽しみに!




コメント