第一章 操作感No.001
コヨーテタイム
Coyote Time別名 コヨーテジャンプ、足場の端の猶予
概要
足場の端から落ち始めた直後の短いあいだもジャンプを受け付ける猶予。プレイヤーは端の上で押したつもりでも、実際には足場を離れた後に押していることがある。猶予がないと、押したのに跳べずに落ちたと感じる。
使われる場面
- 足場から足場へ跳び移る場面
- 遠くへ跳ぼうとして端のぎりぎりまで走ると、押すのが足場を離れた後になりやすい。猶予があれば、離れた直後に押したジャンプも跳べる。
- 下り坂や小さな段差
- 走って下るときに足が一瞬だけ地面から浮くことがある。猶予があれば、その瞬間に押したジャンプも受け付けられる。
- 崩れる足場や動く足場
- 足場が消えたり動いて足元から外れたりした直後も、猶予のあいだはジャンプを受け付ける。足場が急になくなっても、押したとおりに跳べる。
- 3D のアクション
- 足場の端までの距離を画面から読み取りにくく、気づかないうちに端を踏み外していることがある。猶予があれば、踏み外した直後に押したジャンプも跳べる。
判断基準
| こういうとき | こうする |
|---|---|
| 足場の端でジャンプを押したのに落ちた、という感想が出る | 猶予を入れる。0.1 秒(毎秒 60 回の更新で 6 フレーム)から試し、0.05〜0.15 秒の幅で調整する。 |
| 足場から落ち始めて、はっきり下がった位置からでもジャンプできてしまう | 猶予が長すぎる。跳べる位置が端の近くに収まるまで短くする。 |
| 地面から跳んだ直後にもう一度ジャンプできてしまう | 跳んだ直後も足元に足場がないので、猶予のうちに数えられている。跳んだかどうかを覚えておき、跳んだ後は猶予を使わせない。 |
| 猶予のあいだに跳ぶと、ジャンプが低くなる | 跳ぶときに、落ちている速さに上向きの速さを足している。上向きの速さで置き換え、落ちていた速さを打ち消す。 |
| 空中でもう一度跳べる(2 段ジャンプがある)ゲーム | 猶予のあいだのジャンプは地面からのジャンプとして扱い、空中で跳べる回数を減らさない。減らすと、少し遅れて押しただけで空中のジャンプを 1 回失う。 |
遊んでこう感じたら
指示の例
足場の端でジャンプしたのに跳べずに落ちることがある。コヨーテタイムを入れて、足場を離れてから 0.1 秒くらいはジャンプできるようにして
足場から落ち始めて、かなり下がってからでもジャンプできてしまう。コヨーテタイムが長すぎるので、今の半分くらいに短くして
足場の端で少し遅れてジャンプすると、2 段ジャンプが 1 回減ってしまう。コヨーテタイム中のジャンプは地面からのジャンプとして数えて、空中のジャンプの回数を減らさないで
崩れる足場が消えた直後にジャンプしても跳べない。足場が消えたときにも、歩いて端から落ちたときと同じコヨーテタイムを付けて
詳細
端で押したジャンプが遅れる理由
足場の端でジャンプするとき、プレイヤーはできるだけ遠くへ跳ぼうとして端のぎりぎりまで走ってから押す。画面で端を見てから指が動くまでには時間がかかるので、押すのが足場を離れた後になることがある。押してからゲームに反映されるまでの遅れ(「入力遅延」)があれば、押したつもりの時点とゲームが受け取る時点はさらに離れる。毎秒 60 回の更新なら 1 フレームは約 0.017 秒である。猶予のないゲームでは、押すのが 1 フレーム遅れただけで跳べずに落ちる。プレイヤーの目には端の上で押したように見えるので、ボタンが効かなかったと感じる。
そこで、足場を離れてから短いあいだも立っているときと同じジャンプを受け付ける。この猶予をコヨーテタイムと呼ぶ1。猶予は歩いて端から出たときだけでなく、足場が崩れたときや動く足場から外れたときにも同じように付ける。
猶予の数え方
地面に立っているあいだは足場を離れてからのフレーム数を 0 に戻し、空中にいるあいだは 1 ずつ増やす。ジャンプが押されたとき、このフレーム数が猶予以内なら跳ばせる。猶予を 0 にすると、立っているときにしか跳べない。
地面から跳んだ直後も足元に足場はないので、フレーム数は同じように増え始める。跳んだかどうかを覚えておかないと、猶予のあいだにもう一度跳べてしまう。
// 1 ステップごとに
if (grounded) {
airFrames = 0;
jumped = false;
} else {
airFrames += 1;
}
if (jumpPressed && !jumped && airFrames <= coyoteFrames) {
velocityY = jumpSpeed; // 落ちていた速さに足さず、上向きの速さで置き換える
jumped = true;
}
長さの目安
目安は 0.05〜0.15 秒ほど(毎秒 60 回の更新で 3〜9 フレーム)である。0.1 秒(6 フレーム)前後から試し、遊びながら調整する。短すぎると、少し遅れただけで落ちる感じが残る。長すぎると、はっきり落ち始めた後でも跳べるので、空中を蹴って跳んだように見える。
猶予のあいだも重力で落ち続けるので、猶予が長いほど端より低い位置から跳ぶことになる。デモでは猶予を 9 フレームにすると体の高さの半分ほど、15 フレームにすると体の高さより深く沈んでから跳べる。走る速さや落ちる速さが速いゲームほど、同じ猶予でも跳ぶ位置は端から遠くなり、高さも低くなる。
先行入力との違い
コヨーテタイムが受け付けるのは、足場を離れた後に遅れて押したジャンプである。逆に、着地の少し前に早く押してしまったジャンプを受け付けるのが「先行入力」である。押されたジャンプを短いあいだ覚えておき、着地したときに跳ばせる。二つは受け付ける向きが逆なので、片方だけを入れても、もう片方の場面では押したのに跳ばない感じが残る。
脚注
-
名前は、崖の外へ走り出たキャラクターが足元に地面がないと気づくまで宙にとどまる、アニメの定番の場面に由来する。 ↩