Merge branch 'agents/wall-jump-logic-optimization'

# Conflicts:
#	Assets/_Game/Scripts/Player/PlayerMovement.cs
#	Assets/_Game/Scripts/Player/States/IdleState.cs
#	Assets/_Game/Scripts/Player/States/RunState.cs
#	Assets/_Game/Scripts/Player/States/WallJumpState.cs
#	Assets/_Game/Scripts/Player/States/WallSlideState.cs
This commit is contained in:
2026-05-19 13:03:04 +08:00
7 changed files with 95 additions and 4 deletions

View File

@@ -153,6 +153,47 @@ namespace BaseGames.Player.States
? (_movementConfig != null ? _movementConfig.MaxAirJumps : 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 LayerLayer 1播放动画叠加于当前 Base Layer 动画之上。