2011-08-21

[]Unityで一週間で全方位シューティングを作ってみた(2) Unityで一週間で全方位シューティングを作ってみた(2) - Nao_uの日記 を含むブックマーク はてなブックマーク - Unityで一週間で全方位シューティングを作ってみた(2) - Nao_uの日記 Unityで一週間で全方位シューティングを作ってみた(2) - Nao_uの日記 のブックマークコメント

今回の目標は「一週間以内に完成まで持っていく」ことだったので、最初に何を作るのかを決める段階で、ゲームの仕組みについて悩む部分の少なそうな全方位シューティングというジャンルを選んでみた。

とはいえ、既存にあるようなものをそのまま作っても面白味に欠けるので、今回は組み合わせるネタとして「過去の自分と協力」という要素を軸にゲームを組み立ていくことに決めた。

過去の自分と協力、と決めたときにます最初に思いついたのは「10機くらいの自機がよってたかって巨大なボスと戦う」みたいな絵面だったんだけど、プロトタイプを作ってみると10回も繰り返すのは明らかに冗長だったので、4回に減らすことにした。

また、作成途中にテストプレイしてもらった結果、ボス戦を作り込むよりも先に前半部分のザコ戦で再調整が必要な部分がたくさん出てきてしまったために、ボスの作成を断念して、スコアアタック形式のゲームとして組み立てていくことに。

構想の段階ではレーザー・拡散ショット・ボムなどのパワーアップアイテムを導入したり、死んだあとの前回の自機が死亡後に放っておくと強力な敵になるので倒して経験値にするか、回収してオプションにするかを選ぶ、などの要素も考えていたけど、実際作ってみるとシンプルな方がわかりやすくて良さそうだったので、パワーアップ要素に関しては点数でのレベルアップに集約することにしてみた。

f:id:Nao_u:20110821220952p:image

最初はUnityの作法がよくわかっていないためにいろいろと試行錯誤が必要ではあったけど、結果として描画部分やパーティクル・サウンドなどのシステムを自作しなくても済むために、ゲームの調整部分に集中して時間を使うことができたのでとても効率が良かった。

また、絵を気にしはじめるとかなり時間を持って行かれるため、今回はビジュアルに関しては最低限破綻してなければOK、くらいな気分で作っていたこともあって、デフォルトで入っていたトゥーンシェードのシェーダーを使うことで、とりあえず絵を出すだけであればほとんど手間がかからなかったのはとても助かった。

敵の出現時も丸影が距離に応じて勝手にアニメーションしてくれるおかげで単に上から降らせるだけでも出現予告のように機能してくれたり、物理計算のおかげで適当にランダムに散らして降らせるだけでもそれなりにゲームっぽく動いてくれたりなど、もともとシステムにある機能のおかげでいろいろと楽ができた部分はとても多かった。

結果として余計な手間を取られる部分が少なかったために、ゲームの手触り関しては、最初にイメージしていたものをほぼそのままに近い形で実現できたように思う。

ただ、どのような制御をどのオブジェクトに設定するのかに関しては、最初はどういった作法で作るべきかがよくわからず、設計の時点ではうまく整理できていなくて場当たり的にスクリプトを拡張していった結果、どこで何の制御を行っているのかがわかりにくい物になってしまった。

最終的には、普段C++などでゲームを作るときにシングルトン的な形で作るような各種の制御マネージャーをそのまま独立したオブジェクトとして配置するような形で、そこからプレハブを使ってプレイヤーや敵、エフェクト・SEなどを生み出して管理するようなやり方に収束していったのだけど、ある程度規模が大きくなってくると、この辺の設計をちゃんと考えておかないと、かなり混乱することになりそう。