角色能力,存档
This commit is contained in:
@@ -12,8 +12,9 @@ namespace BaseGames.Player.States
|
||||
if (AnimCfg?.Run != null)
|
||||
Anim.Play(AnimCfg.Run);
|
||||
// 落地时重置空中能力计数器(绝大多数情况被 IdleState 覆盖,但水平落地直接进入 RunState 时也需要)
|
||||
Owner.GetState<AerialDashState>()?.ResetAerialDashes();
|
||||
Owner.ResetAirJumps();
|
||||
Owner.GetState<DashState>()?.ResetAirDash();
|
||||
Owner.GetState<WallSlideState>()?.ResetWallGrab();
|
||||
}
|
||||
|
||||
public override void OnStateUpdate()
|
||||
@@ -28,12 +29,22 @@ namespace BaseGames.Player.States
|
||||
_owner.TransitionTo(_owner.GetState<JumpState>());
|
||||
return;
|
||||
}
|
||||
// 地面冲刺:需解锁 Dash 能力,且冲刺不在冷却
|
||||
if (Buffer.ConsumeDash()
|
||||
&& Stats != null && Stats.HasAbility(AbilityType.Dash)
|
||||
&& Owner.GetState<DashState>() is { CanDash: true } dashState)
|
||||
// 地面攻击:Move Y > 0 → 上劈;其余 → 普通连击
|
||||
if (Buffer.ConsumeAttack())
|
||||
{
|
||||
_owner.TransitionTo(dashState);
|
||||
if (Input.MoveInput.y > 0.5f)
|
||||
_owner.TransitionTo(_owner.GetState<UpAttackState>());
|
||||
else
|
||||
_owner.TransitionTo(_owner.GetState<AttackState>());
|
||||
return;
|
||||
}
|
||||
// 地面冲刺:先确认能力与冷却均满足,再消耗缓冲,避免无操作时静默吃掉输入
|
||||
var ds = Owner.GetState<DashState>();
|
||||
if (ds != null && ds.CanDash
|
||||
&& Stats != null && Stats.HasAbility(AbilityType.Dash)
|
||||
&& Buffer.ConsumeDash())
|
||||
{
|
||||
_owner.TransitionTo(ds);
|
||||
return;
|
||||
}
|
||||
if (Mathf.Abs(Input.MoveInput.x) < 0.1f)
|
||||
@@ -46,6 +57,13 @@ namespace BaseGames.Player.States
|
||||
|
||||
public override void OnStateFixedUpdate()
|
||||
{
|
||||
// 离地检测(与 CheckGrounded 同帧在 FixedUpdate 中执行,立即响应离地事件)
|
||||
if (!Move.IsGrounded)
|
||||
{
|
||||
_owner.TransitionTo(_owner.GetState<FallState>());
|
||||
return;
|
||||
}
|
||||
|
||||
float inputX = Input.MoveInput.x;
|
||||
if (Mathf.Abs(inputX) > 0.1f)
|
||||
Move.Move(inputX * Cfg.RunSpeed);
|
||||
|
||||
Reference in New Issue
Block a user