From 25fae97065d5c06f26c2bd73579ce87736f3e7ab Mon Sep 17 00:00:00 2001 From: Joywayer Date: Fri, 24 Jul 2026 11:56:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(enemy):=20=E6=94=BB=E5=87=BB=E9=80=89?= =?UTF-8?q?=E6=8B=9B=E5=85=83=E6=95=B0=E6=8D=AE(category/weight/=E5=9C=86?= =?UTF-8?q?=E5=BD=A2=E5=B0=84=E7=A8=8B)=E4=B8=8E=E9=80=89=E6=8B=9B?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E5=85=A5=20SO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/Enemies/Abilities/AbilityCategory.cs | 11 +++++++++++ .../Scripts/Enemies/Abilities/AttackSelectionMode.cs | 9 +++++++++ .../Scripts/Enemies/Abilities/EnemyAbilitySO.cs | 12 ++++++++++++ Assets/_Game/Scripts/Enemies/EnemyStatsSO.cs | 5 +++++ 4 files changed, 37 insertions(+) create mode 100644 Assets/_Game/Scripts/Enemies/Abilities/AbilityCategory.cs create mode 100644 Assets/_Game/Scripts/Enemies/Abilities/AttackSelectionMode.cs 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;