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

Contenu connexe

Tendances

【GCC18】PUBGライクなゲームをUnityだけで早く確実に作る方法 〜ひとつのUnity上でダミークライアントを100個同時に動かす〜
【GCC18】PUBGライクなゲームをUnityだけで早く確実に作る方法 〜ひとつのUnity上でダミークライアントを100個同時に動かす〜【GCC18】PUBGライクなゲームをUnityだけで早く確実に作る方法 〜ひとつのUnity上でダミークライアントを100個同時に動かす〜
【GCC18】PUBGライクなゲームをUnityだけで早く確実に作る方法 〜ひとつのUnity上でダミークライアントを100個同時に動かす〜
モノビット エンジン
 

Tendances (20)

Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろうUE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
 
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
 
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
 
【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング
【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング
【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング
 
多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
 
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解した
 
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DDUE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
 
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
 
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろうサーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
 
Photonのサービス選択の勘どころ
Photonのサービス選択の勘どころPhotonのサービス選択の勘どころ
Photonのサービス選択の勘どころ
 
【GCC18】PUBGライクなゲームをUnityだけで早く確実に作る方法 〜ひとつのUnity上でダミークライアントを100個同時に動かす〜
【GCC18】PUBGライクなゲームをUnityだけで早く確実に作る方法 〜ひとつのUnity上でダミークライアントを100個同時に動かす〜【GCC18】PUBGライクなゲームをUnityだけで早く確実に作る方法 〜ひとつのUnity上でダミークライアントを100個同時に動かす〜
【GCC18】PUBGライクなゲームをUnityだけで早く確実に作る方法 〜ひとつのUnity上でダミークライアントを100個同時に動かす〜
 
60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編
 
若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発
 
UE4+Photonでネットワーク同期を行う
UE4+Photonでネットワーク同期を行うUE4+Photonでネットワーク同期を行う
UE4+Photonでネットワーク同期を行う
 

Similaire à Unity + PlayFab + Azure Functions

Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
Daisuke Sugai
 

Similaire à Unity + PlayFab + Azure Functions (20)

Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しようAzure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
Azureで作るnodeアプリケーション①
Azureで作るnodeアプリケーション①Azureで作るnodeアプリケーション①
Azureで作るnodeアプリケーション①
 
Azure PlayFab Unity SDK vs C# SDK
Azure PlayFab Unity SDK vs C# SDK Azure PlayFab Unity SDK vs C# SDK
Azure PlayFab Unity SDK vs C# SDK
 
サイドプロジェクトで使う Azure DevOps
サイドプロジェクトで使う Azure DevOpsサイドプロジェクトで使う Azure DevOps
サイドプロジェクトで使う Azure DevOps
 
C# CloudScript Azure Functions との連携
C# CloudScript Azure Functions との連携C# CloudScript Azure Functions との連携
C# CloudScript Azure Functions との連携
 
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
 
Share UIカスタマイズ Widget編
Share UIカスタマイズ Widget編Share UIカスタマイズ Widget編
Share UIカスタマイズ Widget編
 
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsGoogleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOps
 
App Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートApp Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデート
 
Azure Fundamental
Azure FundamentalAzure Fundamental
Azure Fundamental
 
ゲーム特化の BaaS! Unity + PlayFab 入門!
ゲーム特化の BaaS! Unity + PlayFab 入門!ゲーム特化の BaaS! Unity + PlayFab 入門!
ゲーム特化の BaaS! Unity + PlayFab 入門!
 
Azure Api Management 俺的マニュアル 2020年3月版
Azure Api Management 俺的マニュアル 2020年3月版Azure Api Management 俺的マニュアル 2020年3月版
Azure Api Management 俺的マニュアル 2020年3月版
 
【NLU祭り 場外編】コミュニケーションをより身近に、よりかしこく。LUIS と Azure AI サービスの使いどころ
【NLU祭り 場外編】コミュニケーションをより身近に、よりかしこく。LUIS と Azure AI サービスの使いどころ【NLU祭り 場外編】コミュニケーションをより身近に、よりかしこく。LUIS と Azure AI サービスの使いどころ
【NLU祭り 場外編】コミュニケーションをより身近に、よりかしこく。LUIS と Azure AI サービスの使いどころ
 
Cogbot_AzureOpenAIServices_AzureAI_20230302.pdf
Cogbot_AzureOpenAIServices_AzureAI_20230302.pdfCogbot_AzureOpenAIServices_AzureAI_20230302.pdf
Cogbot_AzureOpenAIServices_AzureAI_20230302.pdf
 
ゲーム特化の BaaS! Unity + PlayFab 入門!
ゲーム特化の BaaS! Unity + PlayFab 入門!ゲーム特化の BaaS! Unity + PlayFab 入門!
ゲーム特化の BaaS! Unity + PlayFab 入門!
 
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
 
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
 
はじめての Azure 開発
はじめての Azure 開発はじめての Azure 開発
はじめての Azure 開発
 
俺とHashiCorp
俺とHashiCorp俺とHashiCorp
俺とHashiCorp
 

Unity + PlayFab + Azure Functions