第1章
PlayFabとは
1.1 PlayFabの概要
PlayFabとは、ゲーム開発に特化されたBaas(Backend as a service)の一つです。「バックエンド」というのは、裏のロジック部分のところですね。例えば、ユーザーを管理したり、アイテムを管理したり、ゲーム内通貨(仮想通貨)を管理したりなどです。こういった処理をゼロから実装するとなるとかなり大変で、テストの量も増えるため時間がかかってしまいます。特に個人レベルでひと通り実装するのは、かなりの実装力がないと難しいです。
しかし、PlayFabを使用すれば、バックエンドの処理を自分でゼロから実装することなく、あらゆる機能が実現できます。ゲームを作る上で、バックエンドの部分で他の人と差別化することは難しいと思います。であれば、ユーザーの目に直接触れるフロントエンドや、ゲーム性のところに時間をかけたほうがいいですね。
1.2 スタジオとタイトル
ここで、PlayFabを学ぶ上で欠かせない「スタジオ」と「タイトル」について解説します。
- タイトル:1つのゲームのこと
- スタジオ:複数のタイトルが入る箱のこと
タイトルというのは、1つのゲームのことです。たとえば、ファイ○ルファンタジーやドラゴン○エストとかですね。スタジオというのは、複数のタイトルが入る箱のことです。たとえば、スク○ア・エニックスとかですね。タイトルはソフトの名前、スタジオはソフトを開発している会社名、みたいに考えると覚えやすいかもしれません。画像で見てみると、図1.1のようになります。
画像の通り、スタジオは複数作成することもできます。あまり細かくスタジオを分けると面倒なので、例えば「開発用」「本番用」といった分け方くらいにしておくのがいいかもしれません。
1.3 PlayFabの料金
PlayFabの料金体系はかなり難解のため、完全に理解するのは難しいです。ざっくり「タイトルあたり、10万ユーザーまで無料」ということだけ覚えておけばよいでしょう。個人レベルであれば、このユーザー数を超えるのはかなり難しいと思います。英語ですが、公式サイトの料金一覧が一番わかりやすいです。ユーザー数だけでなく、個別の処理ごとにどのくらいまで無料で使用できるのかが一覧で確認できます。さらに細かく料金体系を知りたい人は、次のリンクが役に立つと思います。
繰り返しになりますが、「タイトルあたり、10万ユーザーまで無料」ということだけ覚えておき、あとは必要に応じて気になるところの料金を個別に調べるのがおすすめです。
1.4 PlayFabの始め方
1.4.1 PlayFabのアカウント登録
PlayFabを使うには無料アカウント登録が必要になります。PlayFab開発公式サイトからアカウント登録をしておきましょう。
1.4.2 タイトルの登録
タイトルの登録をしていきます(図1.2)。赤の米印がついている名前は必須項目です。好きな名前を入力してください。タイトル名は後で変更できるので、何でもいいです。他の入力項目は何を選ぼうと、特に何かの動作が変わることはないので、入力しなくて大丈夫です。自分の中の備忘録みたいな使い方ですかね。
入力が終わったら、「タイトルを作成」を選択しましょう。これでタイトルの作成が完了しました。簡単ですね。
1.4.3 Unityプロジェクトの作成
ここからは、実際にPlayFabをUnityに統合する方法について見ていきます。UnityHubを起動し、新しくUnityプロジェクトを作成しましょう(図1.3)。好きな名前で構いません。
1.4.4 Unity用SDKのインポート
次に、Unity 用 SDK のインポートをしていきます。ダウンロードサイトから、unitypackageをダウンロードしてください。
ダウンロードしたファイルをドラッグアンドドロップで持っていくと、図1.4が表示されるので、そのままインポートしてください。
図1.5のように、PlayFabSDKのフォルダができていればOKです。
これで、Unity上でPlayFabに関するクラスが使えるようになりました。
1.4.5 PlayFab Editor Extensions のインポート
続いて、PlayFab Editor Extensions のインポートをしていきます。ダウンロードサイトから、unitypackageをダウンロードしてください。
ダウンロードしたファイルをドラッグアンドドロップで持っていくと、図1.6が表示されるので、そのままインポートしてください。
これで、Unity上でPlayFabのエディターが使えるようになりました。追加されたエディターの操作については、後で解説します。
1.4.6 PlayFab Editor Extensions の設定
今度は Unity に戻り、PlayFab Editor Extensions を設定していきます。「Window -> PlayFab -> Editor Extensions」の順で選択してください(図1.7)。
すると、図1.8がでてきるので、「LOG IN」をクリックしてください。うっかり「CREATE ACCOUNT」を押してしまわないように注意しましょう。
無事にログイン画面が表示できたら、メールアドレスとパスワードを入力してログインしましょう(図1.9)。
メールアドレス入力中にConsole上でエラーが出ますが、パスワード未入力のエラーなので問題ありません。ログインができたら、SETTINGSタブを選んだあと、スタジオとタイトルIDを設定してください(図1.10)。
スタジオとタイトルIDはリスト形式で選べるので、IDは覚えておく必要はありません。これで PlayFab を使う準備は完了です。
1.4.7 動作確認
簡単に動作確認をするため、C#でログイン処理を書いていきます。まずはC# Scriptを作成しましょう(図1.11)。
クラスの名前は何でもいいですが、私は「PlayFabController」としました。ファイルの中身はリスト1.1をコピペしてください。内容の細かい解説はこのあとに出てくるので、ここでは割愛します。
スクリプトを保存したら、適当に空のオブジェクトを作成して、スクリプトをアタッチしましょう。(図1.12)
ドラッグアンドドロップでもっていくか、Add Componentから追加することができます。エディターの上部にある再生ボタンから、実行してみましょう。Consoleに成功のログが出れば、正常に処理が完了した証拠です。(図1.13)
これで、PlayFabをUnityに組み込むことができました。
■補足:C#SDKでコールバック地獄から抜けられる
UnitySDKを使ったセットアップ方法を紹介してきましたが、処理が複雑になるにつれて、コールバックでさらにAPIを呼ぶことが多くなります。
- 処理A
- 処理Aの成功後、コールバックで処理B
- 処理Bの成功後、コールバックで処理C
このような処理が続いていくと、コールバック地獄になってしまい、ソースコードの可読性も下がってしまいます。そこで、C#SDKを使用することで、コールバックではなく返り値で結果が返ってくるようになるため、コールバック地獄から抜け出すことができます。実行はasync/awaitを使うため、実装もシンプルになります。もしC#SDKで実装をしたい人がいれば、Unity+PlayFabでasync/awaitを使う方法を参考に、組み込みをしてみてください。本書では解説しません。
1.5 GameManagerについて
GameManagerは、PlayFabのデータをWeb上で操作できるツールのことです。すべてのデータをスクリプトから用意したり確認するのはかなり大変なので、こういったGUIベースのツールが用意されているのは本当に助かりますね。左のツールバーで「タイトルの概要」となっているところが、初期表示されるようになっています(図1.14)。ダッシュボードでは、ログイン状況やAPIの呼び出し状況などを簡易的に一覧で見ることができます。
「PlayStreamモニター」のタブを開くと、図1.15が表示されます。ここでは、PlayFabで実行された処理のイベントをリアルタイムで確認することができます。例えばこの画面を開いた状態でPlayFabにログインをすると、ログインのログが表示されます。エラーのログも表示されるので、デバッグにも便利です。
プレイヤーのタブを選ぶと、プレイヤーの一覧を確認することができます(図1.16)。PlayFabでは、ユーザーのことは「プレイヤー」と呼ぶこともあれば、「ユーザー」と呼ぶこともあります。どちらも同じ意味と考えれば問題ありません。セグメントと共有グループデータについては、本書では触れません。
マルチプレイヤーは、自分だけでなく他のユーザーもリアルタイムで通信ができるようにするものです(図1.17)。例えば、他のユーザーと対戦をしたり、チャットをしたりなどです。この機能が使えるとかなりゲームっぽさが出るのですが、かなり難易度が高いので本書では触れません。
グループは、ギルドのような機能を作ることができます(図1.18)。こちらもやや難易度が高いので、本書では触れません。
自動化は、サーバーが処理する機能が集まっています(図1.19)。CloudScriptは、サーバー側で関数を書いておくことで、クライアント側から呼び出しができる仕組みです。サーバー処理とすることで、次のようなメリットがあります。
- データの改ざんがしにくくなる
- リリース後は再リリース無しでプログラム修正ができる
クライアント側で処理をしていると、悪意をもったユーザーがデータの改ざんをする可能性もありますが、サーバー処理とすることで改ざんがしにくくなります。また、ユーザーに配布するプログラムにはCloudScriptが含まれないため、リリース後も再リリース無しでプログラム修正をすることも可能になります。ビルドをしてリリースをして審査をして、という手順を何度も踏むとかなり時間がかかりますよね。この手順を省略できるだけでも、かなりメリットがあると思います。もちろん、クライアントとサーバーで通信が必要になるため、実行には時間がかかります。何でもかんでもサーバー処理とすればいいというわけでもないので、必要な分だけサーバー処理としましょう。使うと便利な機能なのですが、少し難易度が高いので本書では触れません。
アドオンでは、PlayFabと連携することで機能を拡張することができるものです(図1.20)。無料から有料のものまで、表1.1のようにたくさんの種類が用意されています。必要に応じて使うようにすることで、やりたいことをすぐに実現できるかもしれません。
名称 | 概要 |
---|---|
Apple | Sign in with Appleを実装するときなどに使用 |
Facebookアカウントでログインするときに使用 | |
Facebook インスタントゲーム | Facebookインスタントゲームを作るときに使用 |
GooglePlayアカウントでログインするときなどに使用 | |
Kongregate | Kongregateを使うときに使用 |
Nintendo | Nintendo Switchでリリースするときに使用 |
Playstation | Network PS4でリリースするときに使用 |
Steam | Steamでリリースするときに使用 |
Twitch | Twitchを使うときに使用 |
Xbox Live | Xboxでリリースするときに使用 |
ユニバーサル Windows プラットフォーム | MicrosoftStoreでリリースするときに使用 |
セグメント | さらに詳しいデータ分析をするときに使用 |
Photon | マルチプレイヤーの機能を統合するときに使用 |
Amazon Payments | Amazonで支払いをするときに使用 |
PayPal | PayPalで支払いをするときに使用 |
Xsolla | Xsollaで支払いをするときに使用 |
Kochava | 広告の機能を強化したいときに使用 |
GitHub | CloudScriptをPlayFab上でGutHub連携したいときに使用 |
SMTP | メール送信機能を実装するときに使用 |
Community Sift | 表示名から下品な表現をブロックしたいときに使用 |
Innervate | コミュニティの機能を作りたいときに使用 |
Adrian Crook | ゲームに関するコンサルを依頼したいときに使用 |
コマースでは、アイテム、ストア、仮想通貨など、アイテムの売買に関わる機能全般がまとめられています(図1.21)。本書でかなり詳しく解説している部分です。あまり難しいところもなく、入門者でも理解しやすい部分になっています。
ランキングは、ユーザーごとにスコアなどの情報を管理して、簡単にランク付けをすることができる機能です(図1.22)。ランキングの順位に応じて報酬も付与することができるので、よくゲームに実装されているランキング機能を実現することができます。
コンテンツは、マスタ情報を管理しておくことができる機能が集まっています(図1.23)。マスタ情報とは、全ユーザーが共通して使用するデータのことです。特にタイトルデータは、PlayFabを使う上で必ず使うことになる機能です。本書でも詳しく解説しています。
ダッシュボードでは、ログイン状況や収益などの細かい分析結果を見ることができます(図1.24)。開発中に見ることはありませんが、リリース後にチェックすると便利な機能です。
「データ」のイベント履歴は、PlayFabで何かが実行された履歴を確認することができる機能です(図1.25)。先ほど「PlayStreamモニター」という機能で、リアルタイムにイベントの履歴を確認することができると紹介しました。しかし、PlayStreamモニターは一度画面を閉じるとログが消えてしまいます。このイベント履歴を見ることで、過去に発生したイベントを見ることができため、とても重宝する機能です。即時反映されるPlayStreamモニターとは異なり、反映に数分かかるので注意してください。
ざっとですが、全体としてはこんなところです。
1.6 PlayFabのAPIについて
1.6.1 APIの実行形式
PlayFabのAPIはたくさん用意されているのですが、使い方はだいたい表1.2のように統一されています。
引数 | 意味 | 渡す値 |
---|---|---|
〜Request | API呼び出しに必要なパラメータ群 | クラスのインスタンス |
Action<〜Result> | 成功時に実行される処理 | 関数 |
Action<PlayFabError> | 失敗時に実行される処理 | 関数 |
表だけだとわかりにくいと思うので、先ほどログインに使用したスクリプトをもう一度見てみます(リスト1.2)。
LoginWithCustomIDRequest
で、ログインに必要なパラメータを詰め込んで渡します。ここで渡す中身によって、実行結果が変わってくるという仕組みです。result
は、API実行が成功したときに返ってくるコールバック関数です。Action<〜Result>という名前で、APIごとに中身のクラスが異なります。個別に関数を定義しても良いのですが、使い回す用途がないのと、ソースコード量が増えてしまう理由から、ラムダ式で直接書いています。error
は、API実行が失敗したときに返ってくるコールバック関数です。APIごとに異なることはなく、Action<PlayFabError>で統一されています。全部のAPIを確認したわけではないので必ずとは言えませんが、だいたいこの形式になっているので覚えておきましょう。
1.6.2 APIの種類
PlayFabのAPIには、大きく3つの種類があります(表1.3)。
名前 | 用途 |
---|---|
PlayFabClientAPI | クライアント権限で実行するAPI。 |
PlayFabServerAPI | サーバー権限で実行するAPI。一部はクライアントからも実行可能。 |
PlayFabAdminAPI | 管理者権限で実行するAPI。ほぼ使わない。 |
PlayFabClientAPI
は、クライアント権限で実行するAPIです。一番よく使うAPIです。その名の通り、クライアント側から実行します。PlayFabServerAPI
は、サーバー権限で実行するAPIです。基本はサーバー側からしか実行できませんが、仮想通貨の増減やランキングの登録など、一部機能は設定を変更することでクライアント側から実行することもできます。具体的な方法は、本書のこの後の章を参照してください。PlayFabAdminAPI
は、管理者権限で実行するAPIです。かなり深いところまで操作できますが、これを使いこなすのは上級者向けです。通常は使用しないので、特に気にしなくていいでしょう。