diff --git a/Assets/_Game/Scripts/Enemies/Abilities/CeilingHangStrikeAbility.cs b/Assets/_Game/Scripts/Enemies/Abilities/CeilingHangStrikeAbility.cs index e9b6c2b9..2e8f0bde 100644 --- a/Assets/_Game/Scripts/Enemies/Abilities/CeilingHangStrikeAbility.cs +++ b/Assets/_Game/Scripts/Enemies/Abilities/CeilingHangStrikeAbility.cs @@ -12,50 +12,51 @@ namespace BaseGames.Enemies.Abilities /// public class CeilingHangStrikeAbility : EnemyAbilityBase { - [Header("动画")] - [SerializeField] private ClipTransition _strikeClip; - [SerializeField] private ClipTransition _loopClip; - [SerializeField] private ClipTransition _endClip; - [Header("碰撞")] [SerializeField] private HitBox _attackHitBox; [SerializeField] private HurtBox _hurtBox; - [Header("行为")] - [Tooltip("脆弱悬挂窗口持续时间(秒)")] - [SerializeField] private float _hangDuration = 2f; + private CeilingHangStrikeAbilitySO _cfg; + + protected override void Awake() + { + base.Awake(); + _cfg = ResolveConfig(); + } protected override IEnumerator ExecuteCoroutine() { + if (_cfg == null) yield break; + Phase = AbilityRunState.Active; // 出击阶段:播放攻击动画并激活 HitBox - if (_strikeClip.Clip != null) + if (_cfg.strikeClip.Clip != null) { - _animancer.Play(_strikeClip); + _animancer.Play(_cfg.strikeClip); var dmgSrc = _config?.attackSequence?.Length > 0 ? _config.attackSequence[0].damageSource : null; _attackHitBox?.Activate(dmgSrc, _transform); - yield return EnemyAbilityWaits.Get(_strikeClip.Clip.length); + yield return EnemyAbilityWaits.Get(_cfg.strikeClip.Clip.length); } _attackHitBox?.Deactivate(); // 脆弱悬挂阶段:HurtBox 激活为玩家反击窗口 - if (_loopClip.Clip != null) - _animancer.Play(_loopClip); + if (_cfg.loopClip.Clip != null) + _animancer.Play(_cfg.loopClip); if (_hurtBox != null) _hurtBox.enabled = true; - yield return EnemyAbilityWaits.Get(_hangDuration); + yield return EnemyAbilityWaits.Get(_cfg.hangDuration); if (_hurtBox != null) _hurtBox.enabled = false; // 收回阶段 - if (_endClip.Clip != null) + if (_cfg.endClip.Clip != null) { - _animancer.Play(_endClip); - yield return EnemyAbilityWaits.Get(_endClip.Clip.length); + _animancer.Play(_cfg.endClip); + yield return EnemyAbilityWaits.Get(_cfg.endClip.Clip.length); } } diff --git a/Assets/_Game/Scripts/Enemies/Abilities/Configs/CeilingHangStrikeAbilitySO.cs b/Assets/_Game/Scripts/Enemies/Abilities/Configs/CeilingHangStrikeAbilitySO.cs new file mode 100644 index 00000000..e29d7b54 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Abilities/Configs/CeilingHangStrikeAbilitySO.cs @@ -0,0 +1,19 @@ +using Animancer; +using UnityEngine; + +namespace BaseGames.Enemies.Abilities +{ + /// CeilingHangStrikeAbility 的配置:出击/悬挂/收回动画 + 悬挂窗口时长。 + [CreateAssetMenu(menuName = "BaseGames/Enemies/Abilities/Ceiling Hang Strike Ability", fileName = "ABL_")] + public class CeilingHangStrikeAbilitySO : EnemyAbilitySO + { + [Header("动画")] + public ClipTransition strikeClip; + public ClipTransition loopClip; + public ClipTransition endClip; + + [Header("行为")] + [Tooltip("脆弱悬挂窗口持续时间(秒)")] + public float hangDuration = 2f; + } +} diff --git a/Assets/_Game/Scripts/Enemies/Abilities/Configs/CeilingHangStrikeAbilitySO.cs.meta b/Assets/_Game/Scripts/Enemies/Abilities/Configs/CeilingHangStrikeAbilitySO.cs.meta new file mode 100644 index 00000000..65568472 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Abilities/Configs/CeilingHangStrikeAbilitySO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1af20cd73350514f912a48185125def +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: