Azure PlayFab
Unity SDK vs C# SDK
2020/07/26 PlayFab Meetup #4
南 @y_minami
自己紹介
名前 : 南 @_y_minami
所属 : miraibox.inc
仕事 : Game Programmer(Unity + .NET + GCP)
好き : C# .NET Unity Azure PlayFab 紅茶
一緒に働いてくれる C#er を大募集中です!
今日お伝えしたいこと
今日お伝えしたいこと
Unity + PlayFab の開発で使用できる SDK は 2 種類あります。
- 古い Unity やWebGL でも動作する Unity SDK
- API 呼び出しが async/await スタイルで使いやすい C# SDK
実は Unity SDK 一択ではありません。
お好みにあわせてご利用ください。
アジェンダ
- PlayFab には多数の SDK が存在する話
- Unity で使用できる PlayFab SDK の話
- PlayFab C# SDK の導入方法と使用例の紹介
PlayFab には多数の SDK が存在する話
PlayFab には多数の SDK が存在する話
サポートされている言語
C# C++ Java Objective-C Python PHP Lua JavaScript ActionScript
カバーしている範囲が広い!
PlayFab には多数の SDK が存在する話
しかも 1 言語につき 1 SDK ではない
たとえばC++
- Unreal Marketplace Plugin(Unreal Engine 用プラグイン)
- Cocos2d-x SDK(Cocos2d-x 用 SDK)
- XPlat Cpp SDK(汎用的なC++ SDK)
※GSDK や Party SDK のような追加機能用 SDK はここでは省略
たとえば JavaScript
- JavaScript SDK(フロントエンド用 SDK)
- NodeJS SDK(バックエンド用 SDK)
Unity で使用できる PlayFab SDK の話
Unity で使用できる PlayFab SDK の話
使える SDK は 2 種類。
- Unity SDK(Unity 用 SDK)
- C# SDK(汎用的な C# SDK)
Unity で使用できる PlayFab SDK の話
使える SDK は 2 種類。
- Unity SDK(Unity 用 SDK)
- C# SDK(汎用的な C# SDK)
Unity では Unity SDK を使いましょう。
Not Unity なアプリケーションや、サーバーサイドの API や
Azure Functions では C# SDK を使いましょう。
Unity で使用できる PlayFab SDK の話
使える SDK は 2 種類。
- Unity SDK(Unity 用 SDK)
- C# SDK(汎用的な C# SDK)
Unity では Unity SDK を使いましょう。
Not Unity なアプリケーションや、サーバーサイドの API や
Azure Functions では C# SDK を使いましょう。
というのが基本ですが、
今日はここに一石を投じてみたいと思います。
PlayFab Unity SDK の特徴
PlayFab Unity SDK は Unity 5.3 以降 で動作が保証されている。
かなり古い Unity でも OK!
プラットフォームも PC でも iOS/Android でもWebGL でも OK!
PlayFab Unity SDK の特徴
PlayFab Unity SDK は Unity 5.3 以降 で動作が保証されている。
かなり古い Unity でも OK!
プラットフォームも PC でも iOS/Android でもWebGL でも OK!
めでたしめでたし!
とはいかず、その代償がある。
代償 = コールバックスタイルのコード
たとえばログインのコード。
public void Start()
{
var request = new LoginWithCustomIDRequest { CustomId = “xxx“ };
PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure);
}
private void OnLoginSuccess(LoginResult result)
{
Debug.Log("ログイン成功したときの処理をここに書く");
}
private void OnLoginFailure(PlayFabError error)
{
Debug.LogWarning(“ログイン失敗したときの処理をここに書く");
}
代償 = コールバックスタイルのコード
たとえばログインのコード。
public void Start()
{
var request = new LoginWithCustomIDRequest { CustomId = “xxx“ };
PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure);
}
private void OnLoginSuccess(LoginResult result)
{
Debug.Log("ログイン成功したときの処理をここに書く");
}
private void OnLoginFailure(PlayFabError error)
{
Debug.LogWarning(“ログイン失敗したときの処理をここに書く");
}
代償 = コールバックスタイルのコード
たとえばログインのコード。
public void Start()
{
var request = new LoginWithCustomIDRequest { CustomId = “xxx“ };
PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure);
}
private void OnLoginSuccess(LoginResult result)
{
Debug.Log("ログイン成功したときの処理をここに書く");
}
private void OnLoginFailure(PlayFabError error)
{
Debug.LogWarning(“ログイン失敗したときの処理をここに書く");
}
いわゆるコールバック地獄に陥りやすい…
コールバックスタイルを投げ捨てたい
C# の非同期処理といえば async/await 。
async/await を使えばコールバックスタイルは投げ捨てられる。
コールバックスタイルを投げ捨てたい
C# の非同期処理といえば async/await 。
async/await を使えばコールバックスタイルは投げ捨てられる。
たとえば先ほどのログインのコードを async/await スタイルに。
async Task Start()
{
var request = new LoginWithCustomIDRequest { CustomId = “xxx" };
var response = await PlayFabClientAPI.LoginWithCustomIDAsync(request);
var message = response.Error is null
? $"ログイン成功! My PlayFabID is {response.Result.PlayFabId}"
: $"ログイン失敗... {response.Error.ErrorMessage}";
Debug.Log(message);
}
コールバックスタイルを投げ捨てたい
C# の非同期処理といえば async/await 。
async/await を使えばコールバックスタイルは投げ捨てられる。
たとえば先ほどのログインのコードを async/await スタイルに。
async Task Start()
{
var request = new LoginWithCustomIDRequest { CustomId = “xxx" };
var response = await PlayFabClientAPI.LoginWithCustomIDAsync(request);
var message = response.Error is null
? $"ログイン成功! My PlayFabID is {response.Result.PlayFabId}"
: $"ログイン失敗... {response.Error.ErrorMessage}";
Debug.Log(message);
} すっきり書けて素敵!
なぜ Unity SDK はコールバックスタイル?
> PlayFab Unity SDK は Unity 5.3 以降 で動作が保証されている。
Unity 5 系は C# 4.0 しか使えない。
async/await は C# 5.0 で導入された機能。
だから非同期処理をコールバックで処理する必要があった。
なぜ Unity SDK はコールバックスタイル?
> PlayFab Unity SDK は Unity 5.3 以降 で動作が保証されている。
Unity 5 系は C# 4.0 しか使えない。
async/await は C# 5.0 で導入された機能。
だから非同期処理をコールバックで処理する必要があった。
最近の Unity は C# 7.3 まで使える。
だからきっと C# SDK を使っても大丈夫。
※WebGL 以外のプラットフォームならば
PlayFab C# SDK の
導入方法と使用例の紹介
PlayFab C# SDK の導入方法(Unity の場合)
Docs か GitHub からダウンロード。
https://docs.microsoft.com/ja-jp/gaming/playfab/sdks/c-sharp/
https://github.com/PlayFab/CSharpSDK
ダウンロードした zip を展開して、
PlayFabSDK の source 一式を
適当な Scripts フォルダにまるごと配置。
PlayFab C# SDK の導入方法(Server の場合)
サーバープログラムやAzure Functions で使う場合は NuGet から
PlayFabAllSDK をインストール。
PlayFab C# SDK の使用例(Unity の場合)
使い方は Unity SDK と殆ど変わらない。
- async/await を付ける
- SDK のメソッド名は xxxAsync になる
- API のエラーを判定するときは response.Error をチェック
async Task Start()
{
var request = new LoginWithCustomIDRequest { CustomId = "xxx" };
var response = await PlayFabClientAPI.LoginWithCustomIDAsync(request);
var message = response.Error is null
? $"ログイン成功! My PlayFabID is {response.Result.PlayFabId}"
: $"ログイン失敗... {response.Error.ErrorMessage}";
Debug.Log(message);
}
PlayFab C# SDK の使用例(Unity の場合)
UniTask と組み合わせると他の処理との並列処理もすっきり!
async UniTaskVoid Start()
{
var request = new LoginWithCustomIDRequest { CustomId = "xxx" };
var (response, nanikaOmoiSyoriResult) = await (
PlayFabClientAPI.LoginWithCustomIDAsync(request).AsUniTask(),
NanikaOmoiSyoriAsync());
// 以下略
}
async UniTask<string> NanikaOmoiSyoriAsync()
{
// 何か重い処理
return "何か重い処理の結果";
}
PlayFab C# SDK の注意点
WebGL では動きません…😢
理由は C# SDK が HttpClient に依存していてこれが動かないから。
なお Unity で HttpClient を使うと Android 実機で動かないという話も
よく目にしましたが、それは1年ほど前に改善されています。
※当時 Unity 2019.1.13 + iOS 実機 + Android 実機で検証済み
まとめ
まとめ
Unity + PlayFab の開発で使用できる SDK は 2 種類あります。
- 古い Unity やWebGL でも動作する Unity SDK
- API 呼び出しが async/await スタイルで使いやすい C# SDK
実は Unity SDK 一択ではありません。
お好みにあわせてご利用ください。
※ただしターゲットが WebGL の場合は Unity SDK 一択です。
ご清聴ありがとうございました

Azure PlayFab Unity SDK vs C# SDK

  • 1.
    Azure PlayFab Unity SDKvs C# SDK 2020/07/26 PlayFab Meetup #4 南 @y_minami
  • 2.
    自己紹介 名前 : 南@_y_minami 所属 : miraibox.inc 仕事 : Game Programmer(Unity + .NET + GCP) 好き : C# .NET Unity Azure PlayFab 紅茶 一緒に働いてくれる C#er を大募集中です!
  • 3.
  • 4.
    今日お伝えしたいこと Unity + PlayFabの開発で使用できる SDK は 2 種類あります。 - 古い Unity やWebGL でも動作する Unity SDK - API 呼び出しが async/await スタイルで使いやすい C# SDK 実は Unity SDK 一択ではありません。 お好みにあわせてご利用ください。
  • 5.
    アジェンダ - PlayFab には多数のSDK が存在する話 - Unity で使用できる PlayFab SDK の話 - PlayFab C# SDK の導入方法と使用例の紹介
  • 6.
    PlayFab には多数の SDKが存在する話
  • 7.
    PlayFab には多数の SDKが存在する話 サポートされている言語 C# C++ Java Objective-C Python PHP Lua JavaScript ActionScript カバーしている範囲が広い!
  • 8.
    PlayFab には多数の SDKが存在する話 しかも 1 言語につき 1 SDK ではない たとえばC++ - Unreal Marketplace Plugin(Unreal Engine 用プラグイン) - Cocos2d-x SDK(Cocos2d-x 用 SDK) - XPlat Cpp SDK(汎用的なC++ SDK) ※GSDK や Party SDK のような追加機能用 SDK はここでは省略 たとえば JavaScript - JavaScript SDK(フロントエンド用 SDK) - NodeJS SDK(バックエンド用 SDK)
  • 9.
  • 10.
    Unity で使用できる PlayFabSDK の話 使える SDK は 2 種類。 - Unity SDK(Unity 用 SDK) - C# SDK(汎用的な C# SDK)
  • 11.
    Unity で使用できる PlayFabSDK の話 使える SDK は 2 種類。 - Unity SDK(Unity 用 SDK) - C# SDK(汎用的な C# SDK) Unity では Unity SDK を使いましょう。 Not Unity なアプリケーションや、サーバーサイドの API や Azure Functions では C# SDK を使いましょう。
  • 12.
    Unity で使用できる PlayFabSDK の話 使える SDK は 2 種類。 - Unity SDK(Unity 用 SDK) - C# SDK(汎用的な C# SDK) Unity では Unity SDK を使いましょう。 Not Unity なアプリケーションや、サーバーサイドの API や Azure Functions では C# SDK を使いましょう。 というのが基本ですが、 今日はここに一石を投じてみたいと思います。
  • 13.
    PlayFab Unity SDKの特徴 PlayFab Unity SDK は Unity 5.3 以降 で動作が保証されている。 かなり古い Unity でも OK! プラットフォームも PC でも iOS/Android でもWebGL でも OK!
  • 14.
    PlayFab Unity SDKの特徴 PlayFab Unity SDK は Unity 5.3 以降 で動作が保証されている。 かなり古い Unity でも OK! プラットフォームも PC でも iOS/Android でもWebGL でも OK! めでたしめでたし! とはいかず、その代償がある。
  • 15.
    代償 = コールバックスタイルのコード たとえばログインのコード。 publicvoid Start() { var request = new LoginWithCustomIDRequest { CustomId = “xxx“ }; PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure); } private void OnLoginSuccess(LoginResult result) { Debug.Log("ログイン成功したときの処理をここに書く"); } private void OnLoginFailure(PlayFabError error) { Debug.LogWarning(“ログイン失敗したときの処理をここに書く"); }
  • 16.
    代償 = コールバックスタイルのコード たとえばログインのコード。 publicvoid Start() { var request = new LoginWithCustomIDRequest { CustomId = “xxx“ }; PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure); } private void OnLoginSuccess(LoginResult result) { Debug.Log("ログイン成功したときの処理をここに書く"); } private void OnLoginFailure(PlayFabError error) { Debug.LogWarning(“ログイン失敗したときの処理をここに書く"); }
  • 17.
    代償 = コールバックスタイルのコード たとえばログインのコード。 publicvoid Start() { var request = new LoginWithCustomIDRequest { CustomId = “xxx“ }; PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure); } private void OnLoginSuccess(LoginResult result) { Debug.Log("ログイン成功したときの処理をここに書く"); } private void OnLoginFailure(PlayFabError error) { Debug.LogWarning(“ログイン失敗したときの処理をここに書く"); } いわゆるコールバック地獄に陥りやすい…
  • 18.
    コールバックスタイルを投げ捨てたい C# の非同期処理といえば async/await。 async/await を使えばコールバックスタイルは投げ捨てられる。
  • 19.
    コールバックスタイルを投げ捨てたい C# の非同期処理といえば async/await。 async/await を使えばコールバックスタイルは投げ捨てられる。 たとえば先ほどのログインのコードを async/await スタイルに。 async Task Start() { var request = new LoginWithCustomIDRequest { CustomId = “xxx" }; var response = await PlayFabClientAPI.LoginWithCustomIDAsync(request); var message = response.Error is null ? $"ログイン成功! My PlayFabID is {response.Result.PlayFabId}" : $"ログイン失敗... {response.Error.ErrorMessage}"; Debug.Log(message); }
  • 20.
    コールバックスタイルを投げ捨てたい C# の非同期処理といえば async/await。 async/await を使えばコールバックスタイルは投げ捨てられる。 たとえば先ほどのログインのコードを async/await スタイルに。 async Task Start() { var request = new LoginWithCustomIDRequest { CustomId = “xxx" }; var response = await PlayFabClientAPI.LoginWithCustomIDAsync(request); var message = response.Error is null ? $"ログイン成功! My PlayFabID is {response.Result.PlayFabId}" : $"ログイン失敗... {response.Error.ErrorMessage}"; Debug.Log(message); } すっきり書けて素敵!
  • 21.
    なぜ Unity SDKはコールバックスタイル? > PlayFab Unity SDK は Unity 5.3 以降 で動作が保証されている。 Unity 5 系は C# 4.0 しか使えない。 async/await は C# 5.0 で導入された機能。 だから非同期処理をコールバックで処理する必要があった。
  • 22.
    なぜ Unity SDKはコールバックスタイル? > PlayFab Unity SDK は Unity 5.3 以降 で動作が保証されている。 Unity 5 系は C# 4.0 しか使えない。 async/await は C# 5.0 で導入された機能。 だから非同期処理をコールバックで処理する必要があった。 最近の Unity は C# 7.3 まで使える。 だからきっと C# SDK を使っても大丈夫。 ※WebGL 以外のプラットフォームならば
  • 23.
    PlayFab C# SDKの 導入方法と使用例の紹介
  • 24.
    PlayFab C# SDKの導入方法(Unity の場合) Docs か GitHub からダウンロード。 https://docs.microsoft.com/ja-jp/gaming/playfab/sdks/c-sharp/ https://github.com/PlayFab/CSharpSDK ダウンロードした zip を展開して、 PlayFabSDK の source 一式を 適当な Scripts フォルダにまるごと配置。
  • 25.
    PlayFab C# SDKの導入方法(Server の場合) サーバープログラムやAzure Functions で使う場合は NuGet から PlayFabAllSDK をインストール。
  • 26.
    PlayFab C# SDKの使用例(Unity の場合) 使い方は Unity SDK と殆ど変わらない。 - async/await を付ける - SDK のメソッド名は xxxAsync になる - API のエラーを判定するときは response.Error をチェック async Task Start() { var request = new LoginWithCustomIDRequest { CustomId = "xxx" }; var response = await PlayFabClientAPI.LoginWithCustomIDAsync(request); var message = response.Error is null ? $"ログイン成功! My PlayFabID is {response.Result.PlayFabId}" : $"ログイン失敗... {response.Error.ErrorMessage}"; Debug.Log(message); }
  • 27.
    PlayFab C# SDKの使用例(Unity の場合) UniTask と組み合わせると他の処理との並列処理もすっきり! async UniTaskVoid Start() { var request = new LoginWithCustomIDRequest { CustomId = "xxx" }; var (response, nanikaOmoiSyoriResult) = await ( PlayFabClientAPI.LoginWithCustomIDAsync(request).AsUniTask(), NanikaOmoiSyoriAsync()); // 以下略 } async UniTask<string> NanikaOmoiSyoriAsync() { // 何か重い処理 return "何か重い処理の結果"; }
  • 28.
    PlayFab C# SDKの注意点 WebGL では動きません…😢 理由は C# SDK が HttpClient に依存していてこれが動かないから。 なお Unity で HttpClient を使うと Android 実機で動かないという話も よく目にしましたが、それは1年ほど前に改善されています。 ※当時 Unity 2019.1.13 + iOS 実機 + Android 実機で検証済み
  • 29.
  • 30.
    まとめ Unity + PlayFabの開発で使用できる SDK は 2 種類あります。 - 古い Unity やWebGL でも動作する Unity SDK - API 呼び出しが async/await スタイルで使いやすい C# SDK 実は Unity SDK 一択ではありません。 お好みにあわせてご利用ください。 ※ただしターゲットが WebGL の場合は Unity SDK 一択です。
  • 31.