Nice Discのキャラクタの動きについて

2023年 11月 03日 Nice Discのジャンプについて

ゲームジャムでNice Discを作り、その後本製作に入るまで1年かかりました。その理由はこのゲームの理想とするジャンプを構築するのに時間がかかったためです。本製作に入る前に解決しようとした理想は以下です。

  • ジャンプボタンを離すと、途中でジャンプを止められる。
  • 高さが十分確保できるが着地するまで退屈を感じない。
  • ジャンプ後に横方向に気持ちよくコントロールできる。
  • 重力をぶち壊すような上昇と、重力をコントロールするような下降。
  • ディスクをかわす感触と、ディスクを拾いに行く感触の両立。

1番目に挙げた『ジャンプを途中で止められる』というポイントはNice Discを作り始める前にクリアできていたのですが、そこに到達するまで結構、試行錯誤したのでその時のことを記録していきます。

横視点2Dゲームの場合、ジャンプとはY値の上昇です。そしてある程度の時間がたつとY値が戻ろうとする動きです。重力のコントロールなので、ゲームエンジンの設定を使い、Yの正方向に動力を使い、重力で落とせばいいと思っていたのですが、これは理想的な動きにはなりませんでした。(ゴルフゲームで球を飛ばすとかならいいですね)

私はゲーム作りの素人なのでどうすればいいのか、ベストな方法をとっていなかったと思うのですが、とりあえずボタンを押せば上昇し、上昇速度を徐々に落としていき、下降に切りかえ速度を徐々に上げていけばいいと思っていました。でもその考えは『ジャンプボタンを離すと、途中でジャンプを止められる。』を達成するには不十分でした。

こんな感じのイメージ。左が時間経過に伴うY(高さ)値の変化、右が時間経過に伴うY方向の速度変化(傾きが重力加速度ね)。

最初に思い描いていたジャンプ挙動のグラフ

なんとなく放物線になっており大丈夫かなと思っていました。この状態でジャンプを途中で止めるアクション、つまりジャンプが頂点につく前にジャンプボタンを離すと以下のようなアクションになります。

ジャンプボタンを離すと強烈な違和感

グラフを見せられてピンとこないかもしれませんが、実際の動きにしてみるとなんだか急激に落下するような違和感が発生しました。これは速度のグラフからわかるように、上昇速度がゼロになるというプロセスを踏む前に急激に速度がマイナスになってしまうためです。

ジャンプ最大地点に到達する前にボタンを離したとしても、その頂点付近の動作はジャンプを自然に見せるために必要であることがわかりました。なので以下の感じでジャンプを構成しました。

ジャンプには滞空時間(上昇方向の遊び)が必要

それまではジャンプを上昇領域と下降領域に分けていたのですが、上昇領域、滞空領域、下降領域の3点に分けることにしました。ボタンをジャンプの途中でやめると滞空領域に入りその後に下降領域に入ります。どんな速度でじゃんぷをしても、上昇速度が徐々にゼロになるというプロセスを踏むことでより自然なジャンプが実現できました。

滞空領域という考え方を用いたことで別の利点がありました。滞空領域の挙動を調整することで滞空時間が変化し、様々なアクションが可能になりました。例えば、着地点の調節できるとか、ディスクを投げる余裕が生まれるとか。

実際にNice Discに入れたジャンプの挙動は、初速度をやや速め(重力をぶち壊す情熱を演出)、滞空時間をほんの少しだけ伸ばす(攻撃をかわしディスクを投げ返す疑似的な時間停止を演出)、下降速度を上昇より少しだけゆっくり(ディスクを拾いに行ける気持ちの余裕を演出) という風にしました。

多分、ちょっとプレイしただけでは伝わらないと思います。でもこだわりました。褒めて!!