namespace BaseGames.Player.States { /// /// 弹反预备状态(架构 05_PlayerModule §2,完整实现在 Week 6)。 /// 开启 ParrySystem 弹反窗口,播放 ParryStart 动画; /// 成功弹反后 ParrySystem.ConsumeParry() 返回 true,HurtBox 不处理该次伤害。 /// public class ParryState : PlayerStateBase { public ParryState(PlayerController owner) : base(owner) { } public override void OnStateEnter() { // 开启弹反窗口(HurtBox.ReceiveDamage 步骤 2 查询) Owner.Parry?.OpenParryWindow(); // 停止移动 Move?.ZeroHorizontalVelocity(); // 播放弹反预备动画 if (AnimCfg?.ParryStart != null) { var state = Anim?.Play(AnimCfg.ParryStart); if (state != null) { state.Events(this).OnEnd = OnParryEnd; return; } } // 无动画则立即结束 OnParryEnd(); } public override void OnStateExit() { // 确保弹反窗口关闭(无论是否成功) Owner.Parry?.CloseParryWindow(); } private void OnParryEnd() { Owner.TransitionTo(Owner.GetState()); } public override void OnStateFixedUpdate() { // 弹反预备期间无水平输入,仍需每帧调用 Move(0) 叠加 _platformVelocity.x, // 使玩家在移动平台上弹反时随平台同步移动。 if (Move != null && Move.IsGrounded) Move.Move(0f); } } }