はじめに
この記事は、 夏のブログリレー6日目の記事です。
筆者は日本語が第二言語なので、不適切な日本語があったら申し訳ございません。
本記事は自分の初めてゲームを作った経験と感想について話していきます。
作ったゲーム
AIの少女を操り、敵を倒し、知能を育っていくゲームを作りました。ギミックはNoitaというゲームのワンドカスタマイズシステムのように自分の攻撃を作れるところです。
違いは、こっちはより具体であり、最適化するのにモジュールやトレース(配線)の配置を考えなければならないというパズル要素があります。
(Noitaではスペルラッピングなどもありますが)
もう一つの違いは、このゲームの敵も同じシステムで作られた攻撃を使っているところです。
きっかけ
まず、軽く自己紹介しましょう。はじめまして、Au2942です。東工大で2023年の3Qから1年間留学させていただいたタイからの交換留学生です。
所属している日本語専攻では、3年生になると日本で留学することが一般です。ゲーム開発に興味が持っていますので、留学先は協定校にあるゲーム開発サークルを参考に決めました。
実は、何度もゲームを作ろうとしたことがありますが、完成まで熱意を維持できることが一度もありません。なので、留学でやりたいことの一つはゲームを完成させることです。
なぜサークルでやろうと思ったかというと、自分の努力を見てくれる人が確実にいた方が熱意を維持しやすいからです。(承認欲求?)
もちろん、家族や友達などに作品を見てもらってもいいですが、ゲーム開発に興味のない人にその努力が伝わりにくいと思います。
しかし、日本での生活が忙しくて、いつの間にか最後の一か月になりました。
しかも、夏休みで開催されるワンマンソンには留学期間の都合で参加できず、悔しい気持ちでいっぱいでした。
そこで、文系学生のくせに東工大にわざわざ来た意味がなくなるかもしれないので、勉強しながらワンマンのワンマンソンを始めました。(長くてすみません)
制作
(やっと)本題に入ります。
6/30
ブレインストーミング!
ハッカソンで紹介されたfigmaを使ってブレインストーミングをした。
テーマは自分とこの留学に共通するものにしたいと思い、「タイ」と「titech」をかけて「タイテック」とした。(ちなみに、名前がまだ決まっていないので、今のところはtaitechのままと呼んでいます)
「タイ」は「体」で、プレイヤーは体のパーツから攻撃を放つ。「テック」はそのままの意味で、プレイヤーも敵もAIやロボットなどで、基板やチップを使って攻撃を作り出す。
今回は時間が制限されているため、ゲームエンジンはチュートリアルが最も多いUnityにした。
そして優先順位を決めた。一か月しかなかったため、ストーリーはいったん置いておいて、ギミックに集中することにした。
参考になるものが多いシューティング要素は優先度を低く、参考になるものが少ない基板上のモジュールを接続するシステムと攻撃をカスタマイズするシステムを最優先にした。
7/1~7/9
基板の実装
基板のデータは2D配列にし、ビジュアルはUnityのgridとtilemapを使った。
基板に続き、その上のモジュールと配線を置いたり消したりする機能を実装した。
これは経営シミュレーションによくあるグリッドビルディングシステムに似ていることに気づいてそいうチュートリアルを参考にした。
実は、7/4の時点でほとんどの機能は実装されていたが、コードの構成が機能の追加や変更が難しく、何度も書き直していた。
7/10~7/26
メインギミックの実装
まず、弾丸(発射体)とその「チップ」を作った。撃つときにモジュールに入ったチップの弾丸を放つ。
そして、ダミーモディファイアを実装した。ただ接続しているモジュールの弾丸が早くなるモディファイアであった。
7/13
弾丸の数値を変更するだけのモディファイアであれば、複数のタイプがあってもかけるのは簡単であった。しかし、弾道や跳ねる効果など、より複雑なもモディファイアとなると新たな戦略が必要になった。
そこで、初めてchatgptに相談し、ストラテジーパターンについて教えてもらい、デザインパターンの存在を知るようになった。
7/14
次の課題は弾丸モジュールが接続されたときにどうするべきかを考えることであった。
接続の順で弾丸を放つのが最も直観的だと思った。しかし、こうすれば、スペルを発動順番が一つの順しかないNoitaと違い、複数の分岐パスがあるのかもしれない。
実装にはグラフ理論やアルゴリズムの知識が必要なようだが、そのような知識は皆無であった。
GPT様の助けを借りて、なんとか4日で無事に実装することができた。
7/19
基板の編集機能を改善し、インベントリとチップの入れ替えを実装した。
ほとんどの時間をUIとUXに費やした
7/26
複数の基板を同時に表せるために、ビジュライザーコードを書き直した。
7/27~8/3
基本なシューターゲーム機能の実装
ここからはありふれた機能の話ばかりなので、あまり詳しく書かない。
キャラクターを追加した。カーソルで腕が動く。
7/29~8/1
期末リポートはやっと終わった。ここからは進捗が急速に進む時期であった。
まず、キャラクターの数値やアニメションやステートマシンなどを実装し、反転するときに腕、脚、髪のリボンを正しくした。(歩くアニメションが大変だった)
8/1~8/3
実はこの日が最後日つもりだったので、披露のためにシンプルな敵を実装した。
ちなみに、各ゲージのUIはlokosoloさんのsliced filled imageというもの使っています。
しかし、この段階の実装が楽しすぎてやめられなくなり、36時間以上も眠らず、ずっと作業していた。(BGMの作曲家は@Metch722さんです)
8/4~
コンテンツの追加とバグの修正
基本はできたので、ここからはゲーム性を高めていく。
今後の予定
- 素材
- 今は一か月の制限に間に合うため、以前描いたものを使っていますが、よりいいものを描いて使いたいと思っている
- プレーヤーのキャラクターはNeurosamaのデザインを借りているんですが、実はオリジナルキャラクターにしたい
- ストーリー
- 世界観は、人間がいなくなったような世界が舞台で、すべての機械やAIを管理するスーパーAIは、感情などの人間的なものを理解しようとすることを禁じている
- 主人公は人間に興味を持つAIの少女で、人間消失の真実を追い求め、感情を理解しようとする
文章力には自信がないので、曖昧にしたいと思います。
- 敵
- 種類を増やす
- ボスや特化敵(ヒーラー、バッファーなど)
- タイの要素
- 今のところはボスをタイの伝説の生物とかにしたいと思う(タイの夜叉とか)
- マップ
- オープンワールドかステージか
最後に
この経験を通して多くのことを学びました。その中でも一番大切なのは、自分はゲーム開発が本当に好きなんだということを実感したことです。
8/31までtraPに所属しているので、それまでにボスくらい実装しようと思います。
そして、timesで進捗報告の投稿を反応してくれた皆さん、ありがとうございました!おかげで、ゲームを完成させたまで熱意を保つことができました。
このゲームやってみたい人は以下のリンクからPCで遊べます。
リンク:
https://au2942.github.io/Taitech/
遊び方:
https://au2942.github.io/Taitech/manualJP.html (日本語)
https://au2942.github.io/Taitech/manualEN.html (英語)
遊んだら面白いモディファイアや弾丸のアイデアなどがあれば、ぜひ聞かせてください。
明日は@ikura-hamuと@Pugmaの記事です。お楽しみに!