ひさめのあんりある日記

アンリアルエンジンで自分がつまづいたところとかをかきます。不定期更新。

【UE4 × Playfab】データの書き込み/読み取りを行う

どうも。就活がつらいです。

 

今回はMicroSoft Azureの機能のひとつである、Playfabの記事です。

UE4でのPlayfabの情報がぜんぜんなくて辛かったので、備忘録程度に記事にしていこうかと。

 

公式ドキュメントにプラグインのセットアップ&ログインの記事はあるので、そこは省いていきます。

Unreal MarketPlace Plugin Getting Started

https://api.playfab.com/docs/getting-started/unreal-mkpl-getting-started

 

Playfabにはいろんな機能がありますが、今回紹介するのはプレイヤーデータの書き込み/読み取りです。

ユーザーデータの管理やバックアップなど、結構基本的な機能だと思うので最初はここから実装してみよう!って人も多いんじゃないでしょうかね。僕もそうでした。

 

というわけで早速書いていきたいと思います。まずは「データの書き込み」から

データの書き込み

Playfabでは通信にJson形式を採用していて、書き込み/読み取りではJson形式でやり取りします。

データの書き込みを行うには、まずJsonファイルの作成を行います。

f:id:Fire_rain:20190713205649p:plain


書き込みたいデータ(この例ではInt型のプレイ時間)をString型に変換し、「Construct Json String Value」に繋ぎます。

その後、「As Object」でJsonファイルを作り、FieldNameを設定します。

f:id:Fire_rain:20190713210038p:plain

FieldNameがキー、Construct Json String Valueで設定した値がバリューに対応します。

これでJsonファイルが作成できたので、書き込みを行います。

f:id:Fire_rain:20190713210233p:plain

「Make Client UpdateUserDataRequest」でリクエストを作成します。

Data…書き込むデータ。As Objectで作成したデータを繋ぎます。

Keys To Remove…書き込む時に消したいデータがある場合に、そのデータのキーを入力しまうs。

Permission…データのPermissionのオプションです。Public/Privateを選択できます。

Authentication Context…詳しくは分かりませんが、Microsoftで使われているOpenIdなどの認証コンテキストクラスだと思います。Clientが認証に対して要求できる情報だった思いますが、分かったら詳しく書きます。(ここは弄らなくても書き込みは行えます)

 

以上を設定したら、リクエストデータを「Updete User Data」に接続します。

これで書き込みは終了です。OnSuccessとOnFailuerのデリゲートバインドがあるので、成功時のPrintStringなどを繋いでおくと分かりやすいと思います。

データの読み込み

次はデータの読み込み。先ほど書き込んだデータを読み取ってみたいと思います。

今回は読み取りなので、Jsonファイルの作成はなく、リクエストデータを作ってリクエストを送るだけです。

f:id:Fire_rain:20190713211954p:plain

「Make Client GetUserDataRequest」でリクエストデータを作成します。

if Changed from Data Version…呼び出し元のバージョンです。システムのバージョンがこれより大きければ、すべてのキーのデータが返ってきます。

Keys…読み込むデータのキーです。

Play fab Id…PlayfabのユーザーIDです。ログイン時に作成したIDを使いましょう。

Authentication Context…省略

 

以上を設定したら、リクエストデータを「Get User Data」に接続します。

これで読み取りは終了です。OnSuccessデリゲートにResultDataが返ってきます。

これがデータが入ったJsonファイルになるので、これを分解すればバリューが取れると思います。

分解に関しては、ブループリントではイマイチ効率のいい方法が見つからずかなり力技っぽくなってしまいました。

f:id:Fire_rain:20190713213510p:plain

C++だと

f:id:Fire_rain:20190713213925p:plain

こういう感じでキーとバリューを配列でゲットできるので楽なんですが…

もしこういう方法もあるぜ!!みたいなのがあればこっそり教えてください。

 

・おわり

これで書き込み、読み取りは終わりです。ちょっと長くなりましたが、処理自体はとても簡単にできます。Playfabは他にも機能がいっぱいありますし、しかも無料です。手を出してみたいな~と思っているひとや難しそう…と思ってる人も、みんな使ってみましょう!(ダイレクトマーケティング

 

追記:

GetUserDataやUpdateUserDataは非同期処理なので関数内では使えないよ。