はじめに
こんにちは。ユニバの MJ です。
会社が暇で暇でしょうがない(私だけ)ので、30なる前に一つテトリスでも作るかと思い至った次第。
しかもテトリスエフェクト見たいなモテそうなやつ
開発メンバ
私を含めて 5~6人。
えいやえいやと有志が集まり複数人開発となりました。参加してくれた皆さんありがとう!
私の技術スタック
Unity歴ほぼなし!
普段はフロントエンド (iOS, Android アプリもやったりする) やってて、最近 Shader とか触ってた。
プログラムを書くこと自体は慣れているので C#
自体もそんなに苦にならない程度。
むしろ Unity 自体のツールに慣れるまで辛かった。
2週間の見通しとスケジュール
- 1週間目: テトリスの大枠を作る
- 2週間目: ネット対戦できるように転換
この目標を前提として、3日に一回ぐらい集まって、
- やったところ
- 次にやりたいこと
- 困っているところ
とかを共有して、常に目標とやる気ベースでサイクルを回していきました。
こういうお金関係ないプロジェクトは楽しくないと辛いですからね。
出来たもの
思った以上に雰囲気が出た。いやぁ〜弊社はすごい会社だなぁ(自惚れ)
ネット対戦は Score を共有して先に 10000点 とったほうが勝ちというクソザコルール。でもネット対戦だからガハハ。
(映像ではわかりにくいですが、対戦者が点数取るとそこが共有されます。)
個人的な開発プロセス
下に貼った、チュートリアルの内容を4回ぐらい写経して、作っては壊しを繰り返し Unity の開発になれる。
あとは wiki のロジックを実装していく。
という感じでした。特に何もないな。書いては捨てるの気持ちが大事。
テトリスを作った上で得た技術
Unity の扱い
当初は、シーンをセーブせずに Mac がフリーズ、そして確認したら全てがパー。これだけは許すまじ。
多人数開発
無駄なコンフリクトを避けるために、シーンをなるべく分けて、ギリギリまでリバートしてもコードは失われない状況を作った。
次は、シーンを分割する部分の落とし所をもっと探りたい。
UniRx
スクリプトが他のゲームオブジェクトに依存する形になると、すぐ転用が難しいコードが出来上がるので、こいつを使ってイベントを吐き出すだけにして実際のロジクは受け取り側で書くのが吉。まぁ普通によく出来たライブラリ。使っていきましょう。
ECS
とりあえず背景の頂点をうまく動かしたくて検索した結果
http://tips.hecomi.com/entry/2018/12/23/200817
に行き当たる。すごい(尊敬)。今回は拝借してパラメータを調整するだけに終わってしまったが、もっと有機的な動きをゲームのイベントと同期させたり、ロジック自体の理解を進めたい。
その中で ECS と出会う。この考え方は次世代の Unity の考え方のベースになると思うので今後も調べていきたいと思う。
Unity Package
ECS に関連して、まだ正式ではないライブラいを突っ込んだりした。
ここら辺の解決は Webpack の設定の困難さに似たものを感じた。世の中どこでもこういう苦労はあるものだ。
Photon - Bolt
ネットワーク対戦をお手軽にできんかと探したらあった。感謝しかない。
弊社で適当に作ってもよかったんだが、今回は敢えて他社サービスの利用をしました。P2P 通信とか簡単にできないからね。
理解すればすごい使いやすい。でもそこまでのチュートリアルが結構厳しいと思った。
あと転用したいときに API リファレンス読んでもうーんと唸る感じ。
テトリスの知識と実装。
テトリスのガイドラインってのが wiki に書いてあるのでそこから実装する機能を見繕う。
next block
hold
super rotation
hard drop
ghost block
あたりを実装した。
テトリスは歴史があるので、調べるとそれぞれのロジックが書かれた参考が見つかるので、それを参考にしました。
あと基盤はこのシリーズ見たりすれば作れます。
作った感想
30前にテトリス作れてよかった(本当に)。
あとゲーム作るのって本当に大変。UI/UX の塊だし、音とか適当に入れて変えて欲しいとか思って突っ込んでもそのまま放置されたり。
そういう意味で、一番最初にゲームのムードをきちんと設定できていると良かったんだなと思った。
途中で聞かれたのでサイバーリラクゼーションと伝えたらあれが出来た(たまげた)。
で少し経って (1週間時点)
https://slack-files.com/T028UP1TV-FJZSGUY6Q-7c69a49f01
ここでテトリスエフェクトの音とかフリー音源を当ててそれっぽくなった。
最終的には上のリンクのものになりました。
やる気ベースで開発するのって本当に大事だと思う。まじで。
案件ある中、やれる時間のなかで集中して作るのって結構しんどい。
次はレーシングゲーム作る妄想している。
野生動物のレースを参考にしようとしたけど、思った以上にしっかりと出来てた。。。。
テトリスは割と知見が溜まっているプロダクトなので、手始めに始めるにはすごい良い教材でした。
皆さんも作ったテトリス共有してドヤ顔しましょう。