59 lines
2.6 KiB
C#
59 lines
2.6 KiB
C#
using UnityEngine;
|
||
|
||
namespace BaseGames.Enemies.Abilities
|
||
{
|
||
/// <summary>
|
||
/// 能力配置包(架构 07_EnemyModule §8.2)。
|
||
/// 一个能力 = 一组攻击段 + 公共参数(冷却/预警/中断规则)。
|
||
/// 由对应 EnemyAbilityBase 子类组件读取并执行。
|
||
/// </summary>
|
||
[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;
|
||
|
||
[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;
|
||
}
|
||
}
|