diff --git a/Assets/_Game/Scripts/Enemies/Abilities/AbilityCategory.cs b/Assets/_Game/Scripts/Enemies/Abilities/AbilityCategory.cs new file mode 100644 index 00000000..93374f68 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Abilities/AbilityCategory.cs @@ -0,0 +1,11 @@ +namespace BaseGames.Enemies.Abilities +{ + /// 能力调度分类:攻击选择器只从 类里选招。 + public enum AbilityCategory + { + None, // 未分类(默认,不参与选招) + Attack, // 攻击招式(选择器候选) + Movement, // 位移/机动 + Utility // 辅助/增益 + } +} diff --git a/Assets/_Game/Scripts/Enemies/Abilities/AttackSelectionMode.cs b/Assets/_Game/Scripts/Enemies/Abilities/AttackSelectionMode.cs new file mode 100644 index 00000000..5f704bf0 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Abilities/AttackSelectionMode.cs @@ -0,0 +1,9 @@ +namespace BaseGames.Enemies.Abilities +{ + /// 多攻击选招策略。 + public enum AttackSelectionMode + { + WeightedRandom, // 合格集内按 weight 加权随机 + Priority // 合格集内取 priority 最高(并列取首个) + } +} diff --git a/Assets/_Game/Scripts/Enemies/Abilities/EnemyAbilitySO.cs b/Assets/_Game/Scripts/Enemies/Abilities/EnemyAbilitySO.cs index 6f8a599c..856c200e 100644 --- a/Assets/_Game/Scripts/Enemies/Abilities/EnemyAbilitySO.cs +++ b/Assets/_Game/Scripts/Enemies/Abilities/EnemyAbilitySO.cs @@ -42,5 +42,17 @@ namespace BaseGames.Enemies.Abilities public string exclusionGroup = ""; [Tooltip("AI 调度优先级(值越高越优先被选择,冷却就绪时对比)")] [Min(0)] public int priority = 0; + + [Header("选招(攻击选择器用)")] + [Tooltip("能力调度分类;攻击选择器只从 Attack 类里选招")] + public AbilityCategory category = AbilityCategory.None; + [Tooltip("WeightedRandom 模式下的相对权重(越大越易被选)")] + [Min(0f)] public float weight = 1f; + + [Header("攻击触发范围(招式自管,圆形)")] + [Tooltip("触发半径(m);category==Attack 时必须 > 0,否则永远够不着(Awake 报错)")] + [Min(0f)] public float rangeRadius = 0f; + [Tooltip("范围圆心相对敌人的偏移(m),X 随朝向翻转")] + public Vector2 rangeOffset = Vector2.zero; } } diff --git a/Assets/_Game/Scripts/Enemies/EnemyStatsSO.cs b/Assets/_Game/Scripts/Enemies/EnemyStatsSO.cs index 48ff63d3..c8761222 100644 --- a/Assets/_Game/Scripts/Enemies/EnemyStatsSO.cs +++ b/Assets/_Game/Scripts/Enemies/EnemyStatsSO.cs @@ -39,6 +39,11 @@ namespace BaseGames.Enemies [Header("战斗")] [Min(0f)] public float AttackCooldown = 1f; + [Header("攻击选招策略")] + [Tooltip("到攻击范围内如何从多个候选招里选一个")] + public BaseGames.Enemies.Abilities.AttackSelectionMode attackSelectionMode + = BaseGames.Enemies.Abilities.AttackSelectionMode.WeightedRandom; + [Header("追击 & AI 阶段")] [Tooltip("是否有警觉状态:勾选=未发现态进入视野先进警觉(朝向+警觉动画)再追击;不勾选=进入追逐感知直接追击")] public bool HasAlertState = true;