ファイブボックス 一分間スクラッチ講座 | #006 ジャンプの沈み込みを直す方法 加速・重力ジャンプ補正編
前回は、重力を使った加速ジャンプの基本を作成しました。
ただ、この方法ではキャラクターが着地したときに、体の一部が地面に沈み込んでしまうことがあります。
今回は、この沈み込みを補正する方法を解説します。
1.作成済みのスクリプトの確認
前回の動画では、次のようなスクリプトを作成して、加速ジャンプを実現しました。
上向き矢印キーが押されたら「ジャンプ力」を大きな値にする
毎フレーム、y座標を「ジャンプ力」ずつ変える
空中では「重力」によってジャンプ力を少しずつ減らす
地面に触れたらジャンプ力を0にする

この方法で、上に飛んで、だんだん減速し、最後は落下するという自然なジャンプができます。
ただし、このままだと着地したときに、キャラクターが地面に少しめり込んでしまうことがあります。
2.沈み込みの修正
沈み込みを修正するには、
沈んだ分だけ、y座標を上方向に戻せばよさそうですね。
そこで、前回作成した右側のスクリプトを次のように修正します。
追加するのは、
「地面の色に触れたら」
→ 「ジャンプ力を0にする」
の後の部分です。
追加する処理
「地面の色に触れていない」まで繰り返す
y座標を1ずつ変える

つまり、
地面の中に入ってしまったら、地面から抜けるまで少しずつ上へ戻す
という考え方です。
これで、沈み込んだ分を上に戻す処理が完成します。
3.このままだと何が気になる?
この方法で沈み込み自体は直せるのですが、
戻るときに 1ずつ y座標を変えている ので、場合によっては
じわっと戻る
少し浮き上がるように見える
ことがあります。
処理としては正しいのですが、見た目としては少し気になります。
そこで使うのが、ブロック定義です。

4.ブロック定義を使って瞬時に補正する
Scratchには、
途中の画面の変化を見せずに、結果だけを表示する機能 があります。
これを使うと、
沈み込み補正の処理を一瞬で終わらせたように見せることができます。
手順
「ブロック定義」 グループを選択
「ブロックを作る」 をクリック
ブロック名に 「着地補正」 と入力
「画面を再描画せずに実行する」 にチェックを入れる
OK を押して作成

この設定を行うことで、
補正処理の途中経過を1フレームずつ表示せず、処理後の結果だけ が表示されるようになります。
5.作成した「着地補正」に処理を移動する
作成したブロック定義 「着地補正」 の中に、
先ほど作った沈み込み補正を含む処理を移動します。
具体的には、右側のスクリプトで行っていた
y座標をジャンプ力ずつ変える
地面の色に触れたか判定する
触れていたらジャンプ力を0にする
地面から抜けるまでy座標を1ずつ上げる
空中ならジャンプ力を重力ずつ変える
といった処理を、ブロック定義の中に丸ごと入れます。

そして、空いた「ずっと」ブロックの中には、
その 「着地補正」ブロックを呼び出すだけ にします。
これで、見た目としては
地面に沈んだ瞬間に、すぐ正しい位置まで戻る
ようになります。
6.ここまでの全体のスクリプト
ここまで作成すると、全体のスクリプトは次のような形になります。
左側:ジャンプ開始の処理
中央:ずっと「着地補正」を呼び出す処理
右側:ブロック定義「着地補正」の中に、移動・重力・着地補正の処理

この構成にすることで、
見た目の自然さ と 処理の分かりやすさ の両方を保つことができます。
7.現段階での課題
これで、地面への沈み込みはきれいに補正できるようになりました。
ただし、現段階ではまだ問題があります。
それは、
空中にいるときでもジャンプできてしまう
ことです。
つまり、地面に立っていなくても上向き矢印キーを押すと、
もう一度ジャンプできてしまう状態です。
8.次回予告
次回は、この
空中ジャンプができてしまう問題
を修正して、
地面にいるときだけジャンプできるようにする方法 を解説します。
ジャンプ処理は少しずつ改善していくことで、
より自然で遊びやすいゲームになっていきます。
ぜひ次回もご覧ください。
ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!