#if GRAPH_DESIGNER using UnityEngine; using Opsive.BehaviorDesigner.Runtime.Tasks; using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; using BaseGames.Enemies.Abilities; namespace BaseGames.Enemies.AI { /// 条件:abilityId 当前是否正在运行。 [TaskName("Is Ability Running?")] [TaskCategory("BaseGames/Enemy/Combat")] [TaskDescription("检查指定能力当前是否正在执行中")] public sealed class BD_IsAbilityRunning : Conditional { [Tooltip("能力 ScriptableObject(优先级高于下方字符串 ID)")] [SerializeField] private EnemyAbilitySO m_AbilitySO; [Tooltip("能力 ID(当 AbilitySO 未赋值时使用)")] [SerializeField] private string m_AbilityId = ""; private EnemyBase _enemy; public override void OnAwake() => _enemy = gameObject.GetComponent(); public override TaskStatus OnUpdate() { if (_enemy == null) return TaskStatus.Failure; string id = m_AbilitySO != null ? m_AbilitySO.abilityId : m_AbilityId; var ab = _enemy.Abilities.Get(id); return ab != null && ab.IsRunning ? TaskStatus.Success : TaskStatus.Failure; } } } #endif