feat: 实现抓墙高度记忆、背墙跳/对墙跳、蹬墙后自动抓墙
- PlayerController: 添加 wallGrabY/wallGrabDir/isPostWallJump 字段及 API - WallSlideState: 高度限制(超限强制下滑不可蹬跳)+ 静止悬挂 + 反向键释放 - WallJumpState: 区分背墙跳(WallJumpAwayForce)/对墙跳(WallJumpBackForce) 蹬墙后标记 PostWallJump 允许空中自动抓墙;恢复空中冲刺次数 - FallState/JumpState: 新增抓墙入口(朝向按键 OR PostWallJump 自动抓墙) - PlayerMovement.WallJump: 增加 jumpAway 参数区分两种跳跃力 - IdleState/RunState: 落地时重置抓墙记录和蹬墙跳标记 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -144,6 +144,47 @@ namespace BaseGames.Player.States
|
||||
public void ResetAirJumps() =>
|
||||
_airJumpsLeft = _stats != null && _stats.HasAbility(AbilityType.DoubleJump) ? 1 : 0;
|
||||
|
||||
// ── 抓墙高度记忆 API ──────────────────────────────────────────────────
|
||||
// wallGrabY:首次抓住某面墙壁时记录的 Y 坐标;用于防止单面墙无限向上爬。
|
||||
// wallGrabDir:当前记录所属墙壁方向(+1=右墙,-1=左墙,0=无)。
|
||||
// isPostWallJump:蹬墙跳后未落地标记,允许靠近墙壁时自动抓墙。
|
||||
private float _wallGrabY = float.NegativeInfinity;
|
||||
private int _wallGrabDir = 0;
|
||||
private bool _isPostWallJump;
|
||||
|
||||
public float WallGrabY => _wallGrabY;
|
||||
public int WallGrabDir => _wallGrabDir;
|
||||
public bool IsPostWallJump => _isPostWallJump;
|
||||
|
||||
/// <summary>
|
||||
/// 进入 WallSlideState 时调用。
|
||||
/// 不同墙壁(dir != _wallGrabDir)→ 重置并记录新高度;
|
||||
/// 同一面墙壁 → 保留原记录(防止攀爬重置)。
|
||||
/// </summary>
|
||||
public void RecordWallGrab(int dir, float y)
|
||||
{
|
||||
if (dir != _wallGrabDir)
|
||||
{
|
||||
_wallGrabDir = dir;
|
||||
_wallGrabY = y;
|
||||
}
|
||||
// 同一面墙:保留 _wallGrabY,不更新
|
||||
}
|
||||
|
||||
/// <summary>落地时重置抓墙记录(由 IdleState/RunState.OnStateEnter 调用)。</summary>
|
||||
public void ResetWallGrab()
|
||||
{
|
||||
_wallGrabY = float.NegativeInfinity;
|
||||
_wallGrabDir = 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置蹬墙跳后自动抓墙标记。
|
||||
/// true:由 WallJumpState.OnStateEnter 设置;
|
||||
/// false:由 IdleState/RunState.OnStateEnter(落地)或 WallSlideState.OnStateEnter(已消耗)清除。
|
||||
/// </summary>
|
||||
public void SetPostWallJump(bool value) => _isPostWallJump = value;
|
||||
|
||||
// ── Overlay Layer API(供 SpringState / SoulSkill 等叠加动画使用)─────
|
||||
/// <summary>
|
||||
/// 在 Overlay Layer(Layer 1)播放动画,叠加于当前 Base Layer 动画之上。
|
||||
|
||||
Reference in New Issue
Block a user