From ad41da041085524d0c65ab048c65488bbf1e5721 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Thu, 30 Jul 2026 16:45:51 +0800 Subject: [PATCH] =?UTF-8?q?refactor(enemy):=20=E5=88=A0=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=E6=97=A7=E8=B7=AF=E5=BE=84=EF=BC=8C=E9=A2=84=E8=AD=A6=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E8=B5=B0=E5=8A=A8=E7=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit telegraphVfxKey / telegraphDuration / TelegraphRoutine 删除。 预警的正确载体是 clip 本身——姿态在动画里,音效与特效在动画事件上 (PlaySFX / TriggerFeedback 已于阶段一补接)。旧路径会在动画之前 插一段无动画的静止等待,是同一件事的第二条平行路。 AbilityRunState.Telegraph 枚举值保留:BlinkStrikeAbility 现身闪光段 仍在自己协程里显式置位(计划原文假设它零消费者,实测不成立), 只删了基类的默认预警协程。顺带清掉该文件里遗留的行为树插件措辞。 18 个 ABL_ 资产经 AssetDatabase.ForceReserializeAssets 重写, 去掉已删字段的死键;顺带补齐了这些旧资产缺失的当前字段默认值 (designNote / category / weight / rangeRadius / rangeOffset / maxDashDuration), 无任何已有取值被改动。SOValidationRunner:0 错误 0 警告。 Co-Authored-By: Claude Opus 5 (1M context) --- .../Abilities/ABL_ChaoFeng_Boomerang.asset | 2 -- .../Abilities/ABL_ChaoFeng_FanCombo.asset | 2 -- .../Abilities/ABL_ChaoFeng_Intro.asset | 2 -- .../Abilities/ABL_ChaoFeng_TornadoLarge.asset | 2 -- .../Abilities/ABL_ChaoFeng_TornadoSmall.asset | 2 -- .../Abilities/ABL_ChaoFeng_WindStone.asset | 2 -- .../E001/Abilities/ABL_E001_Chase.asset | 10 +++++++--- .../Abilities/ABL_E002_CeilingStrike.asset | 9 ++++++--- .../E003/Abilities/ABL_E003_Fall.asset | 9 ++++++--- .../E004/Abilities/ABL_E004_Acid.asset | 7 +++++-- .../E004/Abilities/ABL_E004_Appear.asset | 9 ++++++--- .../E004/Abilities/ABL_E004_Bite.asset | 7 +++++-- .../E004/Abilities/ABL_E004_Flip.asset | 9 ++++++--- .../E004/Abilities/ABL_E004_HeadSlam.asset | 9 ++++++--- .../E005/Abilities/ABL_E005_Acid.asset | 7 +++++-- .../E005/Abilities/ABL_E005_Bite.asset | 7 +++++-- .../E006/Abilities/ABL_E006_Chase.asset | 10 +++++++--- .../E006/Abilities/ABL_E006_Leap.asset | 7 +++++-- .../Enemies/Abilities/AbilityRunState.cs | 5 +++-- .../Enemies/Abilities/EnemyAbilityBase.cs | 19 +------------------ .../Enemies/Abilities/EnemyAbilitySO.cs | 8 ++------ 21 files changed, 75 insertions(+), 69 deletions(-) diff --git a/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_Boomerang.asset b/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_Boomerang.asset index 9874de88..8591b60a 100644 --- a/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_Boomerang.asset +++ b/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_Boomerang.asset @@ -17,8 +17,6 @@ MonoBehaviour: BossPhaseAbilityGate \u914D\u7F6E" attackSequence: [] cooldown: 4 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 diff --git a/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_FanCombo.asset b/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_FanCombo.asset index e94519cb..731e98aa 100644 --- a/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_FanCombo.asset +++ b/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_FanCombo.asset @@ -17,8 +17,6 @@ MonoBehaviour: BossPhaseAbilityGate \u914D\u7F6E" attackSequence: [] cooldown: 2.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 diff --git a/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_Intro.asset b/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_Intro.asset index 78c68fc7..551bf3cb 100644 --- a/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_Intro.asset +++ b/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_Intro.asset @@ -16,8 +16,6 @@ MonoBehaviour: designNote: "\u5165\u573A\u6F14\u51FA\uFF0C\u4E0D\u8FDB\u9009\u62DB\u6C60" attackSequence: [] cooldown: 0 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 diff --git a/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_TornadoLarge.asset b/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_TornadoLarge.asset index 60bc52e4..d95919d6 100644 --- a/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_TornadoLarge.asset +++ b/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_TornadoLarge.asset @@ -17,8 +17,6 @@ MonoBehaviour: BossPhaseAbilityGate \u914D\u7F6E" attackSequence: [] cooldown: 6 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 diff --git a/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_TornadoSmall.asset b/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_TornadoSmall.asset index f4ffb266..3a1ce704 100644 --- a/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_TornadoSmall.asset +++ b/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_TornadoSmall.asset @@ -17,8 +17,6 @@ MonoBehaviour: BossPhaseAbilityGate \u914D\u7F6E" attackSequence: [] cooldown: 3.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 diff --git a/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_WindStone.asset b/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_WindStone.asset index d7e32232..48fb3730 100644 --- a/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_WindStone.asset +++ b/Assets/_Game/Data/Enemies/ChaoFeng/Abilities/ABL_ChaoFeng_WindStone.asset @@ -17,8 +17,6 @@ MonoBehaviour: BossPhaseAbilityGate \u914D\u7F6E" attackSequence: [] cooldown: 3 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 diff --git a/Assets/_Game/Data/Enemies/E001/Abilities/ABL_E001_Chase.asset b/Assets/_Game/Data/Enemies/E001/Abilities/ABL_E001_Chase.asset index 459d2715..0034fd3e 100644 --- a/Assets/_Game/Data/Enemies/E001/Abilities/ABL_E001_Chase.asset +++ b/Assets/_Game/Data/Enemies/E001/Abilities/ABL_E001_Chase.asset @@ -13,18 +13,21 @@ MonoBehaviour: m_Name: ABL_E001_Chase m_EditorClassIdentifier: abilityId: e001_chase + designNote: attackSequence: [] cooldown: 1 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 preferredMaxRange: 5 requiresLineOfSight: 1 requiresGrounded: 1 - exclusionGroup: + exclusionGroup: priority: 0 + category: 0 + weight: 1 + rangeRadius: 0 + rangeOffset: {x: 0, y: 0} startClip: _FadeDuration: 0.25 _Speed: 1 @@ -53,6 +56,7 @@ MonoBehaviour: _Clip: {fileID: 7400000, guid: 9f0fea347ba7eb347b0f71b423832808, type: 2} _NormalizedStartTime: NaN dashSpeed: 9 + maxDashDuration: 2 references: version: 2 RefIds: [] diff --git a/Assets/_Game/Data/Enemies/E002/Abilities/ABL_E002_CeilingStrike.asset b/Assets/_Game/Data/Enemies/E002/Abilities/ABL_E002_CeilingStrike.asset index 4454c564..ff9102d4 100644 --- a/Assets/_Game/Data/Enemies/E002/Abilities/ABL_E002_CeilingStrike.asset +++ b/Assets/_Game/Data/Enemies/E002/Abilities/ABL_E002_CeilingStrike.asset @@ -13,18 +13,21 @@ MonoBehaviour: m_Name: ABL_E002_CeilingStrike m_EditorClassIdentifier: abilityId: e002_ceiling_strike + designNote: attackSequence: [] cooldown: 1.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 preferredMaxRange: 5 requiresLineOfSight: 1 requiresGrounded: 1 - exclusionGroup: + exclusionGroup: priority: 0 + category: 0 + weight: 1 + rangeRadius: 0 + rangeOffset: {x: 0, y: 0} strikeClip: _FadeDuration: 0.25 _Speed: 1 diff --git a/Assets/_Game/Data/Enemies/E003/Abilities/ABL_E003_Fall.asset b/Assets/_Game/Data/Enemies/E003/Abilities/ABL_E003_Fall.asset index 603a8511..5547f466 100644 --- a/Assets/_Game/Data/Enemies/E003/Abilities/ABL_E003_Fall.asset +++ b/Assets/_Game/Data/Enemies/E003/Abilities/ABL_E003_Fall.asset @@ -13,18 +13,21 @@ MonoBehaviour: m_Name: ABL_E003_Fall m_EditorClassIdentifier: abilityId: e003_fall + designNote: attackSequence: [] cooldown: 1.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 preferredMaxRange: 5 requiresLineOfSight: 1 requiresGrounded: 1 - exclusionGroup: + exclusionGroup: priority: 0 + category: 0 + weight: 1 + rangeRadius: 0 + rangeOffset: {x: 0, y: 0} fallLoopClip: _FadeDuration: 0.25 _Speed: 1 diff --git a/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Acid.asset b/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Acid.asset index faba0db1..eb4203ad 100644 --- a/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Acid.asset +++ b/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Acid.asset @@ -13,11 +13,10 @@ MonoBehaviour: m_Name: ABL_E004_Acid m_EditorClassIdentifier: abilityId: e004_acid + designNote: attackSequence: - {fileID: 11400000, guid: b0bce0e3cbc007842a69b60d6cf12792, type: 2} cooldown: 1.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 @@ -26,3 +25,7 @@ MonoBehaviour: requiresGrounded: 1 exclusionGroup: priority: 0 + category: 0 + weight: 1 + rangeRadius: 0 + rangeOffset: {x: 0, y: 0} diff --git a/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Appear.asset b/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Appear.asset index 2570f0a8..b982b27d 100644 --- a/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Appear.asset +++ b/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Appear.asset @@ -13,18 +13,21 @@ MonoBehaviour: m_Name: ABL_E004_Appear m_EditorClassIdentifier: abilityId: e004_appear + designNote: attackSequence: [] cooldown: 1.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 preferredMaxRange: 5 requiresLineOfSight: 1 requiresGrounded: 1 - exclusionGroup: + exclusionGroup: priority: 0 + category: 0 + weight: 1 + rangeRadius: 0 + rangeOffset: {x: 0, y: 0} appearClip: _FadeDuration: 0.25 _Speed: 1 diff --git a/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Bite.asset b/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Bite.asset index 15de9e87..81af8369 100644 --- a/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Bite.asset +++ b/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Bite.asset @@ -13,10 +13,9 @@ MonoBehaviour: m_Name: ABL_E004_Bite m_EditorClassIdentifier: abilityId: e004_bite + designNote: attackSequence: [] cooldown: 1.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 @@ -25,3 +24,7 @@ MonoBehaviour: requiresGrounded: 1 exclusionGroup: priority: 0 + category: 0 + weight: 1 + rangeRadius: 0 + rangeOffset: {x: 0, y: 0} diff --git a/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Flip.asset b/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Flip.asset index 0bd7b5ee..80c3ffce 100644 --- a/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Flip.asset +++ b/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_Flip.asset @@ -13,18 +13,21 @@ MonoBehaviour: m_Name: ABL_E004_Flip m_EditorClassIdentifier: abilityId: e004_flip + designNote: attackSequence: [] cooldown: 1.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 preferredMaxRange: 5 requiresLineOfSight: 1 requiresGrounded: 1 - exclusionGroup: + exclusionGroup: priority: 0 + category: 0 + weight: 1 + rangeRadius: 0 + rangeOffset: {x: 0, y: 0} faceClip: _FadeDuration: 0.25 _Speed: 1 diff --git a/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_HeadSlam.asset b/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_HeadSlam.asset index 31e26906..dae7721e 100644 --- a/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_HeadSlam.asset +++ b/Assets/_Game/Data/Enemies/E004/Abilities/ABL_E004_HeadSlam.asset @@ -13,18 +13,21 @@ MonoBehaviour: m_Name: ABL_E004_HeadSlam m_EditorClassIdentifier: abilityId: e004_headslam + designNote: attackSequence: [] cooldown: 1.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 preferredMaxRange: 5 requiresLineOfSight: 1 requiresGrounded: 1 - exclusionGroup: + exclusionGroup: priority: 0 + category: 0 + weight: 1 + rangeRadius: 0 + rangeOffset: {x: 0, y: 0} startClip: _FadeDuration: 0.25 _Speed: 1 diff --git a/Assets/_Game/Data/Enemies/E005/Abilities/ABL_E005_Acid.asset b/Assets/_Game/Data/Enemies/E005/Abilities/ABL_E005_Acid.asset index 62aaffc3..24a8c5d2 100644 --- a/Assets/_Game/Data/Enemies/E005/Abilities/ABL_E005_Acid.asset +++ b/Assets/_Game/Data/Enemies/E005/Abilities/ABL_E005_Acid.asset @@ -13,12 +13,11 @@ MonoBehaviour: m_Name: ABL_E005_Acid m_EditorClassIdentifier: abilityId: e005_acid + designNote: attackSequence: - {fileID: 11400000, guid: cabdf15fd8ee5c8449c6236751ada4f5, type: 2} - {fileID: 11400000, guid: 800b72bef8e5be446aa56ec4993ba21d, type: 2} cooldown: 1.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 @@ -27,3 +26,7 @@ MonoBehaviour: requiresGrounded: 1 exclusionGroup: priority: 0 + category: 0 + weight: 1 + rangeRadius: 0 + rangeOffset: {x: 0, y: 0} diff --git a/Assets/_Game/Data/Enemies/E005/Abilities/ABL_E005_Bite.asset b/Assets/_Game/Data/Enemies/E005/Abilities/ABL_E005_Bite.asset index b6282819..5732d58a 100644 --- a/Assets/_Game/Data/Enemies/E005/Abilities/ABL_E005_Bite.asset +++ b/Assets/_Game/Data/Enemies/E005/Abilities/ABL_E005_Bite.asset @@ -13,10 +13,9 @@ MonoBehaviour: m_Name: ABL_E005_Bite m_EditorClassIdentifier: abilityId: e005_bite + designNote: attackSequence: [] cooldown: 1.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 @@ -25,3 +24,7 @@ MonoBehaviour: requiresGrounded: 1 exclusionGroup: priority: 0 + category: 0 + weight: 1 + rangeRadius: 0 + rangeOffset: {x: 0, y: 0} diff --git a/Assets/_Game/Data/Enemies/E006/Abilities/ABL_E006_Chase.asset b/Assets/_Game/Data/Enemies/E006/Abilities/ABL_E006_Chase.asset index 7a8732ce..50422f0a 100644 --- a/Assets/_Game/Data/Enemies/E006/Abilities/ABL_E006_Chase.asset +++ b/Assets/_Game/Data/Enemies/E006/Abilities/ABL_E006_Chase.asset @@ -13,18 +13,21 @@ MonoBehaviour: m_Name: ABL_E006_Chase m_EditorClassIdentifier: abilityId: e006_chase + designNote: attackSequence: [] cooldown: 1.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 preferredMaxRange: 5 requiresLineOfSight: 1 requiresGrounded: 1 - exclusionGroup: + exclusionGroup: priority: 0 + category: 0 + weight: 1 + rangeRadius: 0 + rangeOffset: {x: 0, y: 0} startClip: _FadeDuration: 0.25 _Speed: 1 @@ -53,6 +56,7 @@ MonoBehaviour: _Clip: {fileID: 0} _NormalizedStartTime: NaN dashSpeed: 0 + maxDashDuration: 2 references: version: 2 RefIds: [] diff --git a/Assets/_Game/Data/Enemies/E006/Abilities/ABL_E006_Leap.asset b/Assets/_Game/Data/Enemies/E006/Abilities/ABL_E006_Leap.asset index bbdba211..b5ecee8d 100644 --- a/Assets/_Game/Data/Enemies/E006/Abilities/ABL_E006_Leap.asset +++ b/Assets/_Game/Data/Enemies/E006/Abilities/ABL_E006_Leap.asset @@ -13,10 +13,9 @@ MonoBehaviour: m_Name: ABL_E006_Leap m_EditorClassIdentifier: abilityId: e006_leap + designNote: attackSequence: [] cooldown: 1.5 - telegraphVfxKey: - telegraphDuration: 0 interruptOnHurt: 1 interruptOnStagger: 1 preferredMinRange: 0 @@ -25,3 +24,7 @@ MonoBehaviour: requiresGrounded: 1 exclusionGroup: priority: 0 + category: 0 + weight: 1 + rangeRadius: 0 + rangeOffset: {x: 0, y: 0} diff --git a/Assets/_Game/Scripts/Enemies/Abilities/AbilityRunState.cs b/Assets/_Game/Scripts/Enemies/Abilities/AbilityRunState.cs index 710241c5..fdfcceb8 100644 --- a/Assets/_Game/Scripts/Enemies/Abilities/AbilityRunState.cs +++ b/Assets/_Game/Scripts/Enemies/Abilities/AbilityRunState.cs @@ -2,11 +2,12 @@ namespace BaseGames.Enemies.Abilities { /// /// 能力执行的阶段枚举(架构 07_EnemyModule §8)。 - /// 用于 BD/Animator/UI 查询能力当前在哪个阶段(telegraph/出招/恢复)。 + /// 用于 AI 决策层 / 动画 / UI 查询能力当前在哪个阶段(预警 / 出招 / 恢复)。 /// public enum AbilityRunState { Idle, + /// 预警:由能力自身在协程里显式置位(如 BlinkStrikeAbility 的现身闪光)。 Telegraph, Windup, Active, @@ -14,7 +15,7 @@ namespace BaseGames.Enemies.Abilities Interrupted } - /// 能力中断原因。供 BD 判断是否需要重新调度。 + /// 能力中断原因。供 AI 决策层判断是否需要重新调度。 public enum InterruptReason { ExternalRequest, diff --git a/Assets/_Game/Scripts/Enemies/Abilities/EnemyAbilityBase.cs b/Assets/_Game/Scripts/Enemies/Abilities/EnemyAbilityBase.cs index 9961fe2b..814cb5be 100644 --- a/Assets/_Game/Scripts/Enemies/Abilities/EnemyAbilityBase.cs +++ b/Assets/_Game/Scripts/Enemies/Abilities/EnemyAbilityBase.cs @@ -1,8 +1,6 @@ using System.Collections; using UnityEngine; using Animancer; -using BaseGames.Core; -using BaseGames.Core.Pool; namespace BaseGames.Enemies.Abilities { @@ -114,13 +112,9 @@ namespace BaseGames.Enemies.Abilities private IEnumerator RunInternal() { _isRunning = true; - Phase = AbilityRunState.Telegraph; + Phase = AbilityRunState.Windup; try { - if (_config != null && _config.telegraphDuration > 0f) - yield return TelegraphRoutine(); - - Phase = AbilityRunState.Windup; yield return ExecuteCoroutine(); Phase = AbilityRunState.Recovery; } @@ -137,17 +131,6 @@ namespace BaseGames.Enemies.Abilities /// 子类实现:能力主体。可分多段、含 HitBox 激活/弹幕生成/物理推进等。 protected abstract IEnumerator ExecuteCoroutine(); - /// 预警阶段(默认生成 VFX 后等待 telegraphDuration)。子类可重写。 - protected virtual IEnumerator TelegraphRoutine() - { - if (!string.IsNullOrEmpty(_config.telegraphVfxKey)) - { - var pool = ServiceLocator.GetOrDefault(); - pool?.Spawn(_config.telegraphVfxKey, _transform.position, Quaternion.identity); - } - yield return EnemyAbilityWaits.Get(_config.telegraphDuration); - } - /// 能力结束钩子(被中断或正常结束都会调用)。 protected virtual void OnAbilityEnded() { } diff --git a/Assets/_Game/Scripts/Enemies/Abilities/EnemyAbilitySO.cs b/Assets/_Game/Scripts/Enemies/Abilities/EnemyAbilitySO.cs index 7d03fab2..5a0fff81 100644 --- a/Assets/_Game/Scripts/Enemies/Abilities/EnemyAbilitySO.cs +++ b/Assets/_Game/Scripts/Enemies/Abilities/EnemyAbilitySO.cs @@ -6,7 +6,8 @@ namespace BaseGames.Enemies.Abilities { /// /// 能力配置包(架构 07_EnemyModule §8.2)。 - /// 一个能力 = 一组攻击段 + 公共参数(冷却/预警/中断规则)。 + /// 一个能力 = 一组攻击段 + 公共参数(冷却/中断规则)。 + /// 预警不在此配置:预警的载体是动画 clip 本身(姿态在动画里,音效与特效挂动画事件)。 /// 由对应 EnemyAbilityBase 子类组件读取并执行。 /// [CreateAssetMenu(menuName = "BaseGames/Enemies/Enemy Ability", fileName = "ABL_")] @@ -27,11 +28,6 @@ namespace BaseGames.Enemies.Abilities [Header("冷却(秒,从能力执行结束开始计)")] [Min(0f)] public float cooldown = 1.5f; - [Header("预警(Telegraph)")] - [Tooltip("预警 VFX key(IObjectPoolService.Spawn 的池 key),为空则跳过")] - public string telegraphVfxKey = ""; - [Min(0f)] public float telegraphDuration = 0f; - [Header("中断规则")] [Tooltip("受击时是否打断能力(false=能力具霸体)")] public bool interruptOnHurt = true;