using System; using UnityEngine; // ダメージを受ける側の入口になるコンポーネント public class DamageReceiver : MonoBehaviour { [Tooltip("このオブジェクトの体力")] [SerializeField] private Health health = new(); public event Action Damaged; public event Action Healed; // ダメージを受けられる状態かどうか public bool CanReceiveDamage => !health.IsDead; // 体力がなくなっているかどうか public bool IsDead => health.IsDead; // 現在の体力 public int CurrentHealth => health.CurrentHealth; // 最大体力 public int MaxHealth => health.MaxHealth; private void Awake() { health.Reset(); } // ダメージを受ける public void ReceiveDamage(int damage) { var previousHealth = CurrentHealth; // 体力の増減はHealthに任せる health.TakeDamage(damage); if (CurrentHealth == previousHealth) return; Damaged?.Invoke( previousHealth - CurrentHealth, MaxHealth); } // 回復を受ける public void ReceiveHeal(int heal) { var previousHealth = CurrentHealth; // 体力の増減はHealthに任せる health.Heal(heal); if (CurrentHealth == previousHealth) return; Healed?.Invoke( CurrentHealth - previousHealth, MaxHealth); } }