見出し画像

ファイブボックス 一分間スクラッチ講座 | #008 頭上の足場にぶつかったら跳ね返る処理 加速・重力ジャンプ応用編

前回は、加速ジャンプに「2段ジャンプ制御」を加えて、空中で何度もジャンプできてしまう問題を修正しました。

上向き矢印キーを押したときに、地面に触れているときだけジャンプできる という条件を入れることで、ゲームらしいジャンプに近づきました。

前回まで完成済みのジャンプのスクリプト

今回はその続きです。

ジャンプ中に、頭上に足場やブロックがあった場合、下からぶつかったらどうなるでしょうか。

本来であれば、プレイヤーはその足場をすり抜けたり、上に乗ってしまったりせず、頭をぶつけて下に跳ね返る

今回は、スクラッチでこの「頭上ブロックにぶつかったときの跳ね返り処理」を作っていきます。

これは Youtube ファイブボックス一分間スクラッチ講座 で今回の動きの開設動画です。
併せてご参照ください


今回作る動き

今回作るのは、次のような動きです。

プレイヤーがジャンプして上に移動しているとき、頭上の足場にぶつかったら、少し下に戻します。
反対に、プレイヤーが落下して地面に着地したときは、前回までと同じように、沈み込んだ分を上に戻します。
つまり、同じ「地面の色に触れた」という判定でも、

上に向かっているとき →  頭上の障害物にぶつかった

下に向かっているとき →  地面に着地した

というように、状況を分けて考える必要があります。


前回までのスクリプトの確認

前回の記事では、加速ジャンプに2段ジャンプ制御を加えました。
基本的な考え方は次の通りです。

上向き矢印キーが押された かつ 地面に触れている

この2つの条件を満たしたときだけ、ジャンプできるようにします。

これによって、空中で上向き矢印キーを何度押しても、2段ジャンプが起きないようになりました。

さらに、着地時にプレイヤーが地面へ沈み込んでしまう問題を防ぐために、沈み込み補正 も入れています。


このスクリプトの課題

前回までのスクリプトでも、通常のジャンプや着地はかなり自然に動きます。
しかし、頭上に足場がある場合に問題が起きます。

たとえば、プレイヤーがジャンプしている途中で、上にある足場にぶつかったとします。
このとき、スクリプトによっては、プレイヤーがその足場の上に移動してしまうことがあります。

今回はこれを修正していきます。


ポイントは「ジャンプ力」の向き

今回のポイントは、変数「ジャンプ力」です。

ジャンプ力がプラス、つまりジャンプ中は、プレイヤーは上に向かって移動しています。

反対に、ジャンプ力が0以下のとき、つまり落下中は。プレイヤーは下に向かって落ちている、または着地している状態です。

この違いを使って、処理を分けます。

大事なのは、同じ「地面の色に触れた」という状態でも、
上に向かっているのか、下に向かっているのかで処理を変える
ということです。

ジャンプ力の大きさによって処理を分岐

上に向かっているとき

まずは、プレイヤーが上に向かっている状態、つまりジャンプ力が0より大きい場合です。

この状態で頭上の足場やブロックにぶつかったとき、そのままだとプレイヤーがブロックの中にめり込んでしまうことがあります。

そこで、次のように処理します。

頭上ブロック(地面の色)に触れている間、y座標を-1ずつ変える

つまり、プレイヤーを少しずつ下に戻します。
これによって、頭上の足場から押し出されるような動きになります。


下に向かっているとき

次に、プレイヤーが落下している状態、つまりジャンプ力が0以下の場合です。

この状態で地面の色に触れた場合は、前回同様プレイヤーが着地したということですね。

地面の色に触れている間、y座標を1ずつ変える

つまり、プレイヤーを少しずつ上に戻します。
これによって、地面に沈み込んだ分を補正できます。


ブロックの考え方

今回追加する処理の考え方は、次のようになります。

もし地面の色に触れたなら、下のように振り分けます。

ジャンプ力が0より大きい場合
→ 上に向かっているので、頭上の障害物にぶつかった
→ y座標を-1ずつ変えて、下に戻す

そうでなければ
→ 落下中に地面へ着地した
→ y座標を1ずつ変えて、上に戻す

ジャンプ力の大きさによる分岐処理

完成イメージ

今回の処理を入れると、次のような動きになります。

プレイヤーがジャンプする

頭上の足場にぶつかる

足場の中にめり込まないように下へ戻る

ジャンプ力が止まり、落下に移る

地面に着地したら沈み込み補正で上に戻る

これで、頭上に足場があるステージでも、自然なジャンプの動きに近づきます。



今回のまとめ

今回は、頭上の足場にぶつかったときの跳ね返り処理を作りました。

ポイントは、変数「ジャンプ力」を使って、プレイヤーが上に向かっているのか、下に向かっているのかを判断することです。

ジャンプ力が0より大きいときは、上に向かっている状態です。
このときに地面の色に触れたら、頭上の障害物にぶつかったと考えて、y座標を-1ずつ変えて下に戻します。

ジャンプ力が0より大きくないときは、落下中または着地中です。
このときに地面の色に触れたら、地面に沈み込んだと考えて、y座標を1ずつ変えて上に戻します。

また、この判定はジャンプ力を0にする前に入れる必要があります。

今回の処理を入れることで、頭上に足場があるステージでも、より自然なジャンプの動きになります。

最初は少し難しく見えるかもしれませんが、

上に進んでいるときは下に戻す
下に進んでいるときは上に戻す

と考えると分かりやすいです。

ジャンプゲームを作るときには、とても使いやすい処理なので、ぜひ試してみてください。


ファイブボックスでは、スクラッチやUnityの個別指導オンラインレッスンを行っています。

「スクラッチでゲームを作ってみたい」
「Unityにも挑戦してみたい」
「自分の作りたいゲームを一緒に完成させたい」

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

いいなと思ったら応援しよう!

ファイブボックス よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!