This explanation is currently available in Japanese.
ひとことで
足場の端から落ち始めた直後の短い間(0.1 秒前後)だけ、まだ地面にいるものとしてジャンプを受け付けるしくみです。遊ぶ人は画面を見てから指を動かすので、端ぎりぎりで押したつもりでも、実際には数フレーム遅れています。この猶予があると、「押したのに落ちた」という理不尽な失敗がなくなります。名前は、アニメのコヨーテが崖の外へ走り出して、一瞬宙に止まってから落ちる様子から来ています。
ゲームでの使いどころ
- 2D アクション:穴を飛び越える場面で、端ぎりぎりの踏み切りを成功させる。ほとんどの現代的なアクションゲームに入っている。
- 3D アクション:崖や足場の端からのジャンプ。3D は奥行きがわかりにくいので、猶予をやや長めにすることが多い。
- 壁ジャンプ・つかまり:壁から離れた直後の壁ジャンプ、ロープを放した直後のジャンプなど、「さっきまでできた行動」全般に同じ考え方を使える。
しくみ
地面を離れてからの時間 を数えておきます。ジャンプを押したとき、
とします。ただし、ジャンプで地面を離れた場合は猶予を与えてはいけない(空中で 2 回跳べてしまう)ので、「ジャンプした」フラグを立てておき、着地するまでは受け付けません。
猶予 は 60fps で 4〜8 フレーム(0.07〜0.13 秒)程度がよく使われます。短すぎると効果がなく、長すぎると空中を走ってから跳べるのが見た目にわかり、不自然になります。
実装のポイント
- 縦の速度は上書きする:落ち始めて下向きの速度がついていても、ジャンプの速度を足すのではなく代入します。足すと、猶予の後半で跳んだときだけジャンプが低くなります。
- 入力バッファとの組み合わせ:着地の直前に押したジャンプを覚える入力バッファと合わせて入れるのが定番です。両方あると、ジャンプの成功が遊ぶ人の感覚とほぼ一致します。
- 時間で数える:フレーム数で数えると、フレームレートで猶予の長さが変わります。秒で数えるか、固定タイムステップで動かします。
- 見た目は正直に:猶予中もキャラクターは落ち始めて構いません。わずかな時間なので、遊ぶ人はまず気付きません。
つまずきやすい点
- 空中で 2 段ジャンプ:ジャンプで地面を離れた場合にも猶予を与えると、上昇中にもう一度跳べてしまいます。「ジャンプして離れたか」を区別します。
- 坂道や段差の下り:下り坂や小さな段差を下りるとき、一瞬地面から離れる判定になるとジャンプできなくなります。コヨーテタイムはこの問題も隠してくれますが、地面へ吸い付ける処理も別に必要です。
- 落ちる床・動く床:足場が崩れた直後や、動く床から離れた直後にも猶予を与えるかを決めておきます。
デモで試すこと
- プレイヤーは穴の手前の端で、わざと少し遅れて(既定では 70 ms)ジャンプを押します。コヨーテタイムが 100 ms あると、遅れても毎回跳べて、「ジャンプ成功」が増えていきます。
- 右下の図で、赤い線(足場を離れた瞬間)から黄色の線(押した瞬間)までが、緑の帯(猶予)の中に入っていることを確かめてください。
- 「コヨーテタイム」を 0 にすると、押した瞬間にはもう空中なので跳べず、穴へ落ちます。画面では端で踏み切ったように見えるのに落ちる理不尽さがわかります。
- 「ボタンを押すのが遅れる時間」を猶予より長くすると、猶予があっても落ちます。