Unity1週間ゲームジャム「積む」に参加してオンラインゲームっぽいのを作った話。

Unity 1週間ゲームジャム | ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

今回は論文と重なったりしていて参加は無理かな~と思っていたのですが、

論文の提出期限が伸びたおかげで参加できることになりました。

やったね。

前回は

実は前回も参加していて、

はしれ!ユニティちゃん!

ていうのを公開しました。

お題「積む」について

発表されたときは今回もというか、Unityの物理エンジンを活かせそうなお題だなぁと感じました。

と思いつつも、

 とか、

困っているおじいちゃんとおばあちゃんを

目的地まで連れて行くことで「徳を積む」ゲーム

とか変な方向で考えていました(良さげなおじいちゃんとおばあちゃんのアセットが無かったので諦めました)。

さらに実験しながら、「積む、積む」と考えていたのですが

頭に浮かんでくるのはツムツムスキマスイッチ全力少年

 

ん?

「積み上げたものぶっ壊して」

 

確かに積んで壊すのもなかなか趣があります。さすがスキマスイッチ

しかしゲームにおいて自分が積んだものを自分で壊して何が楽しいのか分かりません。

何か面白い案がないかとツイッターを見てみると、

 

「Cube重ねておけば大丈夫」

 なるほど。

やはりシンプルイズベスト、Cubeを重ねてぶっ壊せばよさそうですね。

さらにここで思い出したのはDomino Onlineというゲーム。

そうだ「Tsumiki Online」を作ろう!

立ちはだかる技術的課題

とりあえず先にオフラインで積んで壊せるゲームを作り始めました。

それでてきたのがこれです。

f:id:Naomichi21:20170625103556p:plain

最初は積み木の色を自分で選択できてText Meshでラベルもつけれるようにしていました。

あわよくばテクスチャなんてアップロード出来たり、なんてのも考えていました。

 

しかしここで問題になってくるのはサーバーです。

そもそもサーバーサイドプログラムに知識が無く、

AWS使えばなんとかなるでしょ」程度に思っていました。

しかし、AWSは超過料金は自動引き落とし制度らしいので怖くてさすがに手が付けられませんでした(WebGLで使えないことも後から判明しました)。

 

救世主NCMB

そんな時に目にとまったのが、

mb.cloud.nifty.com

そうNCMBです。

なんと太っ腹、このデータベースは結構無料で使えてしまうのです。

しかもUnity用のSDKなどもあったりして完璧です。

今回必要な機能はデータベースだけでも十分満たしていると思っていたので使わない手はありませんでした。

やっぱりニフティなんだよなぁ。

 

NCMBの罠

NCMBを使って結構実装した後に気づいたのですが、

「NCMB for UnityはWebGLには対応していない」

のです。

もう少し調べてからやればよかったとかなり萎えました。

ここで一瞬折れかけましたが、やはり参加したいので代替手法を色々と模索することとなりました。

qiita.com

を応用するも、レコードの削除方法と速度の問題から採用を諦めました。

 

NCMB REST API

そして今の手法であるREST APIを叩くという手法にたどり着きました。

https://anz-note.tumblr.com/post/161063598401/unityncmb-rest-apiを叩くぞwebgl向け

anz-note.tumblr.com

大変お世話になった杏zさんにはこの場でお礼申し上げたいと思います。

 コアの部分をほとんど写経しながら利用させてもらいました。

 

しかしここで、さらに問題が出てきました。

REST APIからレコードを削除する場合、ユニークなobjectIDを指定する必要があるのです。

 

これはAPIコール数に制限のあるBasicプランにおいては大問題です。

もし積み木が10個積んであった場合、全部削除するためには10回もAPIをコールする必要があります(オブジェクトIDの検索をするので正確には11回です)。

リセット時には全部の積み木のデータを削除するので、削除は非現実的な手法と言わざるをえません。 

 

データベースの使い方が間違っていたのではないかとここで気づかされました。

データベースは頻繁にレコードの削除を行わないのではないかと。

 

そしていまの仕様へと変更

レコードが削除できないとなると、RGB値やラベルなどは利用できません。

リセット時には最初から更新していくという手法も考えましたが、

なんかいろいろめんどくさそうなので諦めました。

 

しかし「今いくつ積み木が積んであるのか」という情報だけは、

リセット時に0にセットすればいいのですから、1回のAPIコールだけで実現できそうです。

 

ということでラベルは廃止、色は生成時にランダムという仕様に変更しました。

 

結局

f:id:Naomichi21:20170625112851p:plain

f:id:Naomichi21:20170625112905p:plain

という風に落ち着きました。

 

すごい企業や賢い人が公開してくれたツールやAPI、コードにおんぶにだっこで実装したため、あまりオンラインゲームの知見は得られませんでした。

 

…まぁそりゃそうなんですが。

 

次はサーバー借りてMySQL+PHPとかで色々できたらいいなぁと思いつつも、

自分が面白いと思ったことができたので良かったと思います。

今回ゲームとしての面白さは置いておきます。

 

主催者のnaichiさんには非常に感謝です。

ありがとうございました。

 

最後にゲームのリンク貼っておきます。

TsumikiOnline

UnityとWindowsとVisualStudioと改行コードの話

初心者がWindows環境下でUnityを使っていると

There are inconsistent line endings in the 'File.cs' script. Some are Mac OS X (UNIX) and some are Windows.
This might lead to incorrect line numbers in stacktraces and compiler errors. Many text editors can fix this using Convert Line Endings menu commands.

という警告がUnityEditorで発生します。スクリプトをCreateするたび発生するのでこれがとてもうざい。

意味は「改行コードが複数混じっているのでエラーの元になるよ」です。


で、UnityEditorでスクリプトを作成するときはテンプレートを参照して作ってます。

テンプレートはUnity\Editor\Data\Resources\ScriptTemplatesにあります。

普通のスクリプト作成に使われるテンプレートは81-C# Script-NewBehaviourScript.cs.txtです。

このテンプレートのデフォルト改行コードがLFなんですね。

このテンプレートの改行コードをWindowsのデフォルトであるCR+LFに変えてやればすべて解決します。

権限が必要なので注意でエディタを管理者権限で実行してから開いてやりましょう。