Unityでゲームを作る その3

前回は、初の自作ビデオゲームを作るというところまで書いた。

当初の構想はというと
・ステージは3つ
・コインを5つ集めるとステージクリア
・残基がなくなるとゲームオバーでタイトルシーンに戻る
・残基(死ぬと減るやつ)が次のステージに移っても引き継がれる

ステージ作成

ステージを作ること自体はスムーズにできた。
見ての通り、シンプル極まりない作りだからだ。
f:id:kazhase:20210703080305p:plain

ただ、問題だったのは、床の縁にたつとプレイヤーが宙に浮き、操作できなくなる現象が起こることだ。
これは、全ての床のBox Colliderに摩擦係数が全く無いPhysic Materialを付けることで解消した。


動く床には多少手間取った。
動く床の上にプレイヤーが乗ると、なぜか動く床に追随せずに、落ちてしまうからだ。
これではせっかくゲームをしてくれた人に即クソゲー認定されてしまうので、解決が必要だ。

色々調べてみると、床に乗った時だけ、床の子オブジェクトにすることで解決した。
言っている自分でも、まだよくわかっていないのだが、簡単に言えば「詳しい人のサイトに書かれているスクリプトを引っ張ってきて、プレイヤーに張り付ける」ことで解消した。

でも、それだと回転する床に乗った時に、キャラクターが紙のように薄くなってしまう現象が起きた。
これは、回転の速度を落とし、回転する床に関しては、キャラクターが乗ってもプレイヤーを床の子オブジェクトにしないことで解決した。
何故かはわからないが、回転ではないタイプの移動をする床と違って、回転する床はそれほど滑る感じがしないので、それでOKとした。


あとはひたすら、自分でゲームをやりこんで、難しさを調整してみた。
5回やっても失敗するような箇所は、修正する感じにしたり、コインをすでに取った場所は、死んで初めに戻ったあとは通過しないで済むようにしたりした。

コインを集める仕組み作り

  • アイテム感を出すためにエフェクトを付ける
  • キャラクターが触れると消えて音がする
  • コインを取るとUI(画面の上にあるデータなどを表示するやつ)のコインの枚数が増える
  • 5枚集めるとステージクリアのシーンに移動する


コインはかなり厄介だ。上にかいてある全てをクリアしないと実装できない。

いや、嘘だ。

回転スクリプトとエフェクトと音はなくても大丈夫。でも無いと寂しい。
ついでに言うと、コインをゲットした後で、さらにエフェクト発動でゲットした感を出したかったけど、何度やってもうまくいかなかったので諦めた。

やることが多すぎるうえに、全て調べながらやっていかなければならない。
でも、やり切った。参考にしたサイトの全てはもう忘れたので書けないが、ありがとう。あなたたち先人のおかげで実装できた。
codegenius.org


ポイントとしては、回転+エフェクトについてはコイン側にスクリプトをつけて、コインを取ると消えるスクリプトはプレイヤー側につけた点。
後述する全シーンをまたいでデータを保持するオブジェクトに枚数が5枚以上になったら次のシーンに進むスクリプトを付けた。

残基がなくなるとゲームオバーでタイトルシーンに戻る

codegenius.org

上記のサイトなどを参考に作成。
なお、落ちると死ぬの判定は、ステージの下に大きなCube(四角い3Dオブジェクト)を配置し、透明にして、そこに触れるとステージの最初の位置に戻り、かつ、残基が減る。
残基の設定については、全てのシーンで共有して使えるオブジェクトを作って対応した。
dkrevel.com


サイトによってはゲームマネージャーやゲームスタートと名前を付けて扱うこのオブジェクト。
Staticにすることで静的にして、動かない値を扱えるようになる・・・。今振り返っても意味がわからないが、
これを導入することで、ゲームがゲームっぽくなった。

どこら辺がゲームっぽいかというと、
前のステージの残り残基が次のステージでも引き継がれるからだ。

ゲームを作り始める前の自分的には、そんなの当たり前だろ?と思っていたが、これが実は、結構導入するのが大変だったが、どうにかやり遂げた。

残る作業としては

  • BGMを作成して導入する
  • シーンまたぎのフェードイン、フェードアウトを作成
  • 難しさの調整
  • どこで、どうやって発表するか