帰れま10というUnityワークショップでの出題内容とその出題意図について

(12月13日追記)
この記事は、Unity 2 Advent Calendar 2016 の12日目になります。11日目の記事は@fujiokoさんの[[Unity]加算と半透明を1パスにするP-MAPブレンド実用例](http://qiita.com/fujioko/items/222c9b0f30a66ffe5f9d)です。

---


12月11日（日）に下記のイベントでUnityゲームにゲームシステム以外の機能を組み込むワークショップがありました。[アプリデベロッパーズアカデミー　〜クラウドサービス篇　全部できるまで帰しま10〜 (少し増員しました)](https://atnd.org/events/83004)そちらに、[ニフティクラウド mobile backend](http://mb.cloud.nifty.com/)を使った問題を出題させていただいたので、その時の出題内容と正解、出題の意図を書いていこうと思います。

[ニフティクラウド mobile backend](http://mb.cloud.nifty.com/)はスマホアプリのサーバー側の機能（プッシュ通知や会員管理など）を提供するすmBaaSジャンルに属するサービスです。mBaaSとは？と思った方は下記のページをご覧ください。

[mBaaSとは？](http://mb.cloud.nifty.com/about.htm)

# 問題と正解の一覧

1. 会員登録・ログイン機能を作ろう<br>
正解：https://github.com/hounenhounen/UnityLoginApp
2. Id,PWを自動で発行し会員登録・ログインができる機能を作ろう<br>正解：https://github.com/hounenhounen/UnityAutoLoginApp
3. アプリ内にお知らせ機能を作りましょう<br>
正解：https://github.com/hounenhounen/UnityNewsWebView

# 出題の意図（全体）

クラウドサービスの提供者として、ゲーム開発のお客さんとお話をしているとよく下記の点について相談を受けていました。

1.ソーシャル性
  今さら言うまでもないことですが、アプリの人気を高める手段として「みんなで一緒に遊んでいる」感の演出が必要になり、ギルド・フレンド機能などのソーシャル性を求めている方が多くいらっしゃいました。

2.端末間のデータ移行、複数端末でのプレイ
  近年MVNOも盛んでiPhone->Androidへの乗り換えも頻繁になりつつある状況を受けて、継続性確保のために端末間でのデータ移行は必須事項として取り上げられていました。また、今日では一人が複数端末を持っていることも珍しくなく、様々な端末からシームレスにプレイするために「クラウドセーブ」機能を加えたいという声も聞いていました。

3.アクセシビリティの提供
  プッシュ通知だけだと一時的なお知らせにしかすぎず、永続的に情報を掲示できる方法を探している方もいらっしゃいました。もちろんサーバーを立てればいいのですが、お知らせのためにサーバーを立てたりするのはあまりにもコストが大きいという現状も見え隠れしていました。

こうした相談への解として「会員管理」「ファイルストア」の機能が効果的であると思っていたので、それらの使い方に着目した問題を出題しました。

# 問題１、２の出題意図

問題１、２は以下のように会員管理に関する問題でした。フレンド機能にはそもそもアカウント発行が必要なこと、ユーザーに紐づく、ゲーム内のステータスをサーバーで持っていれば端末間の移行やクラウドセーブも可能であることを鑑みて、会員登録やログイン機能を作る問題を出しました。

1. 会員登録・ログイン機能を作ろう<br>
正解：https://github.com/hounenhounen/UnityLoginApp
2. Id,PWを自動で発行し会員登録・ログインができる機能を作ろう<br>
正解：https://github.com/hounenhounen/UnityAutoLoginApp

問題１の正解イメージ
![](https://raw.githubusercontent.com/hounenhounen/UnityLoginApp/master/readme-img/LoginSignView.png)

問題１に関しては通常の会員登録ですが、こうした会員登録の画面はユーザーのアンインストール率が激増します。なのでそもそも会員登録の作業がなくても登録ができてしまうシステムを組めばいいのではないかと出題したのが第２問目です。
アンイストール率の上昇を抑えつつ、フレンドやデータ移行が実装できる基盤をつくことが目的だった問題です。

## 本当はもっといろいろやりたかった

上記の問題2の正解ですが、その後のデータ移行、クラウドセーブまでやりたかったのですがセミナー中にやるのは難しくそこまでできないなぁ〜と思っていたら @Takaaki_Ichijo 氏がそれらのデモを作ってれました！しかもKeyの暗号化付き！ありがとうございます！
https://github.com/NCMBMania/UnitySDKExtensionPack


# 問題３の出題意図

問題３はアプリ内にで表示するお知らせ機能の制作がテーマでした。

3. アプリ内にお知らせ機能を作りましょう<br>正解：https://github.com/hounenhounen/UnityNewsWebView

どのような形で作るのをよしとするか悩んだのですが、今回はunityのwebviewと[公開ファイル](http://mb.cloud.nifty.com/doc/current/filestore/contents-delivery.html#ファイルを公開してHTTPSで取得可能にする)の機能を組み合わせてお知らせ画面のHTMLを表示する方法をとりました。

[公開ファイル](http://mb.cloud.nifty.com/doc/current/filestore/contents-delivery.html#ファイルを公開してHTTPSで取得可能にする)を使いHTMLを扱うと[ファイルストア](http://mb.cloud.nifty.com/function.htm#filestore)の機能がまるでホスティングサーバーのように駆動します。CSSやJavaScriptも紐付けてブラウザ上で駆動できるのでデザインを変更するのも非常に楽ということもありこの方法をとりました。（ファイルストアはあくまでもストレージですのでPHPを駆動させるcgiのようなことはできません。）

正直、Unityでテンプレートを作りテキスト情報を[データストア](http://mb.cloud.nifty.com/function.htm#filestore)からとってくる作りでも良かったのですが、デザイン変更がやりづらい欠点もあったのでこのような形をとった次第です。
今後同様の機能を作られる方は下記のようにそれぞれの違いを抑えて使い分けてもらえるといいと思います。

* [公開ファイル](http://mb.cloud.nifty.com/doc/current/filestore/contents-delivery.html#ファイルを公開してHTTPSで取得可能にする)×HTMLで作るお知らせ機能特徴
  * HTMLで記述できる
  * CSSでストアアップデートなしでデザインを変更できる
  * JSで動的な処理を実装できる
  * 画像など表示位置変更もしやすい

* Unityでテンプレートを作り、テキストの情報を[データストア](http://mb.cloud.nifty.com/function.htm#filestore)から更新するお知らせ機能特徴
  * 全てUnityで記述できる
  * 大幅なデザインの変更にはストアアップデートが必要
  * 動的な処理の実装をしたい場合はリリース前に組み込んでおく必要がある

# 最後に
[ニフティクラウド mobile backend](http://mb.cloud.nifty.com/)の出題範囲だけになりましたが、Unityさんではコラボレート、クラウドビルド、アナリティクス、アド、などの使い方の問題を出題されていました。本当にアプリをリリースしたい！という人に向けたイベントで関わらせてもらえて本当にありがたかったです。
今後も「ゲームシステム」ではないけど「ゲーム」で使う機能の開発に取り組みたいと思います。何か必要なものがある方はコメントなどに書いていただけると幸いです。