ホーム / ブログ / ゲームプレイ
公開日: 2026年7月18日 約 7 分 ゲームプレイ
コヨーテタイムとジャンプバッファ:良いジャンプの 12 行

コヨーテタイムとジャンプバッファ:良いジャンプの 12 行

プレイヤーが「ジャンプの感触が悪い」と言うとき、たいていは 2 つの機能が欠けています。どちらも 30 分で書けます。

問題はどう現れるか

プラットフォーマーのプロトタイプを試した人は全員同じことを言います。「ジャンプが変」。何が悪いのかを正確に言える人はいません。コードは正しいのです。接地していればジャンプ、していなければジャンプしない。

問題はコードではなく人間の側にあります。プレイヤーは足場から外れたと気づいた瞬間にボタンを押しますが、そのときにはもう遅い。そして空中でジャンプを押したときは、着地した瞬間に跳んでほしいと期待しています。

2 つの小さな猶予

コヨーテタイムは、キャラクターが接地を離れた後もわずかの間ジャンプ権を残します。名前は、崖から飛び出して一瞬空中に留まるアニメのコヨーテに由来します。

ジャンプバッファは逆方向に働きます。着地の直前に押された入力を記憶しておき、接地した瞬間に適用するのです。

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 ms がよく機能します。60 FPS なら 6〜9 フレームです。短すぎれば効果が感じられず、長すぎると空中から跳んでいるように見えます。

これらの値をコードに直接書かないでください。ScriptableObject かデータテーブルに置き、デザイナーがゲームを起動せずに変更できるようにします。

どこまで応用できるか

同じ考え方は他のあらゆる場面で効きます。攻撃入力のバッファリング、二段ジャンプの猶予、ぶら下がりの掴み判定、さらにはメニュー遷移中のキュー処理まで。

原則はこうです。プレイヤーの意図とゲームのルールが衝突したら、プレイヤー側に有利な判定を下す。それをしているゲームが「反応が良い」と呼ばれます。

← すべての記事