ニフクラmBaaSお役立ちブログ

スマホアプリ開発にニフクラmBaaS。アプリ開発に役立つ情報をおとどけ!

Unity + mBaaS を使ってリアルタイム協力ゲームを爆速開発してみた

f:id:mbaasblog:20171116161855p:plain

同僚の結婚式の余興で mBaaS + Unity を使って、リアルタイム協力ゲームを作ってみました。 参加者各自のスマートフォンからメッセージと写真を送ると、会場スクリーン上に表示され、 一定数表示されるとゲームクリアという非常にシンプルかつ簡単ゲームです。

シンプルなゲームであれば、mBaaSの機能をフルに使う事によって、 高速にゲームを作る事ができますので、是非ご活用頂ければと思います。

はじめに

このゲームの特徴は下記の通りですが、これらは全てmBaaSを使って実現しています。

  1. mBaaSのデータストア+ファイルストアを利用することで、メッセージや画像をクラウド上に保存できます。
  2. メッセージの書き込み順序を保障するためにスクリプトも利用、スクリプト経由でデータストアに書き込みを行っています。

急遽、ゲームに対してバックエンド機能が必要がとなれば、mBaaSを利用すると高速で開発することが可能です。

ゲーム概要

ゲーム概要についてはこちらの記事をご参考ください。

blog.mbaas.nifcloud.com

構成イメージ

当ゲームの構成イメージと流れとしては下記の通りです。 非常にシンプルに仕上がっていると思います。

  1. 来場者が手持ちのスマートフォンで、スマホ側のwebアプリからメッセージと写真をアップします。
  2. アップしたメッセージと写真はそれぞれデータストアとファイルストアに保存されます。
  3. スクリーン側のアプリからデータストアの更新を検知し、更新があればメッセージと写真を取得します。
  4. 最後にスクリーン側のアプリにメッセージと画像を表示します。

f:id:mbaasblog:20171116162026p:plain

この記事ではスクリーン側のアプリ(Unityアプリ)について解説したいと思います。 スマホ側のWebアプリについては下記の記事を参考してみてください。 blog.mbaas.nifcloud.com

ダウンロード

ソースコードは下記からCloneして利用可能です。 詳細についてはリポジトリのREADMEをご覧ください。

github.com

Unityアプリについて

GitHubからCloneすると、Unityパッケージとなっていますので、Unityフォルダーをインポートするだけで そのままプロジェクトとして利用できます。

f:id:mbaasblog:20171116162113p:plain

このプロジェクトで利用したコードの一部を解説したいと思います。

データストアの更新をUnity側から検知する方法について

データストアに保存しているデータを取得します。

query.AddAscendingOrder("createDate"); でデータストアの作成日時の降順で取得するよう設定します。

次に query.Limit = 1000; でクエリを取得する件数を1000件とします(デフォルトは100件)。

query.FindAsync 関数を使ってデータストアからデータを取得します。

データの取得に成功すると if (dataCount == 0 || dataCount != objList.Count) でデータに追加があるかどうかを判別し、データがない場合は処理を行いません。

さらに、追加のレコードがあった場合にそれぞれ _name, _message, _photonName の変数にセットし、 レコード毎にパネルをめくる処理を行っています。

//Scoreフィールドの降順でデータを取得
query.AddAscendingOrder("createDate");
query.Limit = 1000;

//データストアでの検索を行う
query.FindAsync((List<NCMBObject> objList, NCMBException e) => {
    if (e != null)
    {
        //検索失敗時の処理
    }
    else
    {
        if (dataCount == 0 || dataCount != objList.Count)
        {
            for(int i = dataCount; i < objList.Count; i++)
            {
                // mBaaSから取得
                string _name = objList[i]["name"] as string;
                string _message = objList[i]["message"] as string;
                string _photoName = objList[i]["photoName"] as string;

                // パネルをめくる
                StartCoroutine(CurlPannel(_name, _message, _photoName));
            }

            // データカウント
            dataCount = objList.Count;
        }
    }
});

その他のコードについてはGitHubのプロジェクトをご覧ください。 github.com

このようにシンプルなゲームであれば、mBaaSの機能をフルに使う事によって、 高速にゲームを作る事ができますので、是非ご活用頂ければと思います。

さいごに

mBaaSにはタカノ君という非公式マスコットキャラクターがいます。 このゲームではスピナー(インジケーター)用にgifを製作したので、是非ご活用ください。

f:id:mbaasblog:20171116162203g:plain

山本昇平

ニフクラ mobile backend のコードも書ける企画担当。ゲーム向けクラウドを得意としています。スプラトゥーンとシンガポールが好きです。