using UnityEngine; using MoreMountains.Feedbacks; using BaseGames.Combat; using BaseGames.Feedback; namespace BaseGames.Enemies { /// /// 敌人反馈播放器:实现 IFeedbackPlayer,将行为语义映射到 MMF_Player 实例。 /// 同时保留 OnHit/OnDeath 语义方法供 EnemyBase 直接调用(转发给接口方法)。 /// public class EnemyFeedback : MonoBehaviour, IFeedbackPlayer { [Header("命中反馈")] [SerializeField] private MMF_Player _onHitLight; [SerializeField] private MMF_Player _onHitMedium; [SerializeField] private MMF_Player _onHitHeavy; [Header("受伤 / 死亡反馈")] [SerializeField] private MMF_Player _onTakeHit; [SerializeField] private MMF_Player _onDeath; // ── IFeedbackPlayer ────────────────────────────────────────────────────── public void PlayHit(HitWeight weight) { var player = weight switch { HitWeight.Light => _onHitLight, HitWeight.Medium => _onHitMedium, HitWeight.Heavy => _onHitHeavy, _ => _onHitLight, }; player?.PlayFeedbacks(); } public void PlayTakeHit() => _onTakeHit?.PlayFeedbacks(); public void PlayDeath() => _onDeath?.PlayFeedbacks(); // 以下方法对敌人无意义,提供空实现保持接口完整 public void PlayParrySuccess() { } public void PlayHeal() { } public void PlayLandImpact() { } public void PlayAttackWhoosh() { } public void PlayJumpLaunch() { } public void PlayFootstep() { } public void TriggerPreset(string presetId) { } public void PlaySFXById(string sfxId) { } // ── EnemyBase 语义方法 ──────────────────────────────────────────── /// 受到伤害时调用(由 EnemyBase 触发)。 public void OnHit(DamageInfo info) { PlayTakeHit(); } /// 死亡时调用(由 EnemyBase 触发)。 public void OnDeath() { PlayDeath(); } } }