ゲーム制作

下り坂で浮き上がる問題を解決した

これだから坂とかいう地形はよお!

坂ブロックにはこれまで色々と苦しめられてきたが、その中でも対応が難しく長らく保留してきた問題がひとつあった。

下り坂での浮き上がり現象である。

坂を上る場合は地面に押し付けられる格好になるので、プレイヤーが走ってもあまり影響はない。

しかし、問題は坂を下る場合。
プレイヤーが少しでも走ると、トントントン…と地面から足が離れてしまうのだ。

これは動画を観てもらったほうが早いだろう。下り坂では、手加減してかなり減速してもプレイヤーがガクガクなっているのがお分かりいただけると思う。

で、こちらが問題を解決したバージョン。スムーズに上り下りできている。

バグではないけれど…

原因は単純である。

ある速度以上で下り坂に差し掛かると、重力による加速が追いつかないため次のフレームで着地に至らず、空中に投げ出される形になる。

普通の四角いブロックの角から下りるときと同じように、水平投射の自由落下になってしまうわけだ。

ゲーム内の物理法則をそのまま当てはめて考えれば、何か不可思議なことが起こっているわけではない。

でも現実的に見れば不自然で見栄えが良くないし、なにより下り坂ではほぼジャンプ不可能になってしまうので、とんでもなくユーザー体験が悪くなる。

どうにかしようと前々から考えていたが、明らかに対応めんどくさそうだし、良い方法もなかなか思いつかなかったのでずっと後回しにしていた。

しかし、村の外のマップを実装するにあたり、斜面を多く使用する関係でいよいよ避けて通れなくなったので、今回本腰を入れて対応に踏み切ったわけだ。

解決方法

(まあ、ほぼ誰の役にも立たない情報だと思うのでざっくりした説明で終わらす。)

下り坂での浮き上がりを防止するために、プレイヤーの足元に地面との接触のみをチェックするコリジョンボックスを新たに追加した。

プレイヤー本体のコリジョンボックスが空中判定でも、足元のコリジョンボックスのほうに地上判定が出ているなら、そこをベースにしてプレイヤーの座標を補正してやるのだ。

イメージを簡単な図にしてみた。(本当はもうちょっと複雑な条件があるけど、そこは割愛)

プレイヤーが下り坂での浮き上がるのを防止する仕組み