FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(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

山本昇平 (Shohei Yamamoto)

ニフクラ mobile backend のコードも書ける企画・海外展開担当。 ゲーム向けクラウドを得意とし、1人でも多くの人にクラウドに触れて頂けることを目標としています。 趣味はスプラトゥーンとシンガポールをはじめとした海外旅行。