2015年11月15日日曜日

UnityとmBaaSでゲーム作りを体験してきた

やっと技術系の投稿ができるんよ~。

と、いうことで、11月13日(金)に渋谷で行われた
"Unity+ニフティクラウドでスマホゲーム開発"のハンズオンに参加してきました。


きっかけは、社長からの一通のメール。

社長「お前らこんな勉強会やるそうやで~。
行きたいやつがいれば交通費と宿泊費は出したる(要約)」

Unityか。3D地図の話もあったし、そっちにも手を出すのかなー、なんて思いましたが、
それはともかくとして、Unityか、いいじゃないか。
そんなわけで、Unityに興味のあった私はホイホイと名乗りを上げて
東京に行くことになったのでした。


さて、そんな感じでハンズオン当日。
夕方に東京入りして会場に向かいました。
渋谷で迷子になったりとかありましたが、その辺の与太話は置いておいて、本題に入ります。

まず、参加してみて分かったんですが、Unityはおまけで
ニフティクラウド mobile backend(NCMB)の話がメインでした。

作ったのは簡単なレースゲームで、ほぼ完成しているアプリに
ランキング機能を実装するという感じでした。
なるほど、サーバにタイムレコードのDBを置いて、
そこから全ユーザのランキングを作れるわけですね。

本来、それらの機能を1から作ろうとすると、

  1. サーバの構築
  2. データベースの設計、構築
  3. データを読み書きするクエリ

これらを作りこむ必要があります。
しかし、NCMBを利用すれば、それらはせずに済むわけですね。
なるほど、便利そうだ。


Unity側のアプリは配布された時点で、既になんとなく遊べる状態でした。
プレイ中の画面。左下のビューでゲームを動かしているところです。

なので、サーバ側の方を作りこんでいきます。
まず、NCMBでアプリを新規に作ります。
アプリといってもデータベースに近いものですね。

ニフティのページで利用登録し、
「新しいアプリ」→名前を付けて「新規作成」。やることはこれだけ。

すると、アプリケーションキーなどが発行されるので、Unity側に設定します。

Unity側で設定。これだけ。


次に、タイムレコードをNCMBに登録する処理を実装します。
ゴール時に呼び出されるイベントハンドラで、
サーバにタイムレコードを追加する処理を実装します。

void OnGoal()
{
    goal = true;
    // クラスの設定
    NCMBObject timeClass = new NCMBObject("Time");
    // カラムと挿入するデータの指定
    timeClass["time"] = lapTime;
    // 非同期でのアップロード
    timeClass.SaveAsync();
}

こんな感じ。NCMBObjectオブジェクトが、データベースでいう所の
レコード1件分のデータに相当します。
"Time"テーブルに追加されるレコードを準備した、といったところですね。
次に、"time"というフィールドに、ゴールした時間(lapTime)を格納します。
最期に、サーバにレコードを追加するのに、SaveAsyncメソッドを呼びます。

これだけです。
さて、ゲームを起動してゴールしてみると...

NCMB側にタイムが記録されていますね!

おおーしっかりサーバに記録されていますね。
私、3行分のコードしか書いていないんだけど...
簡単だなー。

まぁ、そんな訳であっさりとゲームスコア保存機能が作れてしまいました。
何がいいって、データベース側の設計が全く必要ないこと。
あらかじめテーブルのスキーマを定義しておく必要もないのです。
上のSSで示しているテーブルも、自動的につくられていましたから。
これは強力ですな。開発スピードも上がりますね。


と、いう感じでニフティクラウド mobile backendは
とても便利でした。
ハンズオンでは、この後走行ログを取って、マリオカートでいう所の
「ゴースト機能」を作ったり、Unity Remote 4を使って
実機で動かしてみたりもしましたが。
その辺りの内容はぜひともRainbowAppsさんのハンズオン
参加して体験して頂ければと。(露骨な宣伝)
私は豊橋に住んでいるので、東京の勉強会には気軽に参加できないですが、
関東在住の方はRainbowAppsさんのスクールに参加してみるのもよいかもですね。


そんな感じでした。いやー楽しい勉強会でした。
こういった勉強会には積極的に参加していきたいですね。

0 件のコメント:

コメントを投稿