using UnityEngine; using MoreMountains.Feedbacks; namespace BaseGames.Feedback { /// /// 武器反馈组件,挂载在武器 HitBox Prefab 根节点上。 /// 实现 IFeedbackPlayer,专注于武器本地反馈(命中粒子、击打音效、破风等)。 /// 角色级别的全局反馈(震屏、手柄振动)仍由 PlayerFeedback 负责。 /// public class WeaponFeedback : MonoBehaviour, IFeedbackPlayer { [Header("命中反馈")] [SerializeField] private MMF_Player _onHitLight; [SerializeField] private MMF_Player _onHitMedium; [SerializeField] private MMF_Player _onHitHeavy; [Header("攻击破风")] [SerializeField] private MMF_Player _onAttackWhoosh; [Header("通用命名预设")] [SerializeField] private NamedFeedbackPreset[] _namedPresets; [System.Serializable] private struct NamedFeedbackPreset { public string presetId; public MMF_Player player; } // ── IFeedbackPlayer 实现 ────────────────────────────────────────────── public void PlayHit(HitWeight weight) { var player = weight switch { HitWeight.Light => _onHitLight, HitWeight.Heavy => _onHitHeavy, _ => _onHitMedium, }; player?.PlayFeedbacks(); } public void PlayAttackWhoosh() => _onAttackWhoosh?.PlayFeedbacks(); public void TriggerPreset(string presetId) { if (_namedPresets == null) return; foreach (var p in _namedPresets) if (p.presetId == presetId) { p.player?.PlayFeedbacks(); return; } } // ── 武器上不适用的反馈,空实现 ──────────────────────────────────────── public void PlayParrySuccess() { } public void PlayTakeHit() { } public void PlayDeath() { } public void PlayHeal() { } public void PlayLandImpact() { } public void PlayJumpLaunch() { } public void PlayFootstep() { } public void PlaySFXById(string sfxId) { } public void PlayFormSwitch(int formIndex){ } } }