refactor(enemy): CeilingHangStrike 参数迁入 CeilingHangStrikeAbilitySO(子类)

This commit is contained in:
2026-07-21 11:26:03 +08:00
parent 1e3b01705f
commit 16b0d7b819
3 changed files with 48 additions and 17 deletions
@@ -12,50 +12,51 @@ namespace BaseGames.Enemies.Abilities
/// </summary>
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<CeilingHangStrikeAbilitySO>();
}
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);
}
}
@@ -0,0 +1,19 @@
using Animancer;
using UnityEngine;
namespace BaseGames.Enemies.Abilities
{
/// <summary>CeilingHangStrikeAbility 的配置:出击/悬挂/收回动画 + 悬挂窗口时长。</summary>
[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;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f1af20cd73350514f912a48185125def
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: