首页 / 博客 / 玩法
发布: 2026年7月18日 约 7 分钟 玩法
土狼时间与跳跃缓冲:好跳跃的十二行代码

土狼时间与跳跃缓冲:好跳跃的十二行代码

当玩家说「跳跃手感不好」时,他们通常指的是两个缺失的功能。两个都只要半小时就能写完。

问题长什么样

每个试玩你平台游戏原型的人都说同一句话:「跳跃怪怪的」。没人能说清到底哪里不对。代码是正确的:踩到地面就跳,没踩到就不跳。

问题不在代码,而在人。玩家在意识到自己已经走出平台的那一刻按下按键 —— 但已经晚了。而当他在空中按下跳跃时,他期待落地那一瞬间就起跳。

两个小小的容错窗口

土狼时间在角色离开地面之后,仍然把跳跃权保留一小段时间。这个名字来自动画片里那只冲出悬崖、在空中停顿一拍的土狼。

跳跃缓冲的作用方向正好相反:如果玩家在落地前不久按下了按键,这次按键会被记住,并在接触地面的瞬间生效。

PlayerJump.cs
private void HandleJump() { if (IsGrounded) _coyote = COYOTE_TIME; else _coyote -= Time.deltaTime; if (_input.JumpPressed) _buffer = BUFFER_TIME; else _buffer -= Time.deltaTime; if (_buffer > 0f && _coyote > 0f) { _velocity.y = _jumpForce; _coyote = _buffer = 0f; Feedback.Play("jump_launch"); } }
csharpPlayerJump.cs

数值该怎么定

在我测量过的项目里,两个窗口取 100–150 毫秒都工作得很好,也就是 60 FPS 下的 6 到 9 帧。更短就感觉不到,更长则会像是在空中起跳。

不要把这些数值写死在代码里。放进 ScriptableObject 或数据表,设计师必须能在不启动游戏的情况下调整它们。

这个思路能走多远

同样的逻辑在别处一样有效:攻击输入缓冲、二段跳容错、边缘抓取的判定窗口,甚至菜单切换时的按键队列。

通则是:当玩家的意图与游戏规则冲突时,判给玩家。做到这一点的游戏,才会被形容为「跟手」。

← 全部文章