第1章
PlayFabとは

2018年1月にMicrosoftに買収されたPlayFabとは、一体どんなサービスなのでしょうか。本章では、PlayFabの概要とUnityへの組み込み方について解説します。

1.1 PlayFabの概要

PlayFabとは、ゲーム開発に特化されたBaas(Backend as a service)の一つです。「バックエンド」というのは、裏のロジック部分のところですね。例えば、ユーザーを管理したり、アイテムを管理したり、ゲーム内通貨(仮想通貨)を管理したりなどです。こういった処理をゼロから実装するとなるとかなり大変で、テストの量も増えるため時間がかかってしまいます。特に個人レベルでひと通り実装するのは、かなりの実装力がないと難しいです。

しかし、PlayFabを使用すれば、バックエンドの処理を自分でゼロから実装することなく、あらゆる機能が実現できます。ゲームを作る上で、バックエンドの部分で他の人と差別化することは難しいと思います。であれば、ユーザーの目に直接触れるフロントエンドや、ゲーム性のところに時間をかけたほうがいいですね。

1.2 スタジオとタイトル

ここで、PlayFabを学ぶ上で欠かせない「スタジオ」と「タイトル」について解説します。

  • タイトル:1つのゲームのこと
  • スタジオ:複数のタイトルが入る箱のこと

タイトルというのは、1つのゲームのことです。たとえば、ファイ○ルファンタジーやドラゴン○エストとかですね。スタジオというのは、複数のタイトルが入る箱のことです。たとえば、スク○ア・エニックスとかですね。タイトルはソフトの名前、スタジオはソフトを開発している会社名、みたいに考えると覚えやすいかもしれません。画像で見てみると、図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.2: タイトルの作成

入力が終わったら、「タイトルを作成」を選択しましょう。これでタイトルの作成が完了しました。簡単ですね。

1.4.3 Unityプロジェクトの作成

ここからは、実際にPlayFabをUnityに統合する方法について見ていきます。UnityHubを起動し、新しくUnityプロジェクトを作成しましょう(図1.3)。好きな名前で構いません。

Unityプロジェクトの作成

図1.3: Unityプロジェクトの作成

1.4.4 Unity用SDKのインポート

次に、Unity 用 SDK のインポートをしていきます。ダウンロードサイトから、unitypackageをダウンロードしてください。

ダウンロードしたファイルをドラッグアンドドロップで持っていくと、図1.4が表示されるので、そのままインポートしてください。

UnitySDKのインポート

図1.4: UnitySDKのインポート

図1.5のように、PlayFabSDKのフォルダができていればOKです。

UnitySDKのインポート完了

図1.5: UnitySDKのインポート完了

これで、Unity上でPlayFabに関するクラスが使えるようになりました。

1.4.5 PlayFab Editor Extensions のインポート

続いて、PlayFab Editor Extensions のインポートをしていきます。ダウンロードサイトから、unitypackageをダウンロードしてください。

ダウンロードしたファイルをドラッグアンドドロップで持っていくと、図1.6が表示されるので、そのままインポートしてください。

PlayFab Editor Extensionsのインポート

図1.6: PlayFab Editor Extensionsのインポート

これで、Unity上でPlayFabのエディターが使えるようになりました。追加されたエディターの操作については、後で解説します。

1.4.6 PlayFab Editor Extensions の設定

今度は Unity に戻り、PlayFab Editor Extensions を設定していきます。「Window -> PlayFab -> Editor Extensions」の順で選択してください(図1.7)。

PlayFab Editor の起動

図1.7: PlayFab Editor の起動

すると、図1.8がでてきるので、「LOG IN」をクリックしてください。うっかり「CREATE ACCOUNT」を押してしまわないように注意しましょう。

PlayFabのログインボタンをクリック

図1.8: PlayFabのログインボタンをクリック

無事にログイン画面が表示できたら、メールアドレスとパスワードを入力してログインしましょう(図1.9)。

EmailとPasswordを入力してログイン

図1.9: EmailとPasswordを入力してログイン

メールアドレス入力中にConsole上でエラーが出ますが、パスワード未入力のエラーなので問題ありません。ログインができたら、SETTINGSタブを選んだあと、スタジオとタイトルIDを設定してください(図1.10)。

スタジオとタイトルIDを選択

図1.10: スタジオとタイトルIDを選択

スタジオとタイトルIDはリスト形式で選べるので、IDは覚えておく必要はありません。これで PlayFab を使う準備は完了です。

1.4.7 動作確認

簡単に動作確認をするため、C#でログイン処理を書いていきます。まずはC# Scriptを作成しましょう(図1.11)。

C#スクリプトの作成

図1.11: C#スクリプトの作成

クラスの名前は何でもいいですが、私は「PlayFabController」としました。ファイルの中身はリスト1.1をコピペしてください。内容の細かい解説はこのあとに出てくるので、ここでは割愛します。

リスト1.1: ログイン処理のサンプル
using PlayFab;
using PlayFab.ClientModels;
using UnityEngine;

public class PlayFabController : MonoBehaviour
{
    void Start()
    {
        PlayFabClientAPI.LoginWithCustomID(new LoginWithCustomIDRequest
        {
            CustomId = "GettingStartedGuide",
            CreateAccount = true
        }
        , result =>
        {
            Debug.Log("おめでとうございます!ログイン成功です!");
        }
        , error =>
        {
            Debug.Log("ログイン失敗...(´;ω;`)");
        });
    }
}

スクリプトを保存したら、適当に空のオブジェクトを作成して、スクリプトをアタッチしましょう。(図1.12

スクリプトのアタッチ

図1.12: スクリプトのアタッチ

ドラッグアンドドロップでもっていくか、Add Componentから追加することができます。エディターの上部にある再生ボタンから、実行してみましょう。Consoleに成功のログが出れば、正常に処理が完了した証拠です。(図1.13

ログイン成功のログ

図1.13: ログイン成功のログ

これで、PlayFabをUnityに組み込むことができました。

■補足:C#SDKでコールバック地獄から抜けられる

UnitySDKを使ったセットアップ方法を紹介してきましたが、処理が複雑になるにつれて、コールバックでさらにAPIを呼ぶことが多くなります。

  1. 処理A
  2. 処理Aの成功後、コールバックで処理B
  3. 処理Bの成功後、コールバックで処理C

このような処理が続いていくと、コールバック地獄になってしまい、ソースコードの可読性も下がってしまいます。そこで、C#SDKを使用することで、コールバックではなく返り値で結果が返ってくるようになるため、コールバック地獄から抜け出すことができます。実行はasync/awaitを使うため、実装もシンプルになります。もしC#SDKで実装をしたい人がいれば、Unity+PlayFabでasync/awaitを使う方法を参考に、組み込みをしてみてください。本書では解説しません。

1.5 GameManagerについて

GameManagerは、PlayFabのデータをWeb上で操作できるツールのことです。すべてのデータをスクリプトから用意したり確認するのはかなり大変なので、こういったGUIベースのツールが用意されているのは本当に助かりますね。左のツールバーで「タイトルの概要」となっているところが、初期表示されるようになっています(図1.14)。ダッシュボードでは、ログイン状況やAPIの呼び出し状況などを簡易的に一覧で見ることができます。

ダッシュボード

図1.14: ダッシュボード

「PlayStreamモニター」のタブを開くと、図1.15が表示されます。ここでは、PlayFabで実行された処理のイベントをリアルタイムで確認することができます。例えばこの画面を開いた状態でPlayFabにログインをすると、ログインのログが表示されます。エラーのログも表示されるので、デバッグにも便利です。

PlayStream

図1.15: PlayStream

プレイヤーのタブを選ぶと、プレイヤーの一覧を確認することができます(図1.16)。PlayFabでは、ユーザーのことは「プレイヤー」と呼ぶこともあれば、「ユーザー」と呼ぶこともあります。どちらも同じ意味と考えれば問題ありません。セグメントと共有グループデータについては、本書では触れません。

プレイヤー

図1.16: プレイヤー

マルチプレイヤーは、自分だけでなく他のユーザーもリアルタイムで通信ができるようにするものです(図1.17)。例えば、他のユーザーと対戦をしたり、チャットをしたりなどです。この機能が使えるとかなりゲームっぽさが出るのですが、かなり難易度が高いので本書では触れません。

マルチプレイヤー

図1.17: マルチプレイヤー

グループは、ギルドのような機能を作ることができます(図1.18)。こちらもやや難易度が高いので、本書では触れません。

グループ

図1.18: グループ

自動化は、サーバーが処理する機能が集まっています(図1.19)。CloudScriptは、サーバー側で関数を書いておくことで、クライアント側から呼び出しができる仕組みです。サーバー処理とすることで、次のようなメリットがあります。

  • データの改ざんがしにくくなる
  • リリース後は再リリース無しでプログラム修正ができる

クライアント側で処理をしていると、悪意をもったユーザーがデータの改ざんをする可能性もありますが、サーバー処理とすることで改ざんがしにくくなります。また、ユーザーに配布するプログラムにはCloudScriptが含まれないため、リリース後も再リリース無しでプログラム修正をすることも可能になります。ビルドをしてリリースをして審査をして、という手順を何度も踏むとかなり時間がかかりますよね。この手順を省略できるだけでも、かなりメリットがあると思います。もちろん、クライアントとサーバーで通信が必要になるため、実行には時間がかかります。何でもかんでもサーバー処理とすればいいというわけでもないので、必要な分だけサーバー処理としましょう。使うと便利な機能なのですが、少し難易度が高いので本書では触れません。

自動化

図1.19: 自動化

アドオンでは、PlayFabと連携することで機能を拡張することができるものです(図1.20)。無料から有料のものまで、表1.1のようにたくさんの種類が用意されています。必要に応じて使うようにすることで、やりたいことをすぐに実現できるかもしれません。

アドオン

図1.20: アドオン

表1.1: アドオン一覧

名称 概要
Apple Sign in with Appleを実装するときなどに使用
Facebook Facebookアカウントでログインするときに使用
Facebook インスタントゲーム Facebookインスタントゲームを作るときに使用
Google 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.21: コマース

ランキングは、ユーザーごとにスコアなどの情報を管理して、簡単にランク付けをすることができる機能です(図1.22)。ランキングの順位に応じて報酬も付与することができるので、よくゲームに実装されているランキング機能を実現することができます。

ランキング

図1.22: ランキング

コンテンツは、マスタ情報を管理しておくことができる機能が集まっています(図1.23)。マスタ情報とは、全ユーザーが共通して使用するデータのことです。特にタイトルデータは、PlayFabを使う上で必ず使うことになる機能です。本書でも詳しく解説しています。

コンテンツ

図1.23: コンテンツ

ダッシュボードでは、ログイン状況や収益などの細かい分析結果を見ることができます(図1.24)。開発中に見ることはありませんが、リリース後にチェックすると便利な機能です。

ダッシュボード

図1.24: ダッシュボード

「データ」のイベント履歴は、PlayFabで何かが実行された履歴を確認することができる機能です(図1.25)。先ほど「PlayStreamモニター」という機能で、リアルタイムにイベントの履歴を確認することができると紹介しました。しかし、PlayStreamモニターは一度画面を閉じるとログが消えてしまいます。このイベント履歴を見ることで、過去に発生したイベントを見ることができため、とても重宝する機能です。即時反映されるPlayStreamモニターとは異なり、反映に数分かかるので注意してください。

データ

図1.25: データ

ざっとですが、全体としてはこんなところです。

1.6 PlayFabのAPIについて

1.6.1 APIの実行形式

PlayFabのAPIはたくさん用意されているのですが、使い方はだいたい表1.2のように統一されています。

表1.2: PlayFabのAPI実行のルール

引数 意味 渡す値
〜Request API呼び出しに必要なパラメータ群 クラスのインスタンス
Action<〜Result> 成功時に実行される処理 関数
Action<PlayFabError> 失敗時に実行される処理 関数

表だけだとわかりにくいと思うので、先ほどログインに使用したスクリプトをもう一度見てみます(リスト1.2)。

リスト1.2: ログイン処理のサンプルの抜粋
PlayFabClientAPI.LoginWithCustomID(new LoginWithCustomIDRequest
{
    CustomId = "GettingStartedGuide",
    CreateAccount = true
}
, result =>
{
    Debug.Log("おめでとうございます!ログイン成功です!");
}
, error =>
{
    Debug.Log("ログイン失敗...(´;ω;`)");
});

LoginWithCustomIDRequestで、ログインに必要なパラメータを詰め込んで渡します。ここで渡す中身によって、実行結果が変わってくるという仕組みです。resultは、API実行が成功したときに返ってくるコールバック関数です。Action<〜Result>という名前で、APIごとに中身のクラスが異なります。個別に関数を定義しても良いのですが、使い回す用途がないのと、ソースコード量が増えてしまう理由から、ラムダ式で直接書いています。errorは、API実行が失敗したときに返ってくるコールバック関数です。APIごとに異なることはなく、Action<PlayFabError>で統一されています。全部のAPIを確認したわけではないので必ずとは言えませんが、だいたいこの形式になっているので覚えておきましょう。

1.6.2 APIの種類

PlayFabのAPIには、大きく3つの種類があります(表1.3)。

表1.3: PlayFabのAPIの種類

名前 用途
PlayFabClientAPI クライアント権限で実行するAPI。
PlayFabServerAPI サーバー権限で実行するAPI。一部はクライアントからも実行可能。
PlayFabAdminAPI 管理者権限で実行するAPI。ほぼ使わない。

PlayFabClientAPIは、クライアント権限で実行するAPIです。一番よく使うAPIです。その名の通り、クライアント側から実行します。PlayFabServerAPIは、サーバー権限で実行するAPIです。基本はサーバー側からしか実行できませんが、仮想通貨の増減やランキングの登録など、一部機能は設定を変更することでクライアント側から実行することもできます。具体的な方法は、本書のこの後の章を参照してください。PlayFabAdminAPIは、管理者権限で実行するAPIです。かなり深いところまで操作できますが、これを使いこなすのは上級者向けです。通常は使用しないので、特に気にしなくていいでしょう。

試し読みはここまでです。
この続きは、製品版でお楽しみください。