はじめに
4/29~5/29の1ヶ月間に部内で行われたチームでの共同開発競争「Random Marathon」において、タワーディフェンスゲームを制作しました。
ペンギン達が自分だけの船を操り最強を目指すといった世界観のゲームです。ワン〇ースみたいですね。
また、ゲームシステムはすずぬーと氏の激突要塞をリスペクトしたものです。
ふじいくん、ねぎ、みみみさん、あみお、ゆゆの5人で制作しました!
ふじいくん
戦闘のプログラミングを担当してました,ふじいくんです.
みなさん,ペンギン大海戦遊んでくれましたか?ちゃんと動きましたか?面白かったですか?それならいいのですけれど.
私は戦闘部分が一番ゲームの面白さを左右するところだと思っていましたから,頑張って作らないとなあ,とはりきって制作していました.だって,どんだけ絵が良くて、船の編成を自由に作れるようになって、オンラインで遊べるようになっても,戦闘が面白くなければ意味ないですから.結果としては,十分遊べるものになったかなあと,安心しています.
さて,ここでは私がいかにして戦闘を面白くしようかと工夫したところについて話そうかなと思います.
まずペンギンたちがいろいろな武器(?)を投げたり,撃ったりしていましたが,その角度がある程度ばらつきがあるようにしました.これは同じ敵と戦っても同じ結果にならないようにするためでもあり,動きに変化があると見ていて面白いと考えたからです.ブーメランがクセもので,ばらつきをつけるのに苦労しました.
あと,船の揺れ加減,波の動きもがんばりました.ちょっと話がそれますが,リサジュー図形って知ってますか?私の高校では,数学の教科書に載ってました.なんかsinとcosをこねくり回すと出てくる図形です.このリサジュー図形を船の揺れに使いました.これを思いつくのに1,2日かかって,なんや,これでいけるやん!ぴえん.って感じでした.
あとは,ゲームのバランス調整ですかね.実は,このゲームの公開前は氷ペンギン最強で,これ積んどけば何とかなってました(笑).問題は,氷には貫通属性があるのに当たり判定がでかいことが原因だったので,時間がたつと氷が溶ける(大きさが小さくなる)ことで解決しました.
これで,みなさんに楽しんでもらえたならうれしい限りです.
ちょっとUnityの話
部員向けに戦闘でのクラス図を残しておきます.
ObjectPool,PoolObjectというものを使って,使用したプレハブインスタンスを保管し,再利用する形をとりました.が何だか依存関係が複雑になり正直自分でもよくわからない感じになりました.ちょっと反省です.できるだけ継承を使わず委譲を使いました.あとUnityEventやUniRxなどのコールバック関数を用いて,UnitやWeaponの関数の内容を他のクラスが決めるようにしました.そこに関しては結構いい感じになったと思います.
ねぎ
主に編成関連を担当していたねぎです。
このゲームは対戦中の操作ができず、編成の巧拙によって戦局が決まる仕様になっています。そのため編集システムはゲームの面白さに割と直結しており、完成までかなりビビッていました。
編成画面の作成に際して、とにかくプレイヤーがストレスを感じずに操作できることを重視しました。チュートリアル画面がなくとも(あるいは最低限であっても)少し触れば操作方法がわかり、かつプレイ中にイライラさせないことって結構大事な要素だと思います。画面の構成や配置可能判定、再配置などは特に気を付け、なるべく画面がうるさくなりすぎないようにしたつもりです。
また最終的にブロックは船とつながっていれば設置でき、ペンギンは地面orブロックの上にいれば配置できるという制約にしましたが、ここも世界観を崩さない程度に編成の自由度を確保するためのバランスを少し考えました。設置可能判定部分は改良を重ねていくうちに複雑怪奇なクソコードができあがってしまったので最初からバシッとしようが決められるようになりたいですね。無理ですね。
実装の際に一番苦労したのは1×1マス以外の大型ユニットの配置です。1マスブロックと同じ処理でズレなく配置可能なようにふじいくんと各ユニットデータの仕様について何度も話し合いました。具体的にはオフセットの座標を追加したのですが、画面サイズとうまく合わせて調整するのは割と大変でした。
遊んでいただいた方がスムーズに編成できていたのなら幸いです。余裕があればランダム編成機能とかもつけてみたかったです。
みみみ
Unityチュートリアル挫折の身で肩身が狭い中、オンライン実装あたりを担当しました。ニフクラと開発をしていて感じたことについて簡単にまとめます。
ニフクラについて
オンライン機能を実装するためにBaaS(Backend as a Service)であるニフクラ(NCMB)を使いました。基本的なバックエンドの処理をほぼほぼ全部やってくれます。便利。 今回ではオンライン上にステージデータを保存するといった実装しか取り入れなかったのですが、他にもログイン機能や、ファイル共有、プッシュ通知などの実装がめちゃくちゃ簡単に行えます。現部員は次にゲームを作る時にニフクラを使ってオンライン機能を付けてみてください...!
感想
Unityの設計が全く分からず動けばいいやの精神で開発をしていたため技術的負債が多く見受けられます。精進します...加えて後輩が強かったです。精進しなくては... 何はともあれ一緒にゲームを制作してくれた方々、ゲームを遊んでくれた人、ありがとうござました...!
あみお
イラストやアニメーションなどを担当してました. 正直,誰でもできることをやってシステム班の負担を減らしたいなあというのが一番の目的でした. イラストは,普段からよく描いていたので難しいわけではなかったのですが,画像サイズや規格などをシステム班とすり合わせながら素材を用意するのが大変でした. 普段のように適当に描くわけではなく,参考画像を用意しながらとにかく早く素材を用意できるように気をつけました.
アニメーションは個人的にはかなり難しかったです. ペンギンたちの動きをよく見ている人は少ないと思いますが,タメの動きをつけたり,重心の移動を考えたりなど,アニメーション特有の難しさがありました. sprite studioというソフトを使用したのですが,UnityにはAnima2Dというめちゃくちゃ便利なアセットがあるらしく,それを使えばよかったなあと終わってからちょっと思いました.
一番急いで仕上げたのが,UIなどのデザイン面です. 最終発表の何日か前に投げられたタスクだったので(もちろん覚悟はしてたのですが)めちゃくちゃ焦りました. 見やすいデザインやテーマに沿ったデザインを考える能力に乏しく,勉強しなきゃな,と今後の課題が見つかったので良かったです. 楽しんでいただけたら幸いです!
ゆゆ
SEの選別とβテスターをしていました。納期ガバガバで動いてましたが皆さんがフォローしてくれたので何とか働けました。 SEはフリー素材のを持ってきたんですけど世界観的に厳しい音(リアルな銃声)は避けて全く関係なさそうな音から選別していました。 楽しんでいただけたら嬉しいです!
おわりに
基本の仕様決めにかなり時間をかけたせいで、締め切り直前はかなりの突貫工事になってしまいました……。阿鼻叫喚の中なんとか期間内に完成したことは良かったのですが、今後はできるだけ気を付けたいです。
私達もあまり共同開発をしたことはなかったのですが、結果的にそれぞれの強みをうまく合わせることができたのではないかと考えています。共同開発特有の問題(Gitのコンフリクトなど)も連携することで対処できたので貴重な経験になりました。
多くの方に遊んでいただけて本当に嬉しいです。
まだ遊んでいない方も、6月中は以下のリンクから遊べます。オンライン対戦ではかなり強い編成がたくさんアップロードされているのでぜひ挑戦してみてください。
ここまで見ていただき、ありがとうございました!
https://virtual.ch-random.net/