ふりかえり
前回は、スキルやボタンをクリックした際の効果音(SE)を追加しました!
プレイヤーの操作と音が連動し、ゲームに一体感が生まれました!
前回の投稿はこちら↓
会心の一撃を実装!
今回は「会心の一撃」を実装します!
現在は、攻撃ダメージが毎回同じなのでバトルの展開が読めてしまいます。
そこで、予測不能な要素として「会心の一撃」を導入し、よりスリリングなバトルを目指します!
スクリプトの追加
PlayerData.cs
会心系のステータスを追加
using UnityEngine;
[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;
public int diamond;
public int expToNextLevel;
[Header("会心設定")]
public float criticalRate = 0.1f; // 会心率(10%)
public float criticalDamageMultiplier = 2.0f; // 会心ダメージ倍率(2倍)
}
PlayerManager.cs
攻撃処理に会心判定を追加
public void Attack(EnemyManager enemyManager)
{
// 攻撃アニメーションを再生
if (animationManager != null)
{
animationManager.PlayerAttackAnimation();
}
int baseDamage = Mathf.Max(0, player.attack - enemyManager.enemy.defense);
// 会心ダメージ計算
int finalDamage = baseDamage;
bool isCritical = false;
if (battleManager != null)
{
var (damage, critical) = battleManager.CalculateDamage(baseDamage, player.criticalRate, player.criticalDamageMultiplier);
finalDamage = damage;
isCritical = critical;
}
enemyManager.TakeDamage(finalDamage);
// バトルログに追加
if (battleLogManager != null)
{
if (isCritical)
{
battleLogManager.AddLog($"{player.name}の会心の一撃!{enemyManager.enemy.name}に{finalDamage}ダメージ!", Color.red);
}
else
{
battleLogManager.AddPlayerAttackLog(player.name, enemyManager.enemy.name, finalDamage);
}
}
Debug.Log($"{player.name}が{enemyManager.enemy.name}に{finalDamage}ダメージ!{(isCritical ? "(会心)" : "")}");
}
Enemyにも同じような処理を追加します
Unityでの設定
- PlayerManager や EnemySO の Inspector にて、
- 会心率(例:0.1 = 10%)
- 会心ダメージ倍率(例:2.0倍) を設定します。


動作確認
戦闘中に「会心の一撃!」のログが赤字で表示され、
通常より大きなダメージが与えられていることを確認できました!

まとめ
今回は会心の一撃を実装しました!
バトルに運の要素が加わり、展開が読めなくなったことで緊張感がアップしました!
次回予告
次回は「会心の一撃の強化要素」を追加予定です!
お楽しみに!



