#if GRAPH_DESIGNER using UnityEngine; using Opsive.BehaviorDesigner.Runtime.Tasks; using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; using BaseGames.Enemies; namespace BaseGames.Enemies.AI { /// /// BD Action:通过 AnimationClip 名称播放 Animancer 动画,立即返回 Success。 /// ClipName 需与 EnemyAnimationConfigSO 中字段名一致。 /// [TaskName("Play Animation")] [TaskCategory("BaseGames/Enemy/Animation")] [TaskDescription("通过 Animancer 播放指定动画 Clip;支持等待动画结束后返回")] public class BD_PlayAnimation : Action { /// EnemyAnimationConfigSO 中的 AnimationClip 字段名(如 "Attack_Melee")。 [SerializeField] private string m_ClipName = "Idle"; private EnemyBase _enemy; public override void OnAwake() => _enemy = GetComponent(); public override TaskStatus OnUpdate() { if (_enemy == null || _enemy.AnimConfig == null) return TaskStatus.Failure; var clip = _enemy.AnimConfig.GetClipByName(m_ClipName); if (clip != null) _enemy.Animancer?.Play(clip); return TaskStatus.Success; } } } #endif