レトロゲームプロジェクトの研究(8) 2Dレーシングゲーム編(2dRacing)
Learning Templates [Blueprint Power]
「しばらくやってなかったけど、レトロゲーム風プロジェクトの研究の続き。今日のテーマは2Dレーシングゲームのプロジェクト」
妹「レーシングゲームってもっとこう、立体的なものなんじゃないの? F-ZEROみたいな」
「あれは2Dでの表示はしてるけど、無理やり3Dっぽく見せてるパターン。こういう見下ろし型のパターンもある。十字キーで操作だけど、進行方向に合わせる形だから、上を向いてる時はいいけど、下向きに進む時は操作が全部逆になるので難しい」
妹「コースを回転させたらいいのでは? 向いてる方向が上になるようにして」
「そうなんだけど、マップごとの回転は昔のゲームでは難しかったというか、それが出来る環境なら3Dで作るというか。レトロゲームとしてはこういう感じになる」
「まずレースゲームの基本、コースを周回するための仕組み。これはゴールのところにあるTriggerBoxに接触することで判定される。3周回るとゴール」
妹「なんでトリガーが3箇所もあるの?」
「まずゴールだけにすると、発進して、バックして、また進んで……というので簡単に周回出来てしまう。中間地点にも置いて2個にしても、逆走でポイントに向かったり、中間地点まで行ってから逆走ということが考えられる。どっちにしろ周回してない」
妹「なんて悪いやつだ」
「でももしそんな裏技見つちゃったら、逆走するでしょ?」
妹「……スル」
「ということで最低限3箇所は必要ということになる。今回のコースは柵に囲まれてるからいいけど、ショートカット出来るコース仕様ならそれも考慮する必要がある」
「もう1つ重要なポイントがあって、CPUが運転する車の移動ルート。1人で走ってるとレースでもなんでもなくなるから、一緒に走ってくれる車が必要になる」
妹「事前に決めたルートを動かすようにすればいいのでは?」
「基本的にはそうなんだけど、きっちり厳密に予定通り進むのは難しい。プレイヤーとの接触もあるし、複数の車が全く同じ軌道を通るのも変。そこでコース上に目に見えないTargetPointを敷き詰めて、次のポイントを向くようにしてある。その状態で前進する。次のポイントにある程度近づいたら、その次のポイントを向かせる。それで段々と前に進んでいくようになってる」
妹「ある程度近づいたら、というのは? ポイントに接触では駄目なの?」
「あんまり厳密にすると、ちょっとズレただけで、曲がったり、バックしたり、ポイントごとに微調整をしてしまう。だからある程度広めの判定の方がスムーズに動く。それとポイントの配置は直線で進めるぐらいの間隔で配置してある。慣性があるからカーブしてるように見えるけど、基本的には直線の連続。実際の動きはエディタ上で実行中にイジェクトすれば見られる」
「問題はそのTargetPointを、配列化してる部分なんだけど、レベルブループリントの中で1個1個手作業でやってる様子。この方法だとミスが出るし、新しいコースを作る時に大変。レベル上のTargetPointを名前順で自動登録するような仕組みにした方がいいだろうと思う」