2020年2月18日、ついに PlayFab の CloudScript で Azure 関数を実行できるようになりました。
今までは CloudScript で Javascript の言語しか使えなかったため、手が出しにくい分野でした。
ところが、C# でも使えるようになったため、Unity を使っている人はより一層使いやすくなりました。
さらにデバッグもできるようになるので、Azure関数を使うメリットはかなり大きいです。
この記事では、「PlayFab + Unity + Azure関数 + VSCode」を使った環境構築をしてきます。
では、さっそく見ていきましょう。
Azure 関数を呼び出すための環境構築
アカウント登録やインストール系が多いです。上から一つずつやっていきましょう。
VSCode の拡張機能も必要になるので、以下のインストールをしておきましょう。
また、Azure 関数を書くために、ローカルプロジェクトの作成をしておきましょう。
ここで作成したプロジェクトに Azure 関数を追加していきます。
作成後、VSCode のターミナルで以下の2つのコマンドを実行してください。
dotnet add package PlayFabAllSDK
参考:https://www.nuget.org/packages/PlayFabAllSDK/
dotnet add package PlayFabCloudScriptPlugin --version 1.53.190627-alpha
参考:https://www.nuget.org/packages/PlayFabCloudScriptPlugin/1.53.190627-alpha
この2つのコマンドで、ソースコードから PlayFab のモジュール参照ができるようになります。
最後に、プロジェクトファイル(〜.csproj)に DefineConstants のタグを追加してください。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>
<DefineConstants>NETCOREAPP3_1</DefineConstants><!--この1行を追加!!-->
以上でひと通り環境構築は終わりです。
Azure 関数で CloudScript を実行する方法
1から10まで説明していると長くなってしまうので、基礎的な説明は省略します。
クライアント側(Unity)の実装
まずは、クライアント側で必要な処理を書いていきましょう。
ログイン処理の実装
ログイン処理については、「何も考えずにログイン処理を実装する」の記事で詳しく解説しているので、合わせて見てみてください。
Azure関数(CloudScript)の呼び出し
次に、実際の呼び出し処理を書いていきます。
private void CallCSharpExecuteFunction()
{
PlayFabCloudScriptAPI.ExecuteFunction(new ExecuteFunctionRequest()
{
Entity = new PlayFab.CloudScriptModels.EntityKey()
{
Id = PlayFabSettings.staticPlayer.EntityId, //Get this from when you logged in,
Type = PlayFabSettings.staticPlayer.EntityType //Get this from when you logged in
},
FunctionName = "HelloWorld", //This should be the name of your Azure Function that you created.
FunctionParameter = new Dictionary<string, object>() { { "inputValue", "Test" } },
GeneratePlayStreamEvent = true
}, (ExecuteFunctionResult result) =>
{
if (result.FunctionResultTooLarge != null && (bool)result.FunctionResultTooLarge)
{
Debug.Log("This can happen if you exceed the limit that can be returned from an Azure Function," +
" See PlayFab Limits Page for details.");
return;
}
Debug.Log($"The {result.FunctionName} function took {result.ExecutionTimeMilliseconds} to complete");
Debug.Log($"Result: {result.FunctionResult.ToString()}");
}, (PlayFabError error) =>
{
Debug.Log($"Opps Something went wrong: {error.GenerateErrorReport()}");
});
}
と思った人も安心してください。
簡単に言うと、以下のことを処理しているだけです。
実行したログインユーザー1人に対して
引数 inputValue という名前に Test という文字列を入れて
HelloWorld という関数を呼び出す
こうして文字に起こしてみると簡単ですね。
あとは成功したときと失敗したときにそれぞれログが出力されるようになっています。
これをログイン成功時に差し込んであげましょう。
private void OnLoginSuccess(LoginResult result)
{
CallCSharpExecuteFunction();
}
あとは、Start メソッドにログイン処理を入れたら、クライアント側の準備は完了です。
エンティティについては、エンティティのクイックスタートを参照してください。
あとは、以下のツイートでも少し解説しています。
#PlayFab のEntityについて✍️(一部)
✅master_player_account
スタジオ全体で使えるEntity。アクセスキーは$LoginResult.PlayFabIdを使用。
最大1つまで。✅title_player_account
個別のタイトルで使えるEntity。アクセスキーは$LoginResult.EntityToken.Entity.Idを使用。
最大5つまで。
(続く— ねこじょーかー@Unity勉強中 (@nekojoker1234) February 9, 2020
$LoginResult.EntityToken.Entity.Typeは「title_player_account」が初期値になっているようです。他のEntityデータを取りたい場合は、事前にGetObjectsRequestをしておきましょう💡
(ちなみに「$」は、勝手にリンクになってしまうのを防ぐために付けているだけです)— ねこじょーかー@Unity勉強中 (@nekojoker1234) February 9, 2020
サーバー側(Azure 関数)の実装
次に、サーバー側の実装をしていきます。
HelloWorld の実装
最初につくるメソッドと言えば「HelloWorld」ですね。
まずは公式ドキュメントに記載の通り、こちらを実装します。
[FunctionName("HelloWorld")]
public static async Task<dynamic> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestMessage req,
ILogger log)
{
/* Create the function execution's context through the request */
var context = await FunctionContext<dynamic>.Create(req);
var args = context.FunctionArgument;
var message = $"Hello {context.CurrentPlayerId}!";
log.LogInformation(message);
dynamic inputValue = null;
if (args != null && args["inputValue"] != null)
{
inputValue = args["inputValue"];
}
log.LogDebug($"HelloWorld: {new { input = inputValue } }");
return new { messageValue = message };
}
簡単に言うと、以下のことを処理しています。
HelloWorld という Azure 関数名を実行し
引数で受け取った inputValue をログ出力しつつ
自分のプレイヤー ID を返り値として返す
難しくないですね。
この状態でクライアントから実行すると、Azure に登録されている HelloWorld が呼び出されて、上記のメソッドが呼び出されるという仕組みです。
Azure関数の登録
HelloWorld が書けたら、Azure へのサインインとAzure にプロジェクトを発行するを参考に、Azure 関数を登録します。
初回は5分くらい時間がかかりましたが、2回目以降は30秒くらいで終わりました。
PlayFab の CloudScript に登録
Azure 関数を登録するだけではダメで、さらに PlayFab の CloudScript と紐付けをする必要があります。
まずは VSCode で、Azure に登録した関数の URL を取得します。
- 左の Azure アイコンをクリック
- 反映したい関数を右クリック
- Copy Function Url をクリック

次に、コピーした URL を PlayFab に登録します。
- 左の PlayFab アイコンをクリック
- 反映したいタイトルを右クリック
- Register HTTP function をクリック

その後、先ほどコピーした URL とファンクション名を入力すれば、登録完了です。
PlayFab の画面上からも登録されたことが確認できます。

Azure関数を実行
Unity を実行して、Azure 関数を呼び出してみましょう。
成功すると、以下のようにログが出力されます。

まとめ
Azure 関数で CloudScript を実行する方法を見てきました。
簡単にまとめると、以下のようになります。
- クライアント側(Unity)に、CloudScript を呼び出す処理を書く
- サーバー側(Azure 関数)に、実態の処理を書く
- Azure 関数を Azure に登録
- Azure関数 を PlayFab の CloudScript として登録
こう見ると、そこまで難しくないですね。
ということで、みなさんも CloudScript と Azure 関数を連携させて、サーバー処理とクライアント処理を C# で統一していきましょう。

日本で初めて、PlayFab の参考書を発売しました。
100時間以上の学習内容を凝縮した参考書です。入門として必要な知識は、すべてこの本に記載しました(無料版もあります)。