2014年11月08日

ゲームのアップグレード (15) | デイリーボーナスを導入しよう!

さて、今回から、さらにゲーム的な要素、デイリーボーナスを入れていこうと思います。
なんかちっちゃいプレゼントでも、あると何となくゲーム起動したくなりますからね。


まずは Soomla LevelUp パッケージの導入から
さて、サーバーが無いんで、ローカルストレージを使うしか無いんですが、Soomla LevelUp パッケージが、暗号化した key-value タイプのローカルストレージに対応してるみたいなんですよね。
なんで、その機能を使う為にこのパッケージをインポートしてみたいと思いますね。

じゃ、ここからパッケージをダウンロード。
Screen Shot 2014-11-06 at 2.23.47 PM.png
さて、インポートしてみたんですが...
なんかエラーでてますね。

どうやら、Soomla の"Profile" モジュールが入ってないから怒られてるみたいです。
また後日入れようと思ってたんですが、一緒に "Profile" モジュールも入れてしまいましょう。

っと、そうですね。Soomla Profile パッケージをインポートしたらエラー消えました。
このパッケージは、SNSとの連携をやってくれるモジュールみたいで、ひとまずゲームが出来てから組み込もうかと思ってたんですよね。
なんで、Profile部分の実装はまた今度やってみようかなと思います。


あれ、ひょっとして間違い???
さ、インポートも完了!早速ローカルストレージを使って....と思ったんですが....
あれっ、実はもう入ってた...?
なんと、Store モジュールを入れた時に一緒にインポートされた、Coreモジュールに入ってたみたいですねっ!

なんで、多分今後 Profile モジュールはまた入れるんですが、一個前のバージョンに戻して、LevelUp も Profile も入ってない事にしますね。
ごめん。


ローカルストレージにユーザーデータを保存
さて、ローカルストレージ。
実は、元々の Store パッケージに入ってた、Core に含まれてる、KeyValueStorage class ってのがあるんで、これを使っていきますね。
Screen Shot 2014-11-08 at 2.02.29 AM.png
ま、正直今まで使ってた PlayerPrefs をラップしてるだけの様な気もしますが、暗号化もしてくれてるはず(ほんとかな?)。

さて、ホントに使い方は単純で、GetValue と SetValue  DeleteKeyValue を使って、文字列の出し入れをするだけですね。
Screen Shot 2014-11-08 at 2.13.42 AM.png


JSON フォーマットでデータを読み書き
さて、さっきの KeyValueStorage を見つけたのとほぼ同時に、JSON形式のデータを扱うクラスを見つけたんですよね。
Screen Shot 2014-11-08 at 2.18.32 AM.png
その名も、JSONObject っていうクラスです!!
いい機会なんで、今後..遠い先の今後のサーバー対応を見据えて、JSONで諸々のデータを扱う様にしてみたいと思います!

で、書いてみましたよ!ログインボーナスのデータ!!
Screen Shot 2014-11-08 at 2.21.46 AM.png
簡単なんだけど、ぱっと見ると、なんか複雑にみえますね...
一番上の階層は、フィールドは3つだけで、"day" と "day_str" と "reward" だけ。
で、最後の "reward" フィールドは "type" と "amount" を一組として、要素数不定の配列になってます。
ここが配列になってるおかげで、一回のボーナスで複数のアイテムを同時に渡せるようにしてみました!

さて、データは出来たんだけど、どうやって読み込もう...?
ちょっとリサーチしてみる、なかなか Unity 便利みたいで、"Resources" フォルダってのを作って、そこにファイルを置くと、結構簡単に読み込めるみたいなんで、これを使ってやってみましょう。
Screen Shot 2014-11-08 at 2.31.01 AM.png
ファイル(2種類ありますが、どっちもJsonフォーマット)を置いて、こんなスクリプトで読み込み!!
    TextAssetlogin_bonus = Resources.Load("LoginBonus"asTextAsset;
さて、結果はどうなのか....?
Screen Shot 2014-11-08 at 2.33.57 AM.png
読み込みは大丈夫そうですね。
で、ここで読んできたテキストデータをJSONObjectにする訳ですが、Soomla 様のおかげで結構簡単です。
newJSONObject(login_bonus.text));
これだけで、テキストがJSONObjectとして処理できる形に変えてくれるみたいなんですよね。スゲー!Soomla▲!!

さ、JSONObject になった後ですが、各フィールドの取り出しはこんな感じ。
まず、テキストデータから作った JsonObject から、配列数をチェックして、その数だけ配列の入れ物を用意。
Screen Shot 2014-11-08 at 2.46.10 AM.png
2次元配列になってるけど、そこは気にしないで。
ボーナス2種類あるからそうなってるだけ。
受け取ってる _obj は、リソースからロードして作ったJSONObjectそのまんま。
106行目で、配列になってる要素を一個ずつ DailyLoginBonus クラスに渡して解析。
Screen Shot 2014-11-08 at 2.46.26 AM.png
62行目〜65行目みたいな感じで、Jsonデータから、各フィールド名を指定して値を取り出し。
"reward" フィールドに関しては、配列になってるんだけど、そこひとかたまりを JSONObject として取り出し。
さらに、リワード要素用の DailyLoginBonusReward クラスに渡して解析。(39行目〜50行目)
さて、これで必要なデータがそろったかな?


※※ 注意 ※※
そうそう、忘れてたんだけど、かっこいい Soomla 様のプラグインなんだけど、一つだけ JSONObject クラスでメソッドの抜けがあったんだよね。
Screen Shot 2014-11-08 at 3.01.30 AM.png
これは SourceTree の diff だけど、文字列のフィールドセットメソッドだけ無くて、これだけ追加しました。
一応動作は大丈夫なはずなんだけど、もしSoomla導入してたら注意してみてね。


さて、JSON、うまく言ってる時はいいけど、ちょっとハマると長いんだよね〜。
なんか今日は頭オーバーヒート気味。

そんな訳で、実際のデイリーボーナス判定はまた次回!!

        にほんブログ村 ゲームブログ×PlayNCBlogへ
 初めてみました。よかったらクリックお願いね ♪


posted by やまけん at 12:41| Comment(0) | Unity | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: