Unityでゲームを作る その3
前回は、初の自作ビデオゲームを作るというところまで書いた。
当初の構想はというと
・ステージは3つ
・コインを5つ集めるとステージクリア
・残基がなくなるとゲームオバーでタイトルシーンに戻る
・残基(死ぬと減るやつ)が次のステージに移っても引き継がれる
ステージ作成
ステージを作ること自体はスムーズにできた。
見ての通り、シンプル極まりない作りだからだ。
ただ、問題だったのは、床の縁にたつとプレイヤーが宙に浮き、操作できなくなる現象が起こることだ。
これは、全ての床のBox Colliderに摩擦係数が全く無いPhysic Materialを付けることで解消した。
動く床には多少手間取った。
動く床の上にプレイヤーが乗ると、なぜか動く床に追随せずに、落ちてしまうからだ。
これではせっかくゲームをしてくれた人に即クソゲー認定されてしまうので、解決が必要だ。
色々調べてみると、床に乗った時だけ、床の子オブジェクトにすることで解決した。
言っている自分でも、まだよくわかっていないのだが、簡単に言えば「詳しい人のサイトに書かれているスクリプトを引っ張ってきて、プレイヤーに張り付ける」ことで解消した。
でも、それだと回転する床に乗った時に、キャラクターが紙のように薄くなってしまう現象が起きた。
これは、回転の速度を落とし、回転する床に関しては、キャラクターが乗ってもプレイヤーを床の子オブジェクトにしないことで解決した。
何故かはわからないが、回転ではないタイプの移動をする床と違って、回転する床はそれほど滑る感じがしないので、それでOKとした。
あとはひたすら、自分でゲームをやりこんで、難しさを調整してみた。
5回やっても失敗するような箇所は、修正する感じにしたり、コインをすでに取った場所は、死んで初めに戻ったあとは通過しないで済むようにしたりした。
コインを集める仕組み作り
- コインに回転するスクリプトを付ける
- アイテム感を出すためにエフェクトを付ける
- キャラクターが触れると消えて音がする
- コインを取るとUI(画面の上にあるデータなどを表示するやつ)のコインの枚数が増える
- 5枚集めるとステージクリアのシーンに移動する
コインはかなり厄介だ。上にかいてある全てをクリアしないと実装できない。
いや、嘘だ。
回転スクリプトとエフェクトと音はなくても大丈夫。でも無いと寂しい。
ついでに言うと、コインをゲットした後で、さらにエフェクト発動でゲットした感を出したかったけど、何度やってもうまくいかなかったので諦めた。
やることが多すぎるうえに、全て調べながらやっていかなければならない。
でも、やり切った。参考にしたサイトの全てはもう忘れたので書けないが、ありがとう。あなたたち先人のおかげで実装できた。
codegenius.org
コインを取ると右上の枚数が増えます#Unity pic.twitter.com/PIFrkSeLSX
— 𝑲𝒂𝒛𝒉𝒂𝒔𝒆 (@kazhase_kazhase) July 2, 2021
ポイントとしては、回転+エフェクトについてはコイン側にスクリプトをつけて、コインを取ると消えるスクリプトはプレイヤー側につけた点。
後述する全シーンをまたいでデータを保持するオブジェクトに枚数が5枚以上になったら次のシーンに進むスクリプトを付けた。
残基がなくなるとゲームオバーでタイトルシーンに戻る
上記のサイトなどを参考に作成。
なお、落ちると死ぬの判定は、ステージの下に大きなCube(四角い3Dオブジェクト)を配置し、透明にして、そこに触れるとステージの最初の位置に戻り、かつ、残基が減る。
残基の設定については、全てのシーンで共有して使えるオブジェクトを作って対応した。
dkrevel.com
サイトによってはゲームマネージャーやゲームスタートと名前を付けて扱うこのオブジェクト。
Staticにすることで静的にして、動かない値を扱えるようになる・・・。今振り返っても意味がわからないが、
これを導入することで、ゲームがゲームっぽくなった。
どこら辺がゲームっぽいかというと、
前のステージの残り残基が次のステージでも引き継がれるからだ。
ゲームを作り始める前の自分的には、そんなの当たり前だろ?と思っていたが、これが実は、結構導入するのが大変だったが、どうにかやり遂げた。
今日できたこと
— 𝑲𝒂𝒛𝒉𝒂𝒔𝒆 (@kazhase_kazhase) June 19, 2021
・落ちると元の場所に戻る
・戻ったときにエフェクトが出る
・落ちると残基が減る
・残基分死ぬとゲームオーバーになる
・タイトルに戻ると残基が元に戻る※
※ができたときはガッツポーズでたわ
左上のハートが減らないのはご愛敬
考えすぎて頭が痛い・・・#Unity pic.twitter.com/egScFNnsNN
残る作業としては
- BGMを作成して導入する
- シーンまたぎのフェードイン、フェードアウトを作成
- 難しさの調整
- どこで、どうやって発表するか