一分間スクラッチ講座|スクロール処理⑥ 横スクロール中の壁判定を作る
前回までの記事では、スクロールゲームで使う足場やブロックをクローンで作成し、画面端で表示・非表示を切り替える仕組みを作ってきました。
今回は、スクロールシリーズの最終回として、キャラクターがブロックにぶつかったときの処理を作ります。
横スクロールゲームでは、キャラクターがブロックにぶつかったときに、次のような判定が必要になります。
・右側にブロックがあるときは、右へ進めない
・左側にブロックがあるときは、左へ進めない
・ブロックがない方向には進める
この判定を作るために、今回はキャットの左右に「センサー」を配置します。
つぎのYoutubeショート動画は「ファイブボックス一分間スクラッチ講座 スクロールの跳ね返り制御」です。
よろしければ合わせてご参照下さい。
1. 左右のセンサーを用意する
まず、キャットの左右にセンサー用のスプライトを作ります。
今回は、次の2つのセンサーを用意します。
・センサーL
・センサーR
センサーLは、キャットの左側を調べるためのセンサーです。
センサーRは、キャットの右側を調べるためのセンサーです。
ポイントは、センサーをキャットの少し外側にはみ出す位置に配置することです。
キャットの体の中にセンサーが入っていると、ブロックに触れたかどうかを正しく判定しにくくなります。
そのため、センサーはキャットより少し外側に出るように配置します。

2. 変数を用意する
次に、左右のセンサーがブロックに触れているかどうかを記録する変数を作ります。
今回は、次の2つの変数を使います。
・しょうとつL
・しょうとつR
「しょうとつL」は、左側にブロックがあるかどうかを表します。
「しょうとつR」は、右側にブロックがあるかどうかを表します。

それぞれの変数には、次のように値を入れます。
・ブロックに触れている → 1
・ブロックに触れていない → 0
このようにしておくと、あとで移動処理の条件として使いやすくなります。
3. センサーRのプログラム
まずは、右側を調べるセンサーRのプログラムを作ります。
センサーRは、常にキャットについていくようにします。
そのため、最初に次の処理を入れます。

これで、センサーRはキャットと同じ位置に移動します。
そのうえで、センサーRのスプライト自体をあらかじめキャットの右側にはみ出す位置に調整しておきます。
次に、センサーRがブロックに触れているかどうかを判定します。

つまり、右側のセンサーがブロックに触れていれば、右側に障害物があるということです。
このとき、「しょうとつR」を1にします。
反対に、ブロックに触れていなければ、右側には障害物がないので、「しょうとつR」を0にします。

4. センサーLのプログラム
次に、左側を調べるセンサーLのプログラムを作ります。
考え方はセンサーRと同じです。
センサーLも、常にキャットについていくようにします。
そのうえで、センサーLのスプライトをキャットの左側にはみ出す位置に調整しておきます。
判定に使う変数だけが変わります。

センサーLがブロックに触れているときは、左側に障害物があるということです。
その場合は「しょうとつL」を1にします。
ブロックに触れていなければ、「しょうとつL」を0にします。
センサーRとセンサーLは、ほとんど同じプログラムです。
違うのは、使う変数が「しょうとつR」か「しょうとつL」かという点です。

5. センサーは確認後に透明にする
センサーは、ゲームの仕組みを作るための補助スプライトです。
そのため、完成時に画面上に見えている必要はありません。
ただし、最初から完全に透明にしてしまうと、センサーの位置が合っているか確認しづらくなります。
そこで、最初は確認しやすいように半透明にしておきます。

これで、センサーの位置を確認しながら調整できます。
動きや位置が確認できたら、最後に透明にします。

幽霊の効果を100にすると、スプライトは画面上で見えなくなります。
センサーとしての判定は残したまま、見た目だけを消すことができます。
6. 移動条件に「障害物がないこと」を追加する
最後に、キャットの移動処理を修正します。
これまでのプログラムでは、右向き矢印キーが押されたら右へ移動し、左向き矢印キーが押されたら左へ移動していました。
しかし、このままだとブロックがあっても進めてしまいます。
そこで、移動条件にセンサーの判定を追加します。
右へ移動する条件は、次のようにします。

「しょうとつR = 0」ということは、右側にブロックがないという意味です。
つまり、右向き矢印キーが押されていて、なおかつ右側に障害物がないときだけ、右へ進めるようにします。
左へ移動する条件も同じ考え方です。

「しょうとつL = 0」ということは、左側にブロックがないという意味です。これで、左側に障害物があるときは、左へ進めなくなります。

7. 今回のポイント
今回は、左右のセンサーを使って、キャットの横方向の衝突判定を作りました。
ポイントは、次の3つです。
キャットの左右にセンサーを置く
ブロックに触れているかを変数に記録する
移動条件に「障害物がないこと」を追加する
この仕組みを使うことで、キャットがブロックにめり込んだり、壁をすり抜けたりするのを防ぐことができます。
スクロールゲームでは、見えているキャラクター本体だけで判定するよりも、左右や足元にセンサーを置いて判定した方が、動きを作りやすくなることがあります。
8. スクロールシリーズのまとめ
今回で、スクロール処理の基本的な仕組みがひと通り完成しました。
これまでに作ってきた内容を振り返ると、次のようになります。
・背景や足場を動かして、キャラクターが移動しているように見せる
・ジャンプや天井への衝突を調整する
・クローンを使って、複数の足場を作る
・画面外のブロックを表示・非表示で管理する
・スプライトの幅を自動で取得する
・左右のセンサーで、壁にぶつかった判定を作る
スクロールゲームは、最初は少し複雑に感じるかもしれません。
しかし、ひとつひとつ分けて考えると、
移動
ジャンプ
クローン
表示・非表示
幅の取得
衝突判定というように、いくつかの仕組みの組み合わせで作られています。
今回の内容まで作ることができれば、横スクロールゲームの基本形としてかなり使いやすくなります。
ここからは、敵キャラクターを出したり、アイテムを配置したり、ステージを増やしたりすることで、よりゲームらしく発展させることができます。
ファイブボックス一分間スクラッチ講座 の記事はこちらでまとめてあります。
ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!