From 78c8c6dcd644cd2d3d33b1a15c0a4d42fb9c16a0 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Tue, 21 Jul 2026 11:32:20 +0800 Subject: [PATCH] =?UTF-8?q?refactor(enemy):=20MeleeVulnerability=20?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E8=BF=81=E5=85=A5=20MeleeVulnerabilityAbilit?= =?UTF-8?q?ySO(=E5=AD=90=E7=B1=BB)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Configs/MeleeVulnerabilityAbilitySO.cs | 21 ++++++++++++++ .../MeleeVulnerabilityAbilitySO.cs.meta | 11 ++++++++ .../Abilities/MeleeVulnerabilityAbility.cs | 28 +++++++++---------- 3 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 Assets/_Game/Scripts/Enemies/Abilities/Configs/MeleeVulnerabilityAbilitySO.cs create mode 100644 Assets/_Game/Scripts/Enemies/Abilities/Configs/MeleeVulnerabilityAbilitySO.cs.meta diff --git a/Assets/_Game/Scripts/Enemies/Abilities/Configs/MeleeVulnerabilityAbilitySO.cs b/Assets/_Game/Scripts/Enemies/Abilities/Configs/MeleeVulnerabilityAbilitySO.cs new file mode 100644 index 00000000..9a1055a9 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Abilities/Configs/MeleeVulnerabilityAbilitySO.cs @@ -0,0 +1,21 @@ +using Animancer; +using UnityEngine; + +namespace BaseGames.Enemies.Abilities +{ + /// MeleeVulnerabilityAbility 的配置:攻击动画 + 打击归一化时机 + 后摇脆弱时长。 + [CreateAssetMenu(menuName = "BaseGames/Enemies/Abilities/Melee Vulnerability Ability", fileName = "ABL_")] + public class MeleeVulnerabilityAbilitySO : EnemyAbilitySO + { + [Header("动画")] + public ClipTransition attackClip; + + [Header("打击时间(0~1 归一化,基于 Clip 时长)")] + [Range(0f, 1f)] public float hitEnterT = 0.30f; + [Range(0f, 1f)] public float hitExitT = 0.60f; + + [Header("后摇脆弱窗口")] + [Tooltip("HurtBox 激活时间(秒)")] + public float staggerDuration = 1.0f; + } +} diff --git a/Assets/_Game/Scripts/Enemies/Abilities/Configs/MeleeVulnerabilityAbilitySO.cs.meta b/Assets/_Game/Scripts/Enemies/Abilities/Configs/MeleeVulnerabilityAbilitySO.cs.meta new file mode 100644 index 00000000..ab503ee4 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Abilities/Configs/MeleeVulnerabilityAbilitySO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6232abd0bfcd744399d2fcc13db33f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/Abilities/MeleeVulnerabilityAbility.cs b/Assets/_Game/Scripts/Enemies/Abilities/MeleeVulnerabilityAbility.cs index 62853c13..ebdc99be 100644 --- a/Assets/_Game/Scripts/Enemies/Abilities/MeleeVulnerabilityAbility.cs +++ b/Assets/_Game/Scripts/Enemies/Abilities/MeleeVulnerabilityAbility.cs @@ -12,44 +12,42 @@ namespace BaseGames.Enemies.Abilities /// public class MeleeVulnerabilityAbility : EnemyAbilityBase { - [Header("动画")] - [SerializeField] private ClipTransition _attackClip; - [Header("碰撞")] [SerializeField] private HitBox _hitBox; [SerializeField] private HurtBox _hurtBox; - [Header("打击时间(0~1 归一化,基于 Clip 时长)")] - [SerializeField, Range(0f, 1f)] private float _hitEnterT = 0.30f; - [SerializeField, Range(0f, 1f)] private float _hitExitT = 0.60f; + private MeleeVulnerabilityAbilitySO _cfg; - [Header("后摇脆弱窗口")] - [Tooltip("HurtBox 激活时间(秒)")] - [SerializeField] private float _staggerDuration = 1.0f; + protected override void Awake() + { + base.Awake(); + _cfg = ResolveConfig(); + } protected override IEnumerator ExecuteCoroutine() { Phase = AbilityRunState.Active; - if (_attackClip.Clip == null) yield break; + if (_cfg == null) yield break; + if (_cfg.attackClip.Clip == null) yield break; - float len = _attackClip.Clip.length; + float len = _cfg.attackClip.Clip.length; float t = 0f; bool active = false; var dmgSrc = _config?.attackSequence?.Length > 0 ? _config.attackSequence[0].damageSource : null; - _animancer.Play(_attackClip); + _animancer.Play(_cfg.attackClip); while (t < len) { t += Time.deltaTime; - if (!active && t >= len * _hitEnterT) + if (!active && t >= len * _cfg.hitEnterT) { _hitBox?.Activate(dmgSrc, _transform); active = true; } - if (active && t >= len * _hitExitT) + if (active && t >= len * _cfg.hitExitT) { _hitBox?.Deactivate(); active = false; @@ -65,7 +63,7 @@ namespace BaseGames.Enemies.Abilities if (_hurtBox != null) _hurtBox.enabled = true; - yield return EnemyAbilityWaits.Get(_staggerDuration); + yield return EnemyAbilityWaits.Get(_cfg.staggerDuration); if (_hurtBox != null) _hurtBox.enabled = false;