From 6d071e83aeeda919f327ba15f28c4595572ec905 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Tue, 21 Jul 2026 11:35:39 +0800 Subject: [PATCH] =?UTF-8?q?refactor(enemy):=20Appear/FacePlayer/PlayClip?= =?UTF-8?q?=20=E5=8F=82=E6=95=B0=E8=BF=81=E5=85=A5=E5=90=84=E8=87=AA?= =?UTF-8?q?=E5=AD=90=E7=B1=BB=20SO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/Enemies/Abilities/AppearAbility.cs | 14 ++++++++++---- .../Enemies/Abilities/Configs/AppearAbilitySO.cs | 12 ++++++++++++ .../Abilities/Configs/AppearAbilitySO.cs.meta | 11 +++++++++++ .../Abilities/Configs/FacePlayerAbilitySO.cs | 12 ++++++++++++ .../Abilities/Configs/FacePlayerAbilitySO.cs.meta | 11 +++++++++++ .../Enemies/Abilities/Configs/PlayClipAbilitySO.cs | 12 ++++++++++++ .../Abilities/Configs/PlayClipAbilitySO.cs.meta | 11 +++++++++++ .../Scripts/Enemies/Abilities/FacePlayerAbility.cs | 14 ++++++++++---- .../Scripts/Enemies/Abilities/PlayClipAbility.cs | 14 ++++++++++---- 9 files changed, 99 insertions(+), 12 deletions(-) create mode 100644 Assets/_Game/Scripts/Enemies/Abilities/Configs/AppearAbilitySO.cs create mode 100644 Assets/_Game/Scripts/Enemies/Abilities/Configs/AppearAbilitySO.cs.meta create mode 100644 Assets/_Game/Scripts/Enemies/Abilities/Configs/FacePlayerAbilitySO.cs create mode 100644 Assets/_Game/Scripts/Enemies/Abilities/Configs/FacePlayerAbilitySO.cs.meta create mode 100644 Assets/_Game/Scripts/Enemies/Abilities/Configs/PlayClipAbilitySO.cs create mode 100644 Assets/_Game/Scripts/Enemies/Abilities/Configs/PlayClipAbilitySO.cs.meta diff --git a/Assets/_Game/Scripts/Enemies/Abilities/AppearAbility.cs b/Assets/_Game/Scripts/Enemies/Abilities/AppearAbility.cs index be42f1e5..c3ee84f1 100644 --- a/Assets/_Game/Scripts/Enemies/Abilities/AppearAbility.cs +++ b/Assets/_Game/Scripts/Enemies/Abilities/AppearAbility.cs @@ -10,15 +10,21 @@ namespace BaseGames.Enemies.Abilities /// public class AppearAbility : EnemyAbilityBase { - [SerializeField] private ClipTransition _appearClip; + private AppearAbilitySO _cfg; + + protected override void Awake() + { + base.Awake(); + _cfg = ResolveConfig(); + } protected override IEnumerator ExecuteCoroutine() { Phase = AbilityRunState.Active; - if (_appearClip.Clip == null) yield break; + if (_cfg == null || _cfg.appearClip.Clip == null) yield break; - _animancer.Play(_appearClip); - yield return EnemyAbilityWaits.Get(_appearClip.Clip.length); + _animancer.Play(_cfg.appearClip); + yield return EnemyAbilityWaits.Get(_cfg.appearClip.Clip.length); } } } diff --git a/Assets/_Game/Scripts/Enemies/Abilities/Configs/AppearAbilitySO.cs b/Assets/_Game/Scripts/Enemies/Abilities/Configs/AppearAbilitySO.cs new file mode 100644 index 00000000..e8f0ac56 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Abilities/Configs/AppearAbilitySO.cs @@ -0,0 +1,12 @@ +using Animancer; +using UnityEngine; + +namespace BaseGames.Enemies.Abilities +{ + /// AppearAbility 的配置:出场动画。 + [CreateAssetMenu(menuName = "BaseGames/Enemies/Abilities/Appear Ability", fileName = "ABL_")] + public class AppearAbilitySO : EnemyAbilitySO + { + public ClipTransition appearClip; + } +} diff --git a/Assets/_Game/Scripts/Enemies/Abilities/Configs/AppearAbilitySO.cs.meta b/Assets/_Game/Scripts/Enemies/Abilities/Configs/AppearAbilitySO.cs.meta new file mode 100644 index 00000000..af5f0615 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Abilities/Configs/AppearAbilitySO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73e9c01905c405d4ea9e4c04ca7886fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/Abilities/Configs/FacePlayerAbilitySO.cs b/Assets/_Game/Scripts/Enemies/Abilities/Configs/FacePlayerAbilitySO.cs new file mode 100644 index 00000000..5dc792b9 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Abilities/Configs/FacePlayerAbilitySO.cs @@ -0,0 +1,12 @@ +using Animancer; +using UnityEngine; + +namespace BaseGames.Enemies.Abilities +{ + /// FacePlayerAbility 的配置:转身/翻转动画。 + [CreateAssetMenu(menuName = "BaseGames/Enemies/Abilities/Face Player Ability", fileName = "ABL_")] + public class FacePlayerAbilitySO : EnemyAbilitySO + { + public ClipTransition faceClip; + } +} diff --git a/Assets/_Game/Scripts/Enemies/Abilities/Configs/FacePlayerAbilitySO.cs.meta b/Assets/_Game/Scripts/Enemies/Abilities/Configs/FacePlayerAbilitySO.cs.meta new file mode 100644 index 00000000..7687d7a1 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Abilities/Configs/FacePlayerAbilitySO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cb259f910bbefb342b91080d8a091cea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/Abilities/Configs/PlayClipAbilitySO.cs b/Assets/_Game/Scripts/Enemies/Abilities/Configs/PlayClipAbilitySO.cs new file mode 100644 index 00000000..fc908a20 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Abilities/Configs/PlayClipAbilitySO.cs @@ -0,0 +1,12 @@ +using Animancer; +using UnityEngine; + +namespace BaseGames.Enemies.Abilities +{ + /// PlayClipAbility 的配置:待播放的单个动画 Clip。 + [CreateAssetMenu(menuName = "BaseGames/Enemies/Abilities/Play Clip Ability", fileName = "ABL_")] + public class PlayClipAbilitySO : EnemyAbilitySO + { + public ClipTransition clip; + } +} diff --git a/Assets/_Game/Scripts/Enemies/Abilities/Configs/PlayClipAbilitySO.cs.meta b/Assets/_Game/Scripts/Enemies/Abilities/Configs/PlayClipAbilitySO.cs.meta new file mode 100644 index 00000000..b74407e5 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Abilities/Configs/PlayClipAbilitySO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc81345eb5294d643b4242eac215c5fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/Abilities/FacePlayerAbility.cs b/Assets/_Game/Scripts/Enemies/Abilities/FacePlayerAbility.cs index 43e0d551..03539c76 100644 --- a/Assets/_Game/Scripts/Enemies/Abilities/FacePlayerAbility.cs +++ b/Assets/_Game/Scripts/Enemies/Abilities/FacePlayerAbility.cs @@ -12,7 +12,13 @@ namespace BaseGames.Enemies.Abilities /// public class FacePlayerAbility : EnemyAbilityBase { - [SerializeField] private ClipTransition _faceClip; + private FacePlayerAbilitySO _cfg; + + protected override void Awake() + { + base.Awake(); + _cfg = ResolveConfig(); + } public override bool CanUse => base.CanUse @@ -33,10 +39,10 @@ namespace BaseGames.Enemies.Abilities _enemy.FacePlayer(); - if (_faceClip.Clip == null) yield break; + if (_cfg == null || _cfg.faceClip.Clip == null) yield break; - _animancer.Play(_faceClip); - yield return EnemyAbilityWaits.Get(_faceClip.Clip.length); + _animancer.Play(_cfg.faceClip); + yield return EnemyAbilityWaits.Get(_cfg.faceClip.Clip.length); } } } diff --git a/Assets/_Game/Scripts/Enemies/Abilities/PlayClipAbility.cs b/Assets/_Game/Scripts/Enemies/Abilities/PlayClipAbility.cs index b7884a3b..64857d55 100644 --- a/Assets/_Game/Scripts/Enemies/Abilities/PlayClipAbility.cs +++ b/Assets/_Game/Scripts/Enemies/Abilities/PlayClipAbility.cs @@ -10,15 +10,21 @@ namespace BaseGames.Enemies.Abilities /// public class PlayClipAbility : EnemyAbilityBase { - [SerializeField] private ClipTransition _clip; + private PlayClipAbilitySO _cfg; + + protected override void Awake() + { + base.Awake(); + _cfg = ResolveConfig(); + } protected override IEnumerator ExecuteCoroutine() { Phase = AbilityRunState.Active; - if (_clip.Clip == null) yield break; + if (_cfg == null || _cfg.clip.Clip == null) yield break; - _animancer.Play(_clip); - yield return EnemyAbilityWaits.Get(_clip.Clip.length); + _animancer.Play(_cfg.clip); + yield return EnemyAbilityWaits.Get(_cfg.clip.Clip.length); } } }