Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Unity + PlayFab + Azure Functions

778 views

Published on

Unity + PlayFab + Azure Functions
C# で統一されたゲーム開発を行う TIPS
2020/4/25 PlayFab Meetup #3 登壇資料

Published in: Technology
  • Be the first to comment

Unity + PlayFab + Azure Functions

  1. 1. Unity + PlayFab + Azure Functions C# で統一されたゲーム開発を行う TIPS 南 @_y_minami 2020.04.25 PlayFab Meetup #3
  2. 2. 自己紹介 • 名前 南(みなみ) • 所属 miraibox Inc. • Twitter @_y_minami • 好き/興味 C# .NET Unity Azure PlayFab MagicOnion 紅茶
  3. 3. 本日の内容
  4. 4. 本日の内容 PlayFab の Cloud Script と Azure Functions の統合回りのお話。 • Cloud Script とは • Azure Functions とは • PlayFab の Azure Functions 統合の導入方法 • Unity + PlayFab + Azure Functions を便利に使うための TIPS 1. Unity と Azure Functions でコードを共有して楽をしよう 2. Azure Functions でモデルバインディングを使って楽をしよう 3. Azure Functions のコールドスタートを回避しよう • まとめ
  5. 5. 本日の内容 PlayFab の Cloud Script と Azure Functions の統合回りのお話。 • Cloud Script とは • Azure Functions とは • PlayFab の Azure Functions 統合の導入方法 • Unity + PlayFab + Azure Functions を便利に使うための TIPS 1. Unity と Azure Functions でコードを共有して楽をしよう 2. Azure Functions でモデルバインディングを使って楽をしよう 3. Azure Functions のコールドスタートを回避しよう • まとめ Cloud Script を投げ捨てて便利な Azure Functions を使おう。 Azure Functions をもっと便利に使うための TIPS を紹介。
  6. 6. Cloud Script とは
  7. 7. Cloud Script とは • PlayFab の主要な機能の一つ • PlayFab は基本的にはクライアントから API を呼ぶだけで 本来はサーバーが必要なゲームを作れる • しかし PlayFab の機能でまかなうことができない場合もある • その場合は PlayFab 内に自分で書いた Script を登録して それを呼び出して処理することができる • FaaS(Function as a Service) のような感覚で使える • 利用料金は PlayFab の料金に含まれる(つまり無料) • 言語は JavaScript のみに対応 • JavaScript のみに対応…😭
  8. 8. Azure Functions とは
  9. 9. Azure Functions とは(Cloud Script との違い) • Azure の主要な機能の一つ • FaaS • いくつかの料金プランがあるが無料から利用可能 • 従量課金プラン(Consumption Plan)は月100万回は無料で実行可能 • 多くの言語に対応 • C# JavaScript F# Java PowerShell Python TypeScript • Visual Studio などでローカルデバッグも可能 • リアルタイムでオンラインのログのモニタリングも可能
  10. 10. Azure Functions とは(Cloud Script との違い) • Azure の主要な機能の一つ • FaaS • いくつかの料金プランがあるが無料から利用可能 • 従量課金プラン(Consumption Plan)は月100万回は無料で実行可能 • 多くの言語に対応 • C# JavaScript F# Java PowerShell Python TypeScript • Visual Studio などでローカルデバッグも可能 • リアルタイムでオンラインのログのモニタリングも可能 Azure Functions は良いところがたくさん。 特にクライアント/サーバーを C# で統一できることが最高。 Cloud Script は投げ捨てて Azure Functions を使っていこう。 (まだプレビューだけど)
  11. 11. PlayFab + Azure Functions の導入方法
  12. 12. PlayFab + Azure Functions の導入方法 時間がないのでスキップ! 公式ドキュメントか、以下のブログがわかりやすくておすすめ。 PlayFab アカウントだけでなく Azure アカウントが必要なので そちらの取得も忘れずに。 • ねこじょーかーさん 【PlayFab】Azure関数でCloudScriptを実行する方法 https://playfab-master.com/playfab-azure-cloudscript • Simplestarさん Unity オンラインゲームに Microsoft Azure Functions C# と PlayFab はいかが? https://qiita.com/simplestar/items/ea909e37b82731a91ffe
  13. 13. Unity + PlayFab + Azure Functions を 便利に使うための TIPS
  14. 14. Unity と Azure Functions で コードを共有して楽をしよう
  15. 15. Unity と Azure Functions で コードを共有して楽をしよう Unity と Azure Functions はどちらも C# で書ける。 それならコードを共有しない手はない。 やり方はいくつかあるが自分が好きな方法を紹介。 最初の環境構築手順がやや複雑だがとても便利。
  16. 16. 完成系のプロジェクト構成 - Assembly-Csharp - PlayFab - PlayFabEditorExtensions - PlayFabSDKEditor この4つは Unity 側のプロジェクト。 - YourTitle.AF これは Azure Functions のプロジェクト。 - YourTitle.Shared これは Unity と AF 両方で使うクラスライ ブラリ。実態は Unity 側にある。
  17. 17. コードを共有するプロジェクト構成を 作ってみる
  18. 18. Unity のプロジェクトを作る
  19. 19. Unity のプロジェクトを作る Azure Functions のプロジェクトと区別しやすくするために プロジェクト名に .Unity とかつけるのが好き。 Unity が起動したら PlayFab Editor Extension で PlayFab SDK も入れる。
  20. 20. Azure Functions のプロジェクトを追加 ソリューションを右クリックして追加。 Visual Studio は必須ではない。 VS Code でも大丈夫。 他の IDE でも多分大丈夫。
  21. 21. Azure Functions のプロジェクトを追加 Azure Functions を選択。 見つからないときは検索。
  22. 22. Azure Functions のプロジェクトを追加 プロジェクト名に .AF とかつけるのが好き。 お好みで。
  23. 23. Azure Functions のプロジェクトを追加 Http trigger を選択。 Authorization level は Functions か Anonymous に。
  24. 24. 現在の状態 ここまでは Unity + PlayFab + Azure Functions を使う場合の基本的な作業。 ここからコード共有の作業。
  25. 25. コード共有するフォルダとスクリプトを Unity 側で用意 /Assets/Scripts に Shared フォルダを作る。 共有したいコードはここに保存する。 今回はサンプルとして Character クラスのスクリプトを保存した。
  26. 26. クラスライブラリを作成 ソリューションを右クリックして 新しいプロジェクトを追加。
  27. 27. クラスライブラリを作成 クラスライブラリ(.NET Standard)を 選択する。 他のクラスライブラリを間違って 選択しやすいので注意。 見つからないときは検索する。
  28. 28. クラスライブラリを作成 プロジェクト名に .Shared とかつけるのが好き。 お好みで。
  29. 29. クラスライブラリを作成 クラスライブラリが作成された。 勝手に作成される Class1.cs は 不要なので削除する。
  30. 30. クラスライブラリを作成 YourTitle.Shared をダブルクリックして .csproj を編集。 Compile Include に Unity で用意した Shared フォルダのパスを指定。
  31. 31. クラスライブラリを作成 編集した .csproj を保存すると Character.cs が見えるようになる。
  32. 32. Azure Functions のプロジェクトから クラスライブラリを参照する YourTitle.AF を右クリックして 参照を追加。
  33. 33. Azure Functions のプロジェクトから クラスライブラリを参照する YourTitle.Shared を選択して OK。 これでコード共有の設定は完了。 Unity の /Assets/Scripts/Shared に保存した コードは AF のプロジェクトから使える。 めでたし!
  34. 34. Azure Functions で モデルバインディングを使って楽をしよう
  35. 35. Docs の Azure Functions のサンプルコード
  36. 36. Docs の Azure Functions のサンプルコード パラメータを HttpRequest で受け取って 中身の string(json)を FunctionExecutionContext<dynamic> にデシリアライズして FunctionArgument を dynamic のままごにょごにょしてdynamic で返している つらそうなコード…(´・ω・`)
  37. 37. モデルバインディングを使ったコード
  38. 38. モデルバインディングを使ったコード FunctionExecutionContext<T> で受け取って素直に使う。 HttpRequest や Json や dynamic がなくなってシンプル。 dynamic を使わないから型の恩恵を受けられる。 型はいいぞ!
  39. 39. Before / After
  40. 40. Unity 側のサンプルコード(After)
  41. 41. Unity 側のサンプルコード(After) Docs のサンプルコードでは Dictionary だけど任意の型で OK。
  42. 42. Azure Functions の コールドスタートを回避しよう
  43. 43. コールドスタート is 何? • Azure Functions の従量課金プランで発生する事象。 • ある程度の期間(20分?) Azure Functions を実行しなかった場合、 その次の呼び出しの応答は通常より時間がかかる。(10秒程度)
  44. 44. コールドスタート is 何? • Azure Functions の従量課金プランで発生する事象。 • ある程度の期間(20分?) Azure Functions を実行しなかった場合、 その次の呼び出しの応答は通常より時間がかかる。(10秒程度) PlayFab から Azure Functions を呼んだときのタイムアウトは10秒。 開発中タイトルやユーザーが極端に少ないタイトルでは タイムアウトエラーによるが発生してしまう。
  45. 45. コールドスタートへの向き合い方 • Azure Function を Premium か App Service Plan で使う → コールドスタートさせないオプションが使える。正攻法。 → そこそこのお金がかかる。 • タイムアウトのリトライ処理を書いて我慢する → エラーは抑制できても10秒以上待たせるユーザー体験は NG。 • Function を定期的に実行してコールドさせない → 実は Azure Functions の Timer Trigger を使えば簡単。
  46. 46. コールドスタートへの向き合い方 • Azure Function を Premium か App Service Plan で使う → コールドスタートさせないオプションが使える。正攻法。 → そこそこのお金がかかる。 • タイムアウトのリトライ処理を書いて我慢する → エラーは抑制できても10秒以上待たせるユーザー体験は NG。 • Function を定期的に実行してコールドさせない → 実は Azure Functions の Timer Trigger を使えば簡単。 ↑ 採用
  47. 47. Timer Trigger の Azure Function を追加 Azure Functions のプロジェクトを右 クリックして追加。
  48. 48. Timer Trigger の Azure Function を追加 名前を Timer.cs にして追加。 名前はお好みで OK。
  49. 49. Timer Trigger の Azure Function を追加 Timer trigger を選択して OK。 Schedule はデフォルトで5分毎 なのでそのままで大丈夫。
  50. 50. Timer Trigger の Azure Function を追加 Timer Trigger の Function が追加された。 これをデプロイすると Azure Functions はコールドスタートしなくなる。 お手軽!
  51. 51. 以上です、ご清聴ありがとうございました!

×