using UnityEngine; namespace BaseGames.Enemies.Abilities { /// /// 能力配置包(架构 07_EnemyModule §8.2)。 /// 一个能力 = 一组攻击段 + 公共参数(冷却/预警/中断规则)。 /// 由对应 EnemyAbilityBase 子类组件读取并执行。 /// [CreateAssetMenu(menuName = "BaseGames/Enemies/Enemy Ability", fileName = "EAB_")] public class EnemyAbilitySO : ScriptableObject { [Header("标识")] [Tooltip("BD 任务通过此 Id 调用能力(如 \"melee_combo\" / \"blink_strike\")")] public string abilityId = "ability_id"; [Header("攻击序列")] public EnemyAttackSO[] attackSequence; [Header("冷却(秒,从能力执行结束开始计)")] [Min(0f)] public float cooldown = 1.5f; [Header("预警(Telegraph)")] [Tooltip("预警 VFX key(IObjectPoolService.Spawn 的池 key),为空则跳过")] public string telegraphVfxKey = ""; [Min(0f)] public float telegraphDuration = 0f; [Header("中断规则")] [Tooltip("受击时是否打断能力(false=能力具霸体)")] public bool interruptOnHurt = true; [Tooltip("Stagger 时是否打断(一般为 true)")] public bool interruptOnStagger = true; [Header("调度提示(供 AI 选择参考,不强制)")] [Min(0f)] public float preferredMinRange = 0f; [Min(0f)] public float preferredMaxRange = 5f; public bool requiresLineOfSight = true; public bool requiresGrounded = true; [Header("互斥组与调度优先级")] [Tooltip("互斥组名:同组能力只能有一个同时执行,执行时自动中断同组其他能力;为空 = 无互斥")] public string exclusionGroup = ""; [Tooltip("AI 调度优先级(值越高越优先被选择,冷却就绪时对比)")] [Min(0)] public int priority = 0; } }