読者です 読者をやめる 読者になる 読者になる

遊べるゲームを作りたい

作りたいです。

6つめの振り返り ゲーム内容編1

f:id:hogemarunosuke:20170106001720p:plain

先日、「プロ生ちゃんシューティング」というシューティングゲームを公開しました。開発期間は約三ヶ月。無事に完成したのは、Unityという強力なツール、参考にさせていただいた技術ページ、アセット、そして何よりお借りした数多くの素材のおかげです。

このブログを始めた当初は、自分のペースでのんびり開発をしていればいいかなーと思っていました。とりあえず週イチのペースでのんびりと。そんな中、偶然目にした「マスコットアプリ文化祭」が面白そうだったので参加を決意(プロ生ちゃん素材が魅力的でしたし)、紆余曲折を経てとても貴重な経験となりました。自分のペースで開発していると、頭の中で広げすぎた風呂敷を畳みきれず、そのまま空中分解して爆発四散するという経験が多かったので、期限を決めて開発するということは、結果として良い効果になったのかもしれません。

Unityを使い始めた目的は、子供の頃からの夢だった「アクションゲーム」を作って公開するためです。学生時代にはWin32API(途中からNScripter)でギャルゲやらエロゲを作っていましたが、アクションゲームは作っても公開することはありませんでした。理由は単純で、自分に絵心がなく、華がなかったからです。言い換えると、プリミティブな矩形が飛び交うゲーム画面に面白味を感じなかったからです。まあ、アイディア次第だとは思うのですが・・・。

その後時代は移り、誰でも手軽に3Dゲームが作れる時代になりましたが、私はOpenGLとOpenALのダブル・マスイーマティックス・アタックに打ちのめされ、血を吐きながら作ったスター○ォックスもどきのゲームも中途半端で公開する事はありませんでした。

「かーっ!『絵心』と『数学的知識』があれば面白いゲームたくさん作れるのになーっ!かーっ!」とのたまっていた私にとって、それらを巧みに隠蔽してくれるUnityはまさに神器、、、になるかもしれません。

では。自分語りが終わったところで、「プロ生ちゃんシューティング」の工夫点と反省点をまとめておきます。備忘録もかねて。区切りはUnityで言うところのシーン単位で。

 ローディング画面

f:id:hogemarunosuke:20170106002923p:plain

Unityスプラッシュ直後にプロ生ちゃんに導かれつつNowLoading...と主張。裏では次に表示するタイトル画面シーンの非同期読み込みをしています。

なぜこんな画面を用意したかというと(なぜ直接タイトル画面を表示しないかというと)、Unity起動直後の数秒間、異様にfpsがガク下がりする現象にブチ当たって、苦肉の回避策として入れました。どうせfpsが下がるなら、タイトル画面じゃなくてローディング画面の方がいいよね、、、ということで。

タイトル画面

f:id:hogemarunosuke:20161128012305p:plain

我ながら何を血迷ったか、背景のピンク/白マスは、ひとつひとつが1つのオブジェクト(立方体)になっています。いやですね、最初は1列ごとに交互に上下させたりしたら動きが出て面白いんじゃないかな~とか思ったのですよ。実際試したらクッソ見づらい上にメッチャ重くなってやめたのですよ。ただ、見づらいのはともかく、重くなるのは予想外でした。おそらくWebGLの限界なのか、私のPCの性能のせいでしょう。決して私のコードの書き方の問題では(ry

プロ生ちゃん画像はUI化せず、スプライトをそのまま三次元上に配置しています。でないと、画像の後ろにパーティクルが実現できなかったので。ちなみに、最初は自前画像のスプライト化の方法すらわかりませんでした。画像付きで親切に教えてくれたとっしーありがとう。

で。ゲーム本編に進むためには、ここでいずれかのボタンを押す必要があります。「いずれかのボタン(Input.AnyKey())」にスマホからのタップ操作は含まれないようですね。いろいろ適当にキーイベントを割り当てましたけど、まじめにやるならKeyUpとKeyDownを慎重に吟味する必要がありそうです。じゃないと、ボタン押しっぱでプレイヤーの意図しない動きとかしそう。

詳しくは後述しますが、本来ここで表示するはずだったハイスコア表示を手抜きしました。次回昨では改善したいです。WebGLの場合、クッキーというか、ローカルストレージが使えるのかな。ここでも裏でゲーム本編シーンの非同期読み込みをしています。

ゲーム本編

※書くと長くなるので後日個別記事に

ゲームオーバー画面

f:id:hogemarunosuke:20170106003342p:plain

ここでもプロ生ちゃん。ありがとうございます。そして、コンティニューするごとにスコア1桁目が増えていきます。これであなたの恥ずかしい連コ回数が丸分かり・・・え、ゲーム本編の敵倒したら普通にスコアの1桁目が増えた? 気のせいですよ。ただのスコア倍率の調整ミスですよ。

コンティニューしたときのショットレベルをどうするのか、微妙に悩みました。某CAVEシューとかではMAXアイテムがふよふよ飛んでくるので、それに倣って一気にレベル最大にしようかと思いましたが、序盤にコンティニューした場合にバランス崩壊しちゃうじゃん・・・。ということで、最大到達レベルをセットすることにしました。無慈悲にレベル1でも良かったんですけどね。(制作者の)エゴだよそれは。

というわけで、2周目以降は無慈悲にコンティニュー不可にしました。(制作者の)ry。ただ、そこらへんの説明はきちんとあったほうが良かったかもしれません。突然コンティニュー文字が黒塗りにされてコンティニューできなくなって、「ははーん大往生のパクリだな」と感づいて、かつ納得できる人ばかりではないと思いますので。

ゲームオーバー画面でハイスコア登録(もしくはTwitter投稿)機能をつけるかどうか最後まで悩みました。悩んだ結果、つけませんでした。理由は、「ゲームオーバーというアンハッピーな状態を記録してどうする!クリア時にハッピーで記録すればええやん!」です。コンテスト登録後、自分で何度かテストプレイした挙げ句、やっぱりつければよかったと後悔しました。そもそも1ステージをひたすらループする仕様なのに、進行度(達成感)を把握する要素がスコアしかないっていうのに、それをゲームオーバー時に記録しないってどういうことだ、と。次はもっと先に進むぞ(スコアを稼ぐぞ)という意欲を失わせるじゃないか、と。・・・次回作では改善します。

リザルト画面

f:id:hogemarunosuke:20170106003422p:plain

またしてもプロ生ちゃん。マジ天使。せっかくのクリア後のリザルト画面、静止画一枚デデンッで終わりにしたくはありませんでした。なので無理矢理カメラを動かして、それっぽいパーティクルを飛ばして、画面に動きを出しました。少々野暮ったく感じるかもしれませんが、クリアする度にプロ生ちゃんの肌色成分が見れて私自身は幸せです。

冒頭のジングルBGMが再生終了後、ループBGMが再生されるようになっています。こんな些細な事で1日ぐらいハマりました。具体的には「if(jingleBgm.isPlaying == false)」という分岐が、WebGLでビルドするとどうもうまく動きませんでした。開発環境上では問題なく動くのに。結局はタイマー処理で逃げましたが、これに気づくまで、解像度の高い画像を表示しているからメモリ不足で死んでるんだ!とか、WebGLのバグだ!とか、ブラウザのバグだ!とか思考があっちこっちに拡散して、調査のために多くの時間を浪費しました。ぐぬぬ。

クリア時、ハイスコアを登録するのか、Twitterで投稿を促すのか、最後まで悩みました。悩んだ結果、Twitterにしました。理由は、「Twitterの方が拡散効果もあるしもしかしたらどこかのすごい人が見てくれるかもエッヘッヘ」なよこしまな理由です。コンテスト登録後、自分で何度かテストプレイした挙げ句、Twitter投稿クソ面倒くせえ・・・と痛感しました。いや、私が普段あまりSNS使わない人間だからかもしれませんが・・・。それでも上記のよこしまな理由が透けて見えてとっても見苦しい感じになりますし、制作者のオ○ニーここに極まれり、といった感じです。次回作では改善します。

 

すべてのキャプチャにプロ生ちゃんが・・・。素材をたくさんお借りしています。ありがとうございます。

pronama.azurewebsites.net