diff --git a/Assets/_Game/Prefabs/Enemies/E001/ENM_CaoZhi.prefab b/Assets/_Game/Prefabs/Enemies/E001/ENM_CaoZhi.prefab index aae0b871..b15479df 100644 --- a/Assets/_Game/Prefabs/Enemies/E001/ENM_CaoZhi.prefab +++ b/Assets/_Game/Prefabs/Enemies/E001/ENM_CaoZhi.prefab @@ -326,7 +326,7 @@ MonoBehaviour: m_EditorClassIdentifier: _config: {fileID: 11400000, guid: 508afd17a0cf2fe47935c78097c3b093, type: 2} _spriteRenderer: {fileID: 7572402007749840909} - _enableTurnAnimation: 0 + _enableTurnAnimation: 1 _animancer: {fileID: 7326741988116792408} _animConfig: {fileID: 11400000, guid: 06936c5bc3358904cb269abdfa60ed14, type: 2} _visualRoot: {fileID: 1594798921504223030} @@ -603,6 +603,7 @@ MonoBehaviour: _Clip: {fileID: 7400000, guid: 9f0fea347ba7eb347b0f71b423832808, type: 2} _NormalizedStartTime: NaN _contactDamage: {fileID: 9135205194319985817} + _dashSpeed: 0 references: version: 2 RefIds: [] diff --git a/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs b/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs index 6bced0ff..30933ee7 100644 --- a/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs +++ b/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs @@ -510,6 +510,7 @@ namespace BaseGames.Editor AssignAsset(movement, "_config", report, false, "ENM_E001_Stats"); AssignAsset(movement, "_animConfig", report, false, "ENM_E001_AnimConfig"); + AssignBool(movement, "_enableTurnAnimation", true); // 转向播 Flip(巡逻翻边/追击起手前转身) AssignReference(movement, "_visualRoot", visual, report); AssignReference(movement, "_animancer", animancer, report); AssignReference(movement, "_spriteRenderer", sr1, report); diff --git a/Assets/_Game/Scripts/Enemies/Abilities/ContactChaseAbility.cs b/Assets/_Game/Scripts/Enemies/Abilities/ContactChaseAbility.cs index 4c08f062..8f997877 100644 --- a/Assets/_Game/Scripts/Enemies/Abilities/ContactChaseAbility.cs +++ b/Assets/_Game/Scripts/Enemies/Abilities/ContactChaseAbility.cs @@ -21,11 +21,28 @@ namespace BaseGames.Enemies.Abilities [Header("接触伤害")] [SerializeField] private BodyContactDamage _contactDamage; + [Header("冲刺")] + [Tooltip("冲刺速度;<=0 时回退用 EnemyStatsSO.RunSpeed(追击速度)")] + [SerializeField] private float _dashSpeed = 0f; + protected override IEnumerator ExecuteCoroutine() { Phase = AbilityRunState.Active; _enemy.SetEngaged(true); + // 冲刺方向:按玩家所在侧一次性确定(committed 冲锋) + float dir = (_enemy.PlayerTransform != null && + _enemy.PlayerTransform.position.x < _enemy.transform.position.x) ? -1f : 1f; + var mv = _enemy.Movement; + + // 先转身朝玩家(背对时播 Flip 转身动画),转身完成后再张口 + if (mv != null) + { + mv.FaceDirection((int)dir); + while (mv.IsTurning) + yield return null; + } + // 起手:张口(一次性)。期间静止、不伤人;锁住动画防被步态覆盖。 if (_startClip.Clip != null) { @@ -34,11 +51,9 @@ namespace BaseGames.Enemies.Abilities yield return EnemyAbilityWaits.Get(_startClip.Clip.length); } - // 冲刺方向:起手后按玩家所在侧一次性确定(committed 冲锋) - float dir = (_enemy.PlayerTransform != null && - _enemy.PlayerTransform.position.x < _enemy.transform.position.x) ? -1f : 1f; - float speed = _enemy.Stats != null ? _enemy.Stats.RunSpeed : 0f; - var mv = _enemy.Movement; + // 冲刺速度:优先能力配置的 _dashSpeed,否则回退 Stats.RunSpeed + float speed = _dashSpeed > 0f ? _dashSpeed + : (_enemy.Stats != null ? _enemy.Stats.RunSpeed : 0f); // 冲刺:朝该方向直冲、接触伤害开、播 Skill_Loop,直到撞墙/到边缘或玩家消失即停。 if (_loopClip.Clip != null)