ハイスコアをサーバーに保存する
概要
このページでは、mobile backendを使ってハイスコアをサーバー(データストア)に保存する方法を学びます。
配布されているサンプルプロジェクトの元の状態では、ハイスコアは端末内のファイルに書き込まれて保存されています。ハイスコアを管理しているのは、「Score」というクラスです。そこで今回は、ハイスコアをファイルではなくデータストアに保存するように、「Score.cs」を書き換えていきます。
なお、ログイン機能を実装していない場合は、「ログイン機能を作る」を先に済ませておいてください。
HighScoreクラスを定義する
今回は、mobile backendとやりとりしてハイスコアの保存と取得を行うクラスを先に定義していきましょう。
Scriptsフォルダの中に「HighScore.cs」という名前のC#スクリプトを新規作成し、下記の内容を記述してください。
ハイスコアの取得と保存には、NCMBQueryクラスを用います。WhereEqualToメソッドで条件を指定したあと FindAsyncメソッドでレコードを取得、というのが基本的な流れになっています。条件の指定方法は、今回用いたWhereEqualTo以外にも色々なものが用意されています。詳しくはSDKリファレンスをご覧下さい。
ソースコードをアタッチせずに使う
今回は、このHighScore.csをGame Objectにアタッチしないで使いましょう。ゲームオブジェクトにアタッチせずに使う利点は、以下のようなものがあります。
- Unityに依存しない (Startメソッドなどを実装しない) コードを書くことができる
- 他のシーンでも、そのクラスを使うことができる
今回実装したHighScoreクラスは、MVCデザインパターンでいうモデルクラスにあたります。その場合、このようにUnityに依存しない形でコードを書くほうがよいでしょう。実際このクラスは、Unityを使わずに単体テストを行うことができます。
Scoreクラスを修正する
それでは次に、既存のScoreクラスを修正して、先ほど定義したHighScoreクラスを使ってハイスコアを管理するようにしていきましょう。同時に、サーバーへの通信(ハイスコアの取得と保存)ができるだけ少なくなるようなロジックも盛り込んでいきます。
Score.csを開き、highScoreフィールドの定義を以下のように修正します。
次に、Updateメソッドを以下のように修正します。
先ほど定義したHighScoreクラスのscoreプロパティを参照するようにします。
つづいて、StartメソッドとInitializeメソッドを修正します。ローカルファイルからハイスコアを読み込む代わりに、サーバーから取得する(先ほど定義したHighScore.fetchメソッドを使う)ように変更します。ただし、Initializeメソッドはゲームオーバーのたびに呼び出されている(Manager.csを参照)ので、スコアの取得はInitializeメソッドではなくStartメソッドで行うようにします。
最後に、Saveメソッドを以下のように修正し、ハイスコアをサーバーに保存するようにします。
動作確認
ここまでできたら、1度動作確認をしてみましょう。以下のことが確認できるはずです。ただし、動作確認はLogInシーンを開いてから行ってください。
- ログインしてゲームを遊ぶと、mobile backendの管理画面内「データストア」メニューに「HighScore」クラスが作成され、ハイスコアが記録されている
- 一度ログアウトして再度ログインすると、保存したハイスコアがゲーム画面右下に表示される
お探しの内容が見つからなかった場合はユーザーコミュニティ
もご活用ください。(回答保証はいたしかねます)
なお、 Expertプラン以上のお客様はテクニカルサポートにてご質問を承らせて頂きます。