using UnityEngine; // Enemyが倒れたときに回復アイテムのドロップを依頼する [RequireComponent(typeof(DamageReceiver))] public class EnemyItemDropper : MonoBehaviour { [Tooltip("回復アイテムを落とす位置の補正")] [SerializeField] private Vector3 itemDropOffset = Vector3.up * 0.5f; private DamageReceiver _damageReceiver; private ItemDropSystem _itemDropSystem; private bool _dropped; // 死亡判定に使うDamageReceiverと、Scene上のドロップ管理を取得する private void Awake() { _damageReceiver = GetComponent(); _itemDropSystem = FindAnyObjectByType(); if (_itemDropSystem == null) Debug.LogWarning("SceneにItemDropSystemがありません"); } // 有効になったときにダメージイベントの購読を開始する private void OnEnable() { _dropped = false; _damageReceiver.Damaged += OnDamaged; } // 無効になったときにダメージイベントの購読を解除する private void OnDisable() { _damageReceiver.Damaged -= OnDamaged; } // 死亡した瞬間に1回だけ回復アイテムのドロップを依頼する private void OnDamaged(int damage, int maxHealth) { // 死亡していない場合と、すでにドロップ済みの場合は何もしない if (!_damageReceiver.IsDead || _dropped) return; _dropped = true; _itemDropSystem?.DropHealItem( transform.position + itemDropOffset); } }