using UnityEngine; using BaseGames.Combat; using BaseGames.Core.Events; namespace BaseGames.Boss { /// /// 管理 Boss 的专属弱点 HurtBox(如核心、眼睛等)。 /// 弱点激活期间受到的伤害会乘以 DamageMultiplier。 /// public class WeakPointSystem : MonoBehaviour { [System.Serializable] public struct WeakPoint { public HurtBox hurtBox; public GameObject visualIndicator; } [SerializeField] private WeakPoint[] _weakPoints; [SerializeField] private string _bossId; [SerializeField] private StringEventChannelSO _onVulnerabilityWindowOpened; private float _damageMultiplier = 1f; /// 激活或关闭弱点 HurtBox 及视觉指示器。 /// 是否激活。 /// 激活时的受击伤害乘数。 /// true = 仅激活弱点专属 HurtBox;false = 全身视为弱点(不改变 HurtBox 状态)。 public void SetActive(bool active, float multiplier = 1f, bool activateSpecific = false) { _damageMultiplier = active ? multiplier : 1f; if (activateSpecific) { foreach (var wp in _weakPoints) { wp.hurtBox.gameObject.SetActive(active); if (wp.visualIndicator != null) wp.visualIndicator.SetActive(active); } } if (active) _onVulnerabilityWindowOpened?.Raise(_bossId); } /// 弱点 HurtBox 受击时,由 BossStats 调用此方法获取最终伤害系数。 public float GetDamageMultiplier() => _damageMultiplier; } }