壁をすり抜けちゃう!衝突判定を作る(爆速オンライン3Dゲームの作り方 #06)

壁をすり抜けちゃう!衝突判定を作る(爆速オンライン3Dゲームの作り方 #06)
ok-scratch
壁の衝突判定を作って移動を改善するよ。
スターター
プロジェクト
リミックス用プロジェクトへ
難しさ

任意)自分の作業中のスクラッチ作品URLを記録しておこう!再開するときに便利だよ。

LOADING...

※ この記録は今使ってるPCに保存されます。別のPCで作業するときは表示されません。

スクラッチプログラミングに挑戦している皆さん、どうも!スクラッチコーチです。

ゴンザレスからの挑戦状

そういえば壁はすりぬけちゃう状態だったね!これじゃあまともに歩き回れないぞ!

今回の目標「壁の衝突判定を作る」

壁をすり抜けちゃう!衝突判定を作る(爆速オンライン3Dゲームの作り方 #06)を語るok-scratch ok-scratch

今回の手順は、グリフパッチさんのオリジナルの動画だと最初に作り込むところなんだ。僕は先に3D化を急ぎたかったから後回しにした。その都合上、スクショがちょっと古い。具体的には背景が真っ黒で、3Dの壁は映ってない。ただまぁ実装に違いはないから、スクショの背景が真っ黒なのは気にしないで進めてほしい。

マップを見えるようにしておく

このあとの処理でいったん見えるようにしといたほうが便利なので修正しておくね。

幽霊をゼロにセットしよう。

壁の衝突判定を作る

スプライト「プレイヤー」を開く。

壁をすり抜けちゃう!衝突判定を作る(爆速オンライン3Dゲームの作り方 #06)を語るok-scratch ok-scratch

レベルと同じようにプレイヤーも見えるようにしておこう!プレイヤーの幽霊も0にしておいてね。

定義「移動する」 を作る

引数に距離をもたせよう。スクショだと忘れてるけど「_移動する」って感じで最初にアンダースコア付けておくの推奨。

◯歩動かすブロックに引数を割り当てる。

上向き矢印と下向き矢印の処理を、この定義に置き換えよう。

定義側に条件ブロックを追加する。

レベルに触れたら、っていう条件にして壁にあたったときの処理を作るよ。

シンプルに壁にあたったら進んだ分だけ下がるようにする。

CHECK! 壁を通り抜けなくなったかテストしよう!

楽勝だね。

壁の衝突判定の基本ができて、壁をすり抜けなくなった。

埋もれを回避する

壁衝突判定はうまくいった。でもちょっとした問題の種が同時にうまれてしまった。↓これをみてほしい。

いまって場合によっては↑こんな感じで埋もれが発生してしまうんだ。これは2Dならそこまで問題ではないけど、3Dだと顔だけ壁の中に入るような状況が生まれることもある。これは事前に回避しておきたい。

そこであらかじめ作っておいたヒットボックスというコスチュームの出番だ。

ヒットボックスを利用する

定義「_移動する」の最初で、コスチュームをヒットボックスに着替えよう。

回転方法を「回転しない」に変える。

処理の最後で、それぞれもとに戻すよ。

壁をすり抜けちゃう!衝突判定を作る(爆速オンライン3Dゲームの作り方 #06)を語るok-scratch ok-scratch

ヒットボックスのサイズは4 x 4で、プレイヤーのサイズは8 x 8だから、ヒットボックスに変えてから壁に衝突したか判定するほうが、より細かく壁との距離を測ることができる。結果的に埋もれなくなっているよ。もっともっと細かく衝突判定をする方法もあるけど、今はこれで十分だ。

CHECK! 壁に埋もれなくなったかテストする

おっけぃ!

まとめ

よし、これで移動の基本ができた。壁の衝突判定もできたし、埋もれも回避できた。

今回は以下のことができるようになったぞ。

  • 壁に触れたら後退することで、すりぬけなくできた
  • コスチュームを調整するだけでカンタンに埋もれ回避できた

よーしこれで動き回れるね!って、あれあれ、まだスクラッチキャットが進めずにいるぞ!次回もチェックしてみよう。

グリフパッチさんの動画を参考にしています

今回のチュートリアルは世界No.1スクラッチャーとして名高いグリフパッチさんの動画を参考にしているよ。ただし手順を一部変えているところもあるんだ。

ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!

スクラッチプログラミングのゲーム攻略

スクラッチプログラミングのゲーム

    • 厳選されたスクラッチ人気作品リストがレビュー付きで楽しめます
      趣味に関するスクラッチ作品例
      勉強になるスクラッチ作品