専門学校に通い始めてはや2カ月。
5月後期の作品は専門学校の課題として提出するということもあり、比較的力を入れて制作を行った。
その中で、新たに得た知見や反省点をここにしたためていこうと思う。
今作は「円形の駒をぶつけあって戦う、簡単戦略シミュレーション」。
小学校の卓上でよく遊ばれる「消しゴムバトル」、あるいはおはじきのようなものをイメージしてもらうと伝わりやすいだろうか。
ゲームの詳細はここでは割愛。Twitterにて紹介動画を上げているので、興味があればそちらを参照してほしい。
https://twitter.com/i/status/1401753151816929281
https://twitter.com/i/status/1401781344192000010
https://twitter.com/i/status/1401803148465827840
さて、本作を作るにあたって最も重要になる処理が「円の衝突」である。
衝突処理のフローとしては、
1.衝突判定(当たり判定)
2.押し戻し処理
3.運動量・ベクトル計算
以上の3ステップとなる。
1に関しては今回円同士であるがゆえに非常に簡単で、
「2円の半径の合計>=2円の中心間の距離」
となる場合、衝突していることとなる。
円の中心間の距離は言わずもがな、三平方の定理で求めることができる。
2については今作のように厳密な計算を求める必要がなければ、
円同士を最短距離…すなわち、円の中心を結ぶ線の延長線に向かって必要分移動させてやれば良い。
実際、この処理でも今作では全く違和感なく動いているように見えた。
問題となるのが3である。
円Aに向かって円Bが衝突する状況を思い浮かべてほしい。
直撃した場合円Aは勢いよくはじかれ、円Bも今までの運動とは反対方向へ跳ね返されるのに対し、
掠めるように当たった場合円Aはほとんど動かず、円Bは素通りするかのように動くはずだ。
物理数学に疎い私には思いつかなかったが、どうやらこれは衝突した円を串にささった団子にたとえると、
「串に対して水平方向にはたらく力」
「串に対して垂直方向にはたらく力」
一度この2つに運動を分解することで解決するようである。
要するに、衝突計算に関係がある力と無い力を一度分離し、関係のあるものだけで計算するというのが大前提となるのだ。
ここまでを理解したうえで下記の記事を読むことで、実際の計算を行うことができるだろう。
(ちなみに記事内に出てくる変数「t」とは、どうやらタンジェントのことのようだ。私はこれでしばらく悩んだので、念のため。)
https://hakuhin.jp/as/collide.html
ここまでが技術的なお話。
次に、開発のスケジュール管理についてだ。
今回は課題提出ということで期限が設定されていたのだが、私は期限までにゲームを完成させることはできなかった。
もちろん一通り遊ぶことはできるのだが、PvEモードやチュートリアルなどをはじめ、実装したかった仕様を涙を呑んで諦めることになってしまったのだ。
また、期限に追われ余裕がなくなってしまったことで生活習慣は乱れ、しょうもないミスをして学校の先生にもお叱りを受けるなど、肉体的にも精神的にも追い込まれる形になってしまった。
いくつか原因はあるのだが、一番大きいのはゲーム開発の流れの誤解…というよりも、無知であろう。
制作の初期には凝ったタイトル画面を作り、意気揚々と開発を進めていたのだが、途中からわけがわからなくなり頓挫。
そのタイミングで構造体や関数などを習ったこともあり、それまで書いたコードをはじめから組み直し、そうこうしているうちに期限が迫る…と。
冷静に振り返ると、あまりにも計画性が無さ過ぎて笑えて来るほどだ。
そんな中、制作終盤において先生方が質問対応を行ってくれる授業があったため、ゲーム制作の計画についての指導を仰いでみたところ、非常に納得のいく話があったので共有しておこう。
それは、「一番難しい処理から作るべし」ということ。
確かに工数の見積もりが最も難しい、あるいは実現可能かすら危うい部分から済ませておけば、後々困ることは減るのではないだろうか。
当然のことのようで、過去の私にはできていなかったことである。
これまで同様、プレイヤー目線でしかゲームを追えていなかったことの表れでもあるだろう。
逆に言えば、これからはゲームクリエイターとしての目線に立たなければならない。
以上、大きく2点が5月後期の制作にて学んだことである。
もちろん細かいことを挙げだせばキリがないが、今回は割愛させてもらおう。
今作は規模が大きく、6月にめり込む形となってしまったこともあるので、6月前期、次回作は軽めの一品を予定している。
三角関数についての理解が怪しい部分が多いので、円や波を利用した作品を作りたいところだ。