当記事はグリフパッチさんの動画を参考に、日本人向けに分かりやすく手直ししたものです。和訳解説は動画作者のグリフパッチさんご本人から許可をいただいて掲載しております。チャンネルはYOUTUBE ( by griffpatch )からどうぞ。
- ① 2Dマップを動き回れるようにしよう!
- ② さっそく3D化しちゃうぞ!
- ③ 壁にスキマがあって丸見えじゃん!敵にバレちゃう!
- ④ 部屋が不自然に明るすぎる!陰影を付けよう!
- ⑤ ズームすると空間がゆがんでグニャグニャになっちゃう!
- ⑥ 壁の衝突判定の基本を作ろう(いまここ)
- ⑦ 壁に触れてると進めない!?移動を改善しよう
- ⑧ ついに敵が現れた!距離感の計算ってどうやる!?
- ⑨ 奥行きを実装して真の三次元空間を創る
- ⑩ エンティティに陰影をつける
- ⑪ 敵がプレイヤーに襲いかかる
ゴンザレスからゲームクリエイターへの挑戦状
そういえば壁はすりぬけちゃう状態だったね!これじゃあまともに歩き回れないぞ!
今回の目標「壁の衝突判定を作る」
今回の手順は、グリフパッチさんのオリジナルの動画だと最初に作り込むところなんだ。僕は先に3D化を急ぎたかったから後回しにした。その都合上、スクショがちょっと古い。具体的には背景が真っ黒で、3Dの壁は映ってない。ただまぁ実装に違いはないから、スクショの背景が真っ黒なのは気にしないで進めてほしい。
マップを見えるようにしておく
このあとの処理でいったん見えるようにしといたほうが便利なので修正しておくね。
幽霊をゼロにセットしよう。
壁の衝突判定を作る
スプライト「プレイヤー」を開く。
レベルと同じようにプレイヤーも見えるようにしておこう!プレイヤーの幽霊も0にしておいてね。
定義「移動する」 を作る
引数に距離をもたせよう。スクショだと忘れてるけど「_移動する」って感じで最初にアンダースコア付けておくの推奨。
◯歩動かすブロックに引数を割り当てる。
上向き矢印と下向き矢印の処理を、この定義に置き換えよう。
定義側に条件ブロックを追加する。
レベルに触れたら、っていう条件にして壁にあたったときの処理を作るよ。
シンプルに壁にあたったら進んだ分だけ下がるようにする。
CHECK! 壁を通り抜けなくなったかテストしよう!
楽勝だね。
壁の衝突判定の基本ができて、壁をすり抜けなくなった。
埋もれを回避する
壁衝突判定はうまくいった。でもちょっとした問題の種が同時にうまれてしまった。↓これをみてほしい。
いまって場合によっては↑こんな感じで埋もれが発生してしまうんだ。これは2Dならそこまで問題ではないけど、3Dだと顔だけ壁の中に入るような状況が生まれることもある。これは事前に回避しておきたい。
そこであらかじめ作っておいたヒットボックスというコスチュームの出番だ。
ヒットボックスを利用する
定義「_移動する」の最初で、コスチュームをヒットボックスに着替えよう。
回転方法を「回転しない」に変える。
処理の最後で、それぞれもとに戻すよ。
ヒットボックスのサイズは4 x 4で、プレイヤーのサイズは8 x 8だから、ヒットボックスに変えてから壁に衝突したか判定するほうが、より細かく壁との距離を測ることができる。結果的に埋もれなくなっているよ。もっともっと細かく衝突判定をする方法もあるけど、今はこれで十分だ。
CHECK! 壁に埋もれなくなったかテストする
おっけぃ!
まとめ
よし、これで移動の基本ができた。壁の衝突判定もできたし、埋もれも回避できた。
今回は以下のことができるようになったぞ。
- 壁に触れたら後退することで、すりぬけなくできた
- コスチュームを調整するだけでカンタンに埋もれ回避できた
よーしこれで動き回れるね!って、あれあれ、まだスクラッチキャットが進めずにいるぞ!次回もチェックしてみよう。
グリフパッチさんの動画を参考にしています
今回のチュートリアルは世界No.1スクラッチャーとして名高いグリフパッチさんの動画を参考にしているよ。ただし手順を一部変えているところもあるんだ。
- ① 2Dマップを動き回れるようにしよう!
- ② さっそく3D化しちゃうぞ!
- ③ 壁にスキマがあって丸見えじゃん!敵にバレちゃう!
- ④ 部屋が不自然に明るすぎる!陰影を付けよう!
- ⑤ ズームすると空間がゆがんでグニャグニャになっちゃう!
- ⑥ 壁の衝突判定の基本を作ろう(いまここ)
- ⑦ 壁に触れてると進めない!?移動を改善しよう
- ⑧ ついに敵が現れた!距離感の計算ってどうやる!?
- ⑨ 奥行きを実装して真の三次元空間を創る
- ⑩ エンティティに陰影をつける
- ⑪ 敵がプレイヤーに襲いかかる