シューティングゲームを作りました

千里の道も一歩からというけれど,自分は1里くらいは進んでみるタイプです。なかなか千里まで至らない。序盤が一番面白いので,なんでもかじってみたくなるのですが,完成させるかどうかは別問題です。
そんなわけで,ブロック崩しを改良するのはまたの機会にしておいて,なにか新しいゲームを作ろう!と決めました。
 

アセットストアが役に立つ

モデリングできない人のためにUnityには標準でストアが付属していて,ユーザーがアップロードしたパーツを買うことができます。売上の75%が自分のものになるとは凄いなあ。手に職がある人は違う。数が少ないとはいえ無料でダウンロードできるものもあるのでつらつらと眺めていると,クラゲみたいな宇宙人みたいなメカっぽいものを見つけました。これを使って何かできないかな,と逆方向から考えてみます。フワフワと浮いている宇宙生物を倒すシューティングゲームとかどうだろうなあと思い至りました。
 

Nektonian Ver1.0完成!


Nektonian Ver1.0 | UnityGameUploader

そんな感じで完成したのがこちらです。開発期間はおおよそ一週間くらい。最初に作ったものよりもかなりゲームらしくなりました。
 

タイトルの由来

リリース直前になって「タイトルを考えなきゃ!」と思い至りました。クラゲは英語でゼリーフィッシュ。これはあんまり面白くない。マリンスノーみたいにふわふわと降ってくるイメージでどうにかならないだろうかとWikipediaを見ていると,ネクトンという言葉にたどり着きました。プランクトンなどの遊泳生物のことを指すらしいです。これはいいぞ!と宇宙人を表す-ianをくっつけて「ネクトニアン」に決めました。
 

ステージ構成

最初は地面がなかったので,普通の見下ろすスタイルだと見栄えが悪いので見上げ型にしました。見上げ型視点シューティングというのは世界初かもしれない(笑) 飛行機って空を見上げた時に飛んでいるイメージなんですよね。見下ろすんじゃなくて。宇宙人も浮遊しているし,オープニングで無数のネクトニアンが頭上を追い越していくのは,見上げるスタイルのほうが「侵略者!」という雰囲気が出ると考えたからです。
 
見上げ型だけと森や山があったほうがそれっぽいので結局地面を作ることに。Terrainはインスタンスで自動生成できるのか分からなかったので,プレハブにして縦に4枚並べました。これでも十分な広さがあるので,新しいステージを作るときも同じ方法でいいんじゃないかと思っています。
 
テレインに海とか川を作るのはどうやるんだろう。調べてみないと。森と山と海と街の4ステージあるとバリエーションが出て面白いかな。
 

ネクトニアン


Asset Store
敵の配置は全部自動生成です。150フレームに一回上空に生成させて,一定の高さまで降りてきます。その後は移動→チャージ→攻撃を繰り返します。
移動する向きはランダムで,自機から遠いときは近くに,近いときは遠くに動くように設定しました。これによってちょっと気味が悪いこちらをバカにするような動きができました。生成する場所もランダムで,さらにこちらに向くように回転しながら降りてくるため,前後左右の軸が個体によって異なり,動きにも個性が出るようになりました。これは怪我の功名です(笑)
 
敵の弾は自機に向かって誘導しながら飛んできます。これが結構難しくて,本気で当てようとすると絶対に逃げられないので困ります。横軸の動きは(弾の位置−自機の位置)で求めるのですが,これをあえて3倍にすることで,止まっているとむしろ当たらない,蛇行する気持ち悪い軌跡を作ることが出来ました。
弾の速度はちょっと早すぎるきらいがあるのですが,遅いと確実に当ててくるため,自機にバリアーを持たせることで妥協しました。
 
一種類だと味気ないので,編集して色違いを作成。本当はマテリアルにぶち込んでやればプレハブをたくさんつくらなくてもいいかもしれないのですが,とりあえず5種類用意しました。今後は他の種類の敵や違う攻撃方法も用意したいと思っています,が,それっぽいモデルがあるかどうかになっちゃうので未定。セットで安いものがあれば買ってしまうかもしれません。
 

自機


Asset Store
戦闘機もアセットストアでゲットしました。いずれストパン的な女の子に差し替えよう・・・。なので自機は無名。
マウス左クリックで弾を発射しますが,これはインスタンスではなくパーティクルで作成しました。なぜか最初のうちは「弾を発射させる」これだけのことができなくて苦闘していたのです。パーティクルにコリジョンを持たせて,ネクトニアン側にはOnParticleCollisionでダメージを受け取るように設定。
Unityはとにかくこのパーティクルの設定がキモというか,いじっていて一番面白いところです。演出で自分のイメージを表現するので,思い通りのができるととても楽しいです。今回は「発色弾」というフリーソフトで弾丸のアニメーションを作ってみました。

発射のSEをつけたのですが,連射していると音が消えてしまうことが判明。苦肉の策で「効果音が続いている間だけ弾を連射できる」と使用を変更。常に逆転の発想ですw
 
右クリックには最初,攻撃力は高いが発射頻度が低い高出力レーザーを積もうと考えていました。攻撃がパーティクルなので,レイティングを上げてやればダメージ量も上がります。ところが前述したように敵の攻撃をかわすのが難しいため,レーザーはお蔵入りに。これはいつか,別キャラクターを導入した時に使おうと思っています。
 
バリアは右クリックに割り当てていましたが,画面上で右クリックしてしまうとダイアログが出てしまうので,スペースバーで展開するようにしました。バリアは見た目だけで,自機と敵弾との衝突判定は通常どおりです。その代わり,スペースバーを押している間はOnCollisionが発生してもGameControllerへダメージを送らないようにすることで実装しました。
 
当初上ボタンでジャンプというか縦方向に移動させようと考えていました(バリアの代わり)が,ブースターにして加速できるようにしました。ジャンプはあとで実装してもいいかもしれません。坂本少佐みたいにバリアが使えない代わりにジャンプするキャラがいてもいいかも。
マウスはほとんど使う意味が無いので,下キーでバリア,上キーでブースター,スペースバーで発射にしてもいいかもしれません。ここはペンディング
 

画面構成


バリアは無敵すぎるので残量を画面に表示しないと,と思ったので,ついでにHPとスコアも表示しました。SendMessageで自機からGameControllerへ数字を送るようにしています。SendMessageが万能すぎてヤバい。これに気づかずに何時間もムダにしてしまいました。
ダメージを受けた時にもっとわかりやすくしたほうがいいと言われたので,残量によって表示の色をかえるようにしてみました。カラーバーとかメモリで表示してもいいかも。頑張ればなんとかなりそうだなあ。そうなるとレーザーとブースターの残量も表示したい。改造したいところはどんどん出てくるし,一度壁を乗り越えるとどんどん先にすすめるようになるところが面白いです。
 

効果音

BGMと効果音はすべて「魔王魂」から利用させていただきました。
全曲無料・フリー音楽素材/魔王魂
音が入ると急にゲームらしくなるし,音楽を作るのはモデリングを作る以上に無理ゲーなので助かります。
効果音を発生させるシステムにも悩みました。当初は自機にSoundSourceを持たせていたのですが,効果音同士がかぶると途中で音が消えてしまうことがわかりました。さんざん悩んだ結果,弾丸の音は弾丸を発生させるオブジェクトに発生させればいいことに気が付きました。オブジェクト指向とはこういうことか!と目からうろこです。
 
Unityは合体ロボです。「自機」というメインのゲームオブジェクトに「レーザー」というオブジェクトをくっつけて,そこに命令を出してパーティクルを発生させたり発射音をだしたりします。一つのオブジェクトに持たせる機能は最小限にしておいて,組み合わせによってさまざまな機能を実現させるようになっていました。自機のスクリプトに音楽を持たせて,Find(名前)で相手先をみつけて鳴らさせるといった具合です。こういう部分もやってみなければ理解できないところでした。
 

今後の改良点

触っていく度に面白くなるので,これはもう少し本腰を入れて改良しようと思っています。根幹部分はできあがっているので,あとは地味に手を加えていけばいいかな。改良したい点はこんな感じです。

ゲームオーバーとゲームクリアの処理

現在はかなり手抜きなので,もうちょっとちゃんとしたい。シーンを用意しないとなあ。

  1. 新ステージの追加

これも同様。今後の手直しはテレインとシーンの追加がメインになりそう。

エフェクト追加

Detonatorの存在をすっかりなすれていたので,ダメージ処理を特に派手にしたい。

敵キャラの追加

雑魚キャラも欲しい。小さいネクトニアンが前から飛んでくるだけでもいいかもしれない。頭を先頭に飛んできたらわからないんじゃないか。

ボス戦の追加

ボスは地面に生えている「ベントス」にしたい。これは底生生物。解放少女みたいに,ボス戦だけスクロール方向を変えてみるのもいいとおもったけど,ほとんど別ゲーになっちゃうから難しいかなあ。

新キャラクタの実装

女の子の絵はおいておいて,マテリアルを変えて3キャラに増やしてみたらどうだろう。ボタンを配置して,タイトル画面で選択したプレイヤーをインスタンスで生成するようにしなきゃならないのか。むむむ。

Android版の作成

究極の目標はGoogleプレイに登録すること。そのためにはもっとちゃんとゲームの形にして,誰に触ってもらっても恥ずかしくない形にしなければ。まだまだ道のりは遠い。目的地まであと999里!