ぱぴブログ

さんたろのブログ

ゲーム開発が好きな人のひとりごと

自作ゲーム「UNDERTANK」制作記

はじめに

みなさんこんにちは。
リングフィットの誘惑と日々戦うさんたろーです。

今年の7月あたりからボチボチと作っていた自作ゲームがついに完成しました。

こちらからDLできます(Windowsでプレイできます)↓

www.freem.ne.jp

とても汚いですがスクリプトなどGitHubに載せてます↓

github.com

制作期間は4か月ほど(その間に他のこともたくさんしていましたが)。
ゲームタイトルは「UNDERTANK」。
...はい。某作品からです(タイトルを考えたのは完成2日前です)。

この記事はゲーム制作を通して感じたことなどを、ダラダラと書いていくつもりです。

きっかけ

ゲーム制作自体はプログラミングを学び始めたときから、してみたいと思っていました(興味は高校の頃から)。 ただ、C#やUnityの勉強をしっかりしてから始めよう、と思っていたんですよねえ...。 C#やUnityの本や記事を読んだりしていたわけですが、全然頭に入らなく(笑)

そんなときに以下のサイトを見つけて、実際に作ってみたんですよ↓

https://codegenius.org/open/courses/24/sections/104

いやーそしたら楽しいし、いくら本読んでもわからなかった部分が頭に入ってくる、と。 これが「実際に制作作業に入る」きっかけですかねえ。

戦車ゲームにした理由もこのサイトを参考にしたから、というのもあります。
最初はダクソのような手に汗握るアクションゲーム、不思議のダンジョンのようなローグライクゲームも作りたいと考えていました。

ただ、Unityすら初めて触るというのにあんまり凝ったものは作れないだろう、という理由で却下。
まあ、私がアニメーションやUI、バランス調整に興味がなかった、というのもありますが...。

その点この戦車ゲームすごいんですよぉ。ステージも戦車も弾も設置物も全てUnity上で作れるシンプルなもの。
砲台の回転も移動もスクリプトの制御だけでできる。

つまり、自分の興味のない部分にあまり時間をかけなくて済みそうな作品だと考えて、戦車ゲームにしたんですねぇ。

制作を通しての反省、感じたこと

といっても初めてだらけのゲーム制作なので、そんな大それたことは書いてないです。

共同制作?

このゲーム、音楽以外は全て私ひとりで制作したのですが、
実は途中で知り合い数人に敵のAIのプログラムをお願いしたんです。
自分ひとりでは様々な敵のAIを作るのは困難。
数人に頼めばいろんな敵が作れるのではないか、と...。

作業環境を用意して、ゲームの仕様をドキュメント化し....。 しかし、知り合いの多くがUnityを触ったことがなく、用意されているプログラムも不完全。
Unityらしいスクリプトの書き方の記事も、このときに書きました。

qiita.com

...結局、自分で作りました。

結論。
共同作業を試みるときは、コストをしっかり把握し本当に必要か考えましょう。
一番いいのはイラストやサウンドモデリングなどあまり干渉がない分け方をすることですね...ハイ。

可変性is大事

今回作ったゲーム、ステージ21プレイヤー戦車27敵戦車約50ほど作りました。
それなりに大きなプロジェクトになってくると、ひとつの変更だけでも大変になりがち。

実際の例を示すと、20個あるミッションにあるオブジェクトの引数を増やしました。
その引数はミッションシーン上にあるオブジェクト。
20回ドラッグ&ドロップえんやこらえんやこら....
やってて悲しくなってきます。

また、「あっちの引数変えたらこっちの引数も変えないとだめだよ」みたいなものも辛いです。
ときどき忘れて「あれ?なんか反映されないぞ」ってなりますし。

匿名、隠蔽、スクリプト化することで作業をできるだけ減らすようにしないとですね。

逆に成功したな、と感じたのは戦車の各パラメータですかね。

引数ひとつで速度や保持スキルを変えれるようにしたのは楽でした。
敵のAIも、弾よけAI、移動AI、バリアAIなどスクリプトをアタッチして、パラメータを変えるだけで様々な敵をつくることを可能にしました。

やっぱりゲーム制作は大変

ゲーム制作の全ての作業を楽しいと感じる人は少ないと思います。
私なんてプログラミング以外はほとんど面倒に感じるんですよね.。
おかげで今回のゲームのUIもかなり簡素です。

しかしですね、それでも最低限の機能・見栄えはほしいわけですよ。

つまり自分のやりたくない作業が多いんですねー。

ゲームは作りたい。
でも、面倒なだけの作業はできるだけしたくない。
みたいなジレンマがわりとずっとありました。

私は知見を得たいという気持ちもありましたが、
ゲームを自分で作ってみたいという気持ちも大きかったです。
だから、完成まであきらめずに作れたのかもな、と感じています。

知見だけ集めるなら作品として完成させる前に終わるほうが効率はいいかもしれません。

自分以外の誰かにプレイしてもらおう

私はこのゲームのプロトタイプを学校祭で展示して、多くの子供たちや友人に遊んでもらいました。
そうするとですね、デバッグ作業では見えていなかった光景がたくさんあるんですよ。

サバイバルモードではひとつのステージ内で敵が一定時間ごとに出現します。
出現ポイントは5か所あるんですが、ステージの構成上敵の移動量は少ないです。
そこで友人K、真ん中に居座り敵の方向にビームを発射、発射、発射。
やー見事に敵は当たっていく。避ける時間はあるのに。
友人Kは笑うが私は苦笑い。

結局出現ポイントの周りに多かった壁を減らすことで解決しました。

学校祭ではひとりの男の子が何時間も夢中でやってくれました。
彼はワープをうまく使って、格好よく倒したがっていました。
正直実装が簡単という理由でつくったワープスキルだったのですが、
なるほど、魅せプにもってこいだな、と。
また、セットとなる2つ目のワープ設置が1つ目と同じインターバルかかるという仕様が使いづらいという指摘。
なるほど。たしかに。
そして彼はミッションとサバイバル2つのモードの上位3位を埋め尽くして満足して帰っていきました。
なるほど。ランキング要素が人を熱くさせる。

制作している側だと盲目になりがちな部分や、実際にプレイしている側がどう感じるかをしっかり見ることは大事だと感じました。

単純に反省

いろいろあったにせよ、それにしても時間がかかりすぎた。
怠けなければあと半月は早められた。
プログラムも修正したほうがいい箇所だらけ。
これから何の知見も得ずにまた同じようなゲームを作るのは確実にダメだろう。
次のステップにいくための準備が必要だと感じました。

これから

やっぱりゲーム制作って楽しいな、というのが今回の活動の一番の収穫かもしれないです。
エンターテイナーはいいなって強く思いました。
あんなに夢中になってプレイしてくれる子どもたちを見ると、最高のやりがいを感じます。

別にゲーム制作でなくとも、例えば絵師さんのイラストの配信の手助けとか、何かかしらでエンターテインメント性を求める会社に就職したいと思いました。

今年いっぱいは競技プログラミングを通してC++アルゴリズムを学ぶつもりです。
来年からはオンラインゲームつくれたらいいなー、と思っています。

精進あるのみです。