【Unity問題集】
オンラインランキング機能を作ってみよう!
「シューティングゲーム」

2017/05/17作成 (2017/05/25修正)

RendaGame

GitHub
https://github.com/NIFTYCloud-mbaas/UnityFirstApp

コンテンツ概要

  • ニフティクラウド mobile backend の機能『データストア』を学習するための問題集です
  • ニフティクラウド mobile backend の利用登録(無料)が必要です
  • 問題用プロジェクトにはオンラインランキング機能が実装されていない状態の「シューティングゲーム」です
  • 既に実装済みのニフティクラウド mobile backend を利用するための準備(SDK導入など)方法の詳細はこちらをご覧ください
    http://mb.cloud.nifty.com/doc/current/introduction/quickstart_unity.html

問題について

  • 問題は2問あります
  • 2問クリアすると「シューティングゲーム」にオンラインランキング機能を実装したアプリが完成します
  • 問題を取り組む上で必要な開発環境は以下です
    • Unity 3Dが動作するWindows PC もしくはMac PC
    • Unity5.3以降

問題に取り組む前の準備

プロジェクトのダウンロード

▼問題用プロジェクト▼
https://github.com/NIFTYCloud-mbaas/UnityFirstApp/archive/Question.zip

  1. 上記リンクからzipファイル取得します
  2. ローカルに保存し、解凍します

「シューティングゲーム」の操作方法

  1. 【ゲーム(Game)ビュー】から初期画面(Tap To Start)をタッチします
  2. 矢印で方向を変えながら、弾丸やレーザーなどの飛び道具を利用して敵機を撃ち落とす、単純なゲームです
  3. GameOverになるとゲームプレイヤーの名前を入力するアラートが表示されますので、名前を入力し「Submit」をクリックします
  4. ゲームプレイヤーの名前とスコアが保存され、初期画面に戻ります

注意:問題に取り組む前の状態では「LeaderBoard」(ランキングを見る)ボタンをタップしてもランキングは表示されません

アプリの新規作成とAPIキーの設定

mBaaS

  • ニフティクラウド mobile backend にログインしアプリの新規作成を行います
  • アプリ名はわかりやすいものにしましょう 例)「UnityShootGame」
  • アプリが作成されるとAPIキーが2種類(アプリケーションキーとクライアントキー)発行されます
  • 次で使用します

Unity

  • 【ヒエラルキー(Hierarchy)ビュー】からNCMBSettingsを編集します
  • 先程ニフティクラウド mobile backend のダッシュボード上で確認したAPIキーを入力します

問題0-1

  • 【インスペクター(Inspector)ビュー】から「NCMB Settings」欄のApplication KeyとClient Keyの入力部分に各APIキーを入力します

【問題1】
名前とスコアの保存をしてみよう!

/Assets/Scripts/saveScore.csを開きます。下図の__saveScore__ メソッドを編集し、引数の__name__ (アラートで入力した名前)と__score__ (シューティングゲームのスコア)の値をニフティクラウド mobile backend に保存する処理をコーディングしてください。

問題1-1

  • データストアに保存先クラスを作成します
  • クラス名は「GameScore」としてください
  • nameを保存するフィールドを「name」、scoreを保存するフィールドを「score」として保存してください

ヒント

コーディング後の作業

問題1のコーディングが完了したら、下記の作業を行います

【作業1-1】

それぞれ該当する箇所に以下の処理を追記して、再生時にUnity Console上にログを表示できるようにします

  • 保存に失敗した場合の処理を行う箇所に追記

code1

  • 保存に成功した場合の処理を行う箇所に追記

code2

【作業1-2】

「再生」をクリックし、ゲームをします

  • ゲームオーバーになったら名前を入力し、「OK」がクリックされると【問題1】で作成したsaveScoreメソッドが呼ばれ、データが保存されます
  • このとき下記のいずれかのログが出力されます
  • 保存成功時:「保存に成功しました。objectId:*********
  • 保存失敗時:「保存に失敗しました。エラーコード:******

※ エラーコードが出た場合はこちらで確認できます
http://mb.cloud.nifty.com/doc/current/rest/common/error.html#REST_APIのエラーコードについて

【問題1】答え合わせ

ニフティクラウドmobile backend上での確認

mBaaS

  • 保存されたデータを確認しましょう
  • 「データストア」をクリックすると、「GameScore」クラスにデータが登録されていることが確認できます。

ans1-1

コードの答え合わせ

  • 模範解答は以下です

Answer1

【問題2】
ランキングを表示しよう!

/Assets/Scripts/LeaderBoard.csを開きます。下図のfetchTopRankersメソッドを編集し、データストアのGameScoreクラスに保存したnamescoreのデータをscoreの降順(スコアの高い順)で検索・取得する処理をコーディングしてください。

問題2-1

  • 検索データ件数は5件とします

ヒント

コーディング後の作業

問題2のコーディングが完了したら、下記の作業を行います。

【作業2-1】

該当する箇所に以下の処理を追記して、再生時にUnity Console上にログを表示できるようにします

  • 検索に失敗した場合の処理を行う箇所に追記

code3

  • 検索に成功した場合の処理を行う箇所に追記

code4

【作業2-2】

Unityから「再生」し、「LeaderBoard」(ランキングを見る)ボタンをタップします

  • 画面起動後、fetchTopRankersメソッドが呼ばれ、【問題1】で保存されたデータが検索・取得されます
  • このとき下記のいずれかのログが出力されます
  • 検索成功時:「検索に成功しました。
  • 検索失敗時:「検索に失敗しました。エラーコード:******

※ エラーコードが出た場合はこちらで確認できます
http://mb.cloud.nifty.com/doc/current/rest/common/error.html#REST_APIのエラーコードについて

【作業2-3】

検索に成功したら、該当する箇所に以下の処理を追記して、取得した値から必要なデータを取り出し、ランキング画面へ反映させます

  • 検索に成功した場合の処理を行う箇所に追記

code5

【作業2-4】

Unityから「再生」し、「LeaderBoard」(ランキングを見る)ボタンをタップします

  • 先ほどのスコアが表示されれば完成です!おめでとうございます★

【問題2】答え合わせ

ランキング画面の確認

  • ランキング画面を確認しましょう
  • 「LeaderBoard」(ランキングを見る)ボタンをタップすると以下のようにランキングが表示されます。

ans2-1

  • 上図はランキングが表示されることを確認しましょう!

コードの答え合わせ

  • 模範解答は以下です

Answer2

参考

  • 問題の回答を実装した完全なプロジェクトをご用意しています

▼完成版プロジェクト▼
https://github.com/NIFTYCloud-mbaas/UnityFirstApp/archive/AnswerProject.zip

  • APIキーを設定してご利用ください

おまけ

  • ニフティクラウド mobile backend を使って、シューティングゲームに「ゴースト機能」を実装することができます!

ghost0