Unity1週間ゲームジャム「積む」に参加してオンラインゲームっぽいのを作った話。
Unity 1週間ゲームジャム | ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう
今回は論文と重なったりしていて参加は無理かな~と思っていたのですが、
論文の提出期限が伸びたおかげで参加できることになりました。
やったね。
前回は
実は前回も参加していて、
ていうのを公開しました。
お題「積む」について
発表されたときは今回もというか、Unityの物理エンジンを活かせそうなお題だなぁと感じました。
と思いつつも、
お金を積みまくってアイドルが総選挙の場で結婚発表しないようにするゲーム #unity1week
— ミッチー (@naomichi_mitti) 2017年6月18日
とか、
困っているおじいちゃんとおばあちゃんを
目的地まで連れて行くことで「徳を積む」ゲーム
とか変な方向で考えていました(良さげなおじいちゃんとおばあちゃんのアセットが無かったので諦めました)。
さらに実験しながら、「積む、積む」と考えていたのですが
ん?
「積み上げたものぶっ壊して」
確かに積んで壊すのもなかなか趣があります。さすがスキマスイッチ。
しかしゲームにおいて自分が積んだものを自分で壊して何が楽しいのか分かりません。
何か面白い案がないかとツイッターを見てみると、
今週のお題「積む」 | Unity 1週間ゲームジャム #unity1week https://t.co/2uhr9rdqDr
— naichi (@naichilab) 2017年6月18日
第三回お題公開しました。今週もよろしくお願いしまーす!
積む、積み重ねる、積み上げる、、、何も思いつかなければとりあえずCube重ねておけば大丈夫ですw
「Cube重ねておけば大丈夫」
なるほど。
やはりシンプルイズベスト、Cubeを重ねてぶっ壊せばよさそうですね。
さらにここで思い出したのはDomino Onlineというゲーム。
そうだ「Tsumiki Online」を作ろう!
立ちはだかる技術的課題
とりあえず先にオフラインで積んで壊せるゲームを作り始めました。
それでてきたのがこれです。
最初は積み木の色を自分で選択できてText Meshでラベルもつけれるようにしていました。
あわよくばテクスチャなんてアップロード出来たり、なんてのも考えていました。
しかしここで問題になってくるのはサーバーです。
そもそもサーバーサイドプログラムに知識が無く、
「AWS使えばなんとかなるでしょ」程度に思っていました。
しかし、AWSは超過料金は自動引き落とし制度らしいので怖くてさすがに手が付けられませんでした(WebGLで使えないことも後から判明しました)。
救世主NCMB
そんな時に目にとまったのが、
そうNCMBです。
なんと太っ腹、このデータベースは結構無料で使えてしまうのです。
しかもUnity用のSDKなどもあったりして完璧です。
今回必要な機能はデータベースだけでも十分満たしていると思っていたので使わない手はありませんでした。
やっぱりニフティなんだよなぁ。
NCMBの罠
NCMBを使って結構実装した後に気づいたのですが、
「NCMB for UnityはWebGLには対応していない」
のです。
もう少し調べてからやればよかったとかなり萎えました。
ここで一瞬折れかけましたが、やはり参加したいので代替手法を色々と模索することとなりました。
を応用するも、レコードの削除方法と速度の問題から採用を諦めました。
NCMB REST API
そして今の手法であるREST APIを叩くという手法にたどり着きました。
大変お世話になった杏zさんにはこの場でお礼申し上げたいと思います。
コアの部分をほとんど写経しながら利用させてもらいました。
しかしここで、さらに問題が出てきました。
REST APIからレコードを削除する場合、ユニークなobjectIDを指定する必要があるのです。
これはAPIコール数に制限のあるBasicプランにおいては大問題です。
もし積み木が10個積んであった場合、全部削除するためには10回もAPIをコールする必要があります(オブジェクトIDの検索をするので正確には11回です)。
リセット時には全部の積み木のデータを削除するので、削除は非現実的な手法と言わざるをえません。
データベースの使い方が間違っていたのではないかとここで気づかされました。
データベースは頻繁にレコードの削除を行わないのではないかと。
そしていまの仕様へと変更
レコードが削除できないとなると、RGB値やラベルなどは利用できません。
リセット時には最初から更新していくという手法も考えましたが、
なんかいろいろめんどくさそうなので諦めました。
しかし「今いくつ積み木が積んであるのか」という情報だけは、
リセット時に0にセットすればいいのですから、1回のAPIコールだけで実現できそうです。
ということでラベルは廃止、色は生成時にランダムという仕様に変更しました。
結局
という風に落ち着きました。
すごい企業や賢い人が公開してくれたツールやAPI、コードにおんぶにだっこで実装したため、あまりオンラインゲームの知見は得られませんでした。
…まぁそりゃそうなんですが。
次はサーバー借りてMySQL+PHPとかで色々できたらいいなぁと思いつつも、
自分が面白いと思ったことができたので良かったと思います。
今回ゲームとしての面白さは置いておきます。
主催者のnaichiさんには非常に感謝です。
ありがとうございました。
最後にゲームのリンク貼っておきます。