28歩目 デスペナルティーを実装! Unityで1日1ステップ!ノンフィールドRPG開発日記

1日1歩開発日記

ふりかえり

前回は回復スキルを実装し、戦闘中にHPを回復できるようになりました!これで戦略の幅が広がりました!

デスペナルティーを実装!

今回はプレイヤーがモンスターに倒されたときのペナルティ処理を導入します。

以下の2つのペナルティを加えることで、戦闘に緊張感が生まれます。

  • 所持金が半分になる
  • 現在ステージの敵討伐数がリセットされる

スクリプトの変更 

PlayerManagerに死亡時の処理を追加

プレイヤーの HP が 0 になったときに呼ばれる TakeDamage() の中で、デスペナルティーを適用する処理を呼び出します。

    // 死亡時のデスペナルティーを適用
    private void ApplyDeathPenalty()
    {
        // 現在の所持金を保存
        savedGold = player.gold;
        
        // 所持金を半分にする
        player.gold = Mathf.FloorToInt(player.gold * 0.5f);
        
        // ステージの敵撃破数をリセット
        if (stageManager != null)
        {
            stageManager.ResetEnemiesDefeated();
        }
        
        // バトルログにデスペナルティーを記録
        if (battleLogManager != null)
        {
            int lostGold = savedGold - player.gold;
            battleLogManager.AddLog($"デスペナルティー!所持金が{lostGold}G減少しました。", Color.red);
            battleLogManager.AddLog("ステージの敵撃破数がリセットされました。", Color.red);
        }
        
        Debug.Log($"デスペナルティー適用: 所持金 {savedGold}G → {player.gold}G");
        Debug.Log("ステージの敵撃破数がリセットされました。");
    }

StageManagerにステージの敵撃破数をリセットする処理を追加します。

    // 現在のステージの敵撃破数をリセット(デスペナルティー用)
    public void ResetEnemiesDefeated()
    {
        monstersDefeatedInStage = 0;
        Debug.Log($"ステージ{currentStage}の敵撃破数がリセットされました。");
    }

Unityで動作確認

実際にゴブリンに敗北してみると…

  • 所持金が半分
  • ステージ2の進行状況(敵撃破数)もゼロにリセット

きちんとデスペナルティーが適用されました!

まとめ

今回はデスペナルティーを実装しました。

緊張感が増し、「やられる前に倒す」戦い方を意識するようになりますね!

次回予告

次回はスキル解放システムを実装予定です!

スキルの成長とともに戦闘の楽しさが増していきますよ。お楽しみに!

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