基本
PlayFab とは、ゲーム開発に特化された Baas(Backend as a service)の一つです。
「バックエンド」というのは、裏のロジック部分のところですね。
例えば、ユーザーを管理したり、アイテムを管理したり、ゲーム内通貨(仮想通貨)を管理したりなどです。
こういった処理をゼロから実装するとなるとかなり大変で、テストの量も増えるため時間がかかってしまいます。
特に個人レベルでひと通り実装するのは、かなりの実装力がないと難しいです。
しかし、PlayFab の API を使用すれば、自分でゼロから実装することなくあらゆる機能が実現できます。
ゲームを作る上で、バックエンドの部分で他の人と差別化することは難しいと思います。
であれば、ユーザーの目に直接触れるフロントエンドや、ゲーム性のところに時間をかけたほうがいいですね。
もし少しでも興味がわいたら、PlayFabの始め方【環境構築から初回ログインまで】を参考に触ってみてください。
以下のスライドもわかりやすいのでおすすめです。
公式ドキュメントが用意されています。
基本は公式ドキュメントでいいのですが、どうしてもわかりにくいところがあるので、このブログを立ち上げました。
安心してください。私もよくわかっていません。
PlayFab の料金体系は、かなり難解です。
ざっくり「タイトルあたり、10万ユーザーまで無料」ということだけ覚えておけばよいでしょう。
PlayFab の料金体系を完璧に理解したなら、それはあなたが PlayFab マスターになった証拠です。
「もっと詳しく知りたい!」という人のために、料金体系に関するドキュメントをまとめておきます。
以下の公式ドキュメントで情報的には網羅していると思うのですが、イマイチまとまっていないのが残念なところですね。
料金体系の細かい点を知りたい人は、上記の記事をチェックしてみてください。
英語ですが、PlayFab Community で質問をすることができます。
初回は質問が反映されるまでに2〜3日かかりますが、反映されてからは1日以内に質問が返ってきました。
質問する前に、Community で同様の質問がないかも調べてみましょう。
ゲームマネージャー
以下から確認することができます。
「タイトルの設定 > 制限」と進んでいくと、一覧で確認することができます。
認証
一番簡単なのは、Login With Custom ID ですね。
ただ、何も考えずにログイン処理を実装する記事では、1行でログインする方法を紹介しているので、こちらも参照してみてください。
ログイン時に「変わらないユニークキー」を使用する方法を参照してください。
iOS の場合は、Sign in with Apple を使ったログインが必須となっています。
Sign in with Apple を「簡単に」統合する方法を見ながら実装してみてください。
わざわざ個別の API を呼び出さなくても、ログインと同時に各種データを取得する方法があります。
詳しくは、ログインと同時にいろいろなデータを取得する方法を参照してください。
実は、タイトルプレイヤーの削除をしても、マスタープレイヤーが残っていれば、新規プレイヤー扱いとはなりません。
#PlayFab の細かすぎて伝わらない小ネタ
タイトルプレイヤーの削除をして再度ログインしても、LoginResult の NewlyCreated(このログインでユーザーを作成したか)は false になりました。マスタープレイヤーの削除、またはリンクを外すと、新規プレイヤー扱いになって、true になるようですね💡 pic.twitter.com/Hwdvzg2Erb
— ねこじょーかー@PlayFab発信中 (@nekojoker1234) March 21, 2020
データ
タイトルデータとは、「ユーザー全員が共通して使うデータ」のことです。
いわば「マスタデータ」を管理するものですね。
プレイヤーデータとは、それぞれのプレイヤーが持っているデータのことです。
例えば、ランクや名前、経験値などを管理する目的で使用します。
さらに詳しく知りたい人は、プレイヤーデータとタイトルデータを理解する記事をご覧ください。
「タイトルの設定 > クライアントプロフィールオプション」と進んでいくと、表示名などをクライアントからアクセスできるかを設定することができます。
自動化
Cloud Script を使用しなくても、クライアント側の API で同じ処理が可能なことが多いです。
PlayFab に関わらずサーバー処理を使うメリットの一つとしては、悪意を持ったユーザーのデータ改ざんがしにくくなることです。
アプリをインストールすると個々の端末にビルドされたファイルがダウンロードされますが、これを解析して内容を改ざんすることもやろうと思えばできます。
たとえば、1クエストクリアしたら100Gしか手に入らないはずが、10,000G手に入るようにする、とかですね。
こういった処理をサーバーでやっていれば、改ざんはグッと難しくなります。
ダウンロードしてくるファイルに内部処理が入っていないからですね。
じゃあ全部の処理をサーバーでやればいいかというと、通信が増えるとパフォーマンスが悪くなるのでそういうわけにもいきません。
クライアントとサーバーで適切に処理を分けることで、パフォーマンスを落とすことなくデータ改ざんも防げるようになります。
PlayFab 側としても、サーバーでやってほしい処理は、初期設定でサーバーでしか処理できないようになっているので、わかりやすいです。
最初は全部クライアント側で実装でもいいですが、最終的にはAzure関数でCloudScriptを実行する方法を見ながらサーバー処理も実装してみましょう。
残念なことに、現在は Javascript しか対応していません。
ですが、Azure Functions を使用することで、サーバー処理を C# で書くことが可能になります。
詳しくは、Azure関数でCloudScriptを実行する方法を参照してください。
現時点では、Javascript で書いた Cloud Script をデバッグすることはできません。
Azure Functions はデバッグすることができます。
詳しくは、Azure関数をローカルでデバッグする方法【VSCodeを使用】を参照してください。
Azure関数でCloudScriptを実行する方法を読みながら、まずは環境構築から始めてみましょう。
リワード広告を統合する方法【UnityAdsを使用】を参照してください。
GitHub でサンプルプログラムも用意しています。
サンプルは UnityAds ですが、概念としては AdMob など他の広告サービスにも流用できるはずです。
実は、Handlers.cs にサンプルが載っています。
かなり参考になりますよ。
残念ながら、サーバー処理をロールバックすることはできません。
複数の処理を1度で実行している場合、途中でエラーになったとしても最初の処理はコミットされしまいます。
「アイテムと同時に仮想通貨を付与する」といった処理であれば、コンテナやバンドルの使用が推奨されています。
参考:Best practices – Cloud Script error handling and rollbacks
無料プランの場合、一定時間接続がなければ実行に 10 秒ほど時間がかかってしまう仕様になっています。
仕事前に南さんのスライドを見直していたのですが、先日「アクションとルールから Azure Functions を実行すると、タイムアウトすることがある」と言っていた件は、コールドスタートが原因っぽいですね。この場合は、スライドの回避策を取るか、Javascript で書けば解決💡https://t.co/DgthHEhuhD pic.twitter.com/oy5pPT5swC
— ねこじょーかー@PlayFab発信中 (@nekojoker1234) June 3, 2020
コマース
PlayFab では、改ざんを防ぐためサーバー処理としてほしい API は、クライアントから更新できない初期値設定になっています。
PlayFab の管理画面から「タイトルの設定 > API機能」と進むと、以下の項目が発見できます。
ここでチェックを付けると、クライアントから更新できるようになります。
App Store や Google Play にリリースするものは、Unity IAP(アプリ内課金)で実装する必要があります。
IAP を実装する方法については、アプリ内課金(IAP)を統合する方法を参照してください。
上記以外の方法(WebGL や Windows ストアなど)の場合は、以下の決済方法があります。
Xsolla(エクソラ)
いろんなプラットフォームでの決済ができるようになります。
詳細は、リアルマネーでアイテムを購入する手順【Xsolla編】で解説しています。
Steam
Steam でゲームをリリースするときには必須です。
詳細は、リアルマネーでアイテムを購入する手順【Steam編】で解説しています。
Facebook でゲームをリリースするときにだけ使えます。
この記事で解説する予定はありません。
PayPal
途中までは、PlayFab:現実のお金とゲーム内仮想通貨というスライドがとてもわかりやすいです。
それ以降は、以下の課題が解決できず、難しくて途中で挫折してしまいました。
#PlayFab PayPal連携まとめ💡
✅PayPalのWebは自分で表示する
PlayFabからは、URLしか渡してくれません。
開くだけならApplication.OpenURLで可能です。✅ユーザーの操作を待機できない
上記の方法だと開くだけなので、購入したのかキャンセルしたのかは判断ができません。(続く
— ねこじょーかー@PlayFab発信中 (@nekojoker1234) February 2, 2020
PayPalのAPIで参考になりそうなWebページのまとめです😌
・DoExpressCheckoutPayment API Operation (NVP)https://t.co/P0HBuIb67d
・PayPal-NET-SDKhttps://t.co/kEQaYhSJGA
・PayPal NVP/SOAP API SDKshttps://t.co/ibe9VORuzp
・DoExpressCheckoutPayment.aspx.cshttps://t.co/RMcM5C1zvb
— ねこじょーかー@PlayFab発信中 (@nekojoker1234) February 2, 2020
もし興味がある人はチャレンジしてみてください。
PlayFab の「ドロップテーブル」という機能を使うことで実装できます。
詳しくは、ドロップテーブルを使ってアイテムを付与する手順を参照してください。
一言でいうと、「アイテムの詰め合わせ」のことです。
例えば、「りんご、みかん、もも」というアイテムを一つにまとめたものを、バンドルとして販売することができます。
実際は「リアルマネーでジェムを販売する」という使い方が多いと思います。
詳しくは、ストアでバンドルを売る手順を参照してください。
コンテナとは、開くまでは1つのアイテムとしてインベントリに置いておけるものです。
「人からもらったプレゼント」と考えるとイメージが付きやすいかもしれません。
また、鍵のアイテムを使わないとコンテナを開けないようにする、という設定もあります。
詳しくは、コンテナを自由自在に操る方法を参照してください。
PlayFab では、仮想通貨の機能を応用することでスタミナ機能の実装ができます。
詳しくは、スタミナ機能を実装する方法を参照してください。
エンゲージメント
ソーシャル
フレンド機能を実装する方法を参照してください。
専用の機能があるわけではありませんが、PlayFab の機能を使って実現することはできます。
詳しくは、友達の紹介コードから特典を付与する方法を参照してください。
その他
PlayFabEditorExtensions を使っている人は、以下の操作をしてからコミットしましょう。
・Editor 上からログアウトする
・「PlayFabEditorExtensions / Editor / Resources / PlayFabEditorPrefsSO.asset」を開き、自分のメールアドレスを削除
これをやらないと、メールアドレスやタイトル ID が公開されてしまいます。