PC ゲーム「Corona Attack」をリリースしました(その3)
どうも、AETA(イータ)です。
え?普段はめったにブログ投稿しないのになんで3連投なのかって?
別に暇じゃないですよ!ブログ書くのが忙しいんですよっと!
さて、前回のブログでご紹介した Zenrin 3D City Assets。これを適用することで一気にクオリティが上がったわけですが…
このころから本格的なゲーム作りを意識し始め、弾を撃ってやっつけるならってことで、コインをコロナウイルスに変更しました。
こういう時事ネタなアセットも探せばあるんですねー。
今回は TurboSquid という場所で配布されていたこちらをお借りました。
あと、コロナウイルスが吐き出す障害物に車を追加しました。これは前述の Zenrin 3D City Assets に含まれていたものです。
さらに効果音を見直すとともに Audio Source をプレーヤーに自身に配置し、BGM を鳴らすようにしました。やっぱり音って大事!
以前に Processing で Audio Visualizer を作ったとき、ダークなインスト曲を作成していたのですが、試しに合わせてみるとこれがばっちり♪
よくね?
さて、ここからはどんどん細部に入っていきます。
ゲームのオープニング画面と新たにオープニング曲を準備しました。たぎるぅ~!
タイトルのロゴはこちらで作成し、タイムアタック方式にして画面右上に残り時間を表示するようにしました。
あと、よーく見るとコロナウイルスの周りにちらちらしたものが見えるかと思います。
悪いものを撒き散らしている感じを出したくて Particle System とぼんやり光らせるための Halo を追加したのですが…パーティクルにテクスチャを適用させる方法が分からず、しばらくの間ずっと悩んでました。
ここで壁と言ってるのは、ステージになっている Otaku City の周辺部分ですね。
Zenrin さんが配っておられる街の 3D データは当然有限な範囲なので、そこを超えると無限に地下へ落っこちてしまうのです。なので周囲の四辺を見えない壁で覆って外に出られないようにする必要がありました。
クリア画面の追加と曲の準備はさくさくっと。ボツ曲のストックがたくさんあって助かりました♪
さらに細部の改良を続けます。
この頃は完全に毎日寝不足でしたw
でも楽しかったので後悔はしていないッ!
マスクは前回同様 TurboSquid のこちらからダウンロードさせていただきました。
やたらめったらに弾を撃ってコロナウイルスを撃破出来るだけだと面白くないので、感染予防となるマスクを障害物に紛れさせ、マスクを撃ってしまうとペナルティ、マスクをキャッチするとコロナウイルスとの接触によるダメージを回避できたり、スコアでご褒美が得られるようにしました。
あと、マスクを見やすくするために球状のカプセルを作ってテクスチャを貼りました。
この辺りからいっちょ前にゲームバランスなどというものを意識するように。
ステージ設定は Zenrin 3D City Assets のアセット自体の位置や向きを Vector3 の配列データに入れておき、ステージ切り替わり時に読み出して反映させることで実現しました。
こうすることで自分やコロナウイルスの動きはそのまま変えずに済むので、今後別のアセットでステージを作成する際も楽になるなと。
あと、ステージクリア時の点数差に幅を持たせるため、加点とペナルティを追加。
ここから再び改良。
ハイスコアなどのゲームデータを保存する方法がなかなか分からなかったのですが、ちゃんと PlayerPrefs というものが用意されてるんですね!
ただし、これ Windows だとレジストリに保存されるらしく、初期化したり消すときに面倒だなぁと思ってたら…ちゃんと関数で用意されてるんですね!さっすがぁ!
で、汎用のジョイスティックを持ったゲームパッドなど、操作したときに飛んでくるメッセージが違うのでどう対応させたらよいか頭を悩ませていたら…
Project Settings の中に Input の項目がありまして、ここに自分が考えた機能の名前と操作するキーボードやマウス、ジョイスティックやゲームパッドのボタンを書いておくと、スクリプト側では機能名を参照し、変化した情報だけを受け取れる仕組みがあることに気が付きました!
つまり、プログラム上ではキーボードかゲームパッドかは気にせず、例えば「Up が来たら上方向を向く」っていう処理だけを書けばよいのです。
ん~ほんとようできてるわ!
しかもこれ、ゲーム起動時にカスタマイズするための画面が表示されて、自分の好みや手持ちのコントローラーに合わせて、直接操作することで操作方法を変更出来るようになってるんです!
う~んあんたほんとようできてるわ!(本日二度目)
こういうのって普通は自前で作るしか無いんですが…さすが Unity!
で、この情報ってゲームを再起動してもちゃんと覚えてくれてるんですよ。
どこに覚えてるかって言うと、さっきの PlayerPrefs なんですねー。これが判明するまで散々探しても見つからず、初期化出来ずに随分悩みました。
「Reset」って書いてあるところを間違って押して Input の設定を全て失ったりとかw
ちなみに ENTER キーの操作を受け付ける場合は "enter" ではなく "return" です。アタクシのように空振りの待ちぼうけで悲しい思いをします。
そして謎現象に悩まされる。
これ、正式リリースの直前まで解決出来なかったのですが、コロナウイルスの軌跡を表示させる Trail Renderer にこういう機能がありまして…
Autodestruct:有効の場合、ゲームオブジェクトが Time で設定した秒数待機になると破棄されます。
これをうっかり有効にしていたために、コロナウイルスが停止状態で軌跡が消えるタイミングになると、コロナウイルスが破棄されてしまうという状態になっていたのでした。とほほ。
撃ったあとの弾を自動的に消したりするのに使えそうですよね(今回は衝突判定で自前で消したけど)。
この辺りになってくると、かなりゲームとしての体裁が整ってきました!
そして、ここで悲劇が訪れます。
止まらない鼻水と微熱…まさか?!
果たしてゲームは無事に完成するのか?!
続く。(多分)
Comments