Microsoftのモバイルゲームバックエンドサービス(mBaaS)のAzure PlayFab。
扱いやすさとMAUベースの個人開発者に優しい料金体系から注目が広まっており、最近は情報共有も盛んになってきて本当に助かります。
UnityでPlayFabを使い始める方法(インストール〜匿名ログイン)
個人のゲーム開発者がAzure PlayFabに入門してみた4つの理由
この記事や、リンクから飛べる記事で
- unityとの連携
- 匿名ログイン
- ユーザーデータの操作
あたりはサクっと出来ちゃう感じ。結構ビビります。
#サーバーでアイテムをプレイヤーに渡したい
「サーバー上でアイテムをプレイヤーに渡す処理」を作ってみたいなと思いました。という事で
- アイテム
- クラウドスクリプト
のとっかかりを記載してみます。間違いや非効率な部分があったらすみません。
##カタログを作ってみる
まず、アイテムを作るにはそのアイテムを管轄する「カタログ」が必要なそうで。
- エコノミー→カタログ→新しいカタログ
アイテムカタログ…カタログとは…
ネットを検索したらニッセン春号が出たので何も考えずに[nissen_spring]と付けました。秋なのに。
「バージョン」と書いてますが文字列で大丈夫みたいです。
##アイテムを作ってみる
次にカタログに内包されるアイテムを作ります。
カタログの右上に新しいアイテムの作成ボタンがあります。
最近は魚がおいしいのでsanmaを登録。表示名も記載してみる。
アイテムクラスや、タグなどもこの先使うのだろうけど今のところはまだ使っていません。
下の方にアイテムの保存があるので、それを押すとアイテムが登録されます。
スタック可能や、トレード可能などのオプションもあるようです。
他のアイテムも登録。
**アイテムカタログニッセン春号(内容:鮪・鮭・秋刀魚)**が爆誕。
##クラウドスクリプト
作ったアイテムを、プレイヤーに対して渡す方法としてクラウドスクリプトを使ってみました。
playfabは、ダッシュボードからプレイヤーに対してクラウドスクリプトを実行できるようでそれで試してました。
もちろん、クラウドスクリプトはunityから呼び出す事も出来ます。
まずはクラウドスクリプトを作ります。
- 自動化→cloudScript→リビジョン
でエディタが開きます。ここにスクリプトを記載できるようです。
// 初めてのクラウドスクリプト
handlers.getNissenFish = function (args, context) {
// requestに全て詰め込む
var request = {
"CatalogVersion": "nissen_spring", //カタログバージョンを指定
// ItemGrant型配列を定義
"ItemGrants": [
{
"PlayFabId": currentPlayerId,
"ItemId": "maguro"
},
{
"PlayFabId": currentPlayerId,
"ItemId": "sanma"
}
]
};
// 全て詰め込んだ request を引数にserver.GrantItemsToUsersを呼び出す。
var playerStatResult = server.GrantItemsToUsers(request);
};
###解説
handlers.getNissenFish = function (args, context) {
この記載で、getNissenFishがスクリプト呼び出し名となります。
var playerStatResult = server.GrantItemsToUsers(request);
最後のこの「server.GrantItemsToUsers」がユーザーにアイテムを与える命令になります。引数としてパッケージングされものをrequestとして入れています。(その結果をplayerStatResultが受け取る形になる)
さて、プレイヤーにアイテムを渡すAPI「GrantItemsToUsers」の説明はこちらです。
[playFabのGrantItemsToUsersのリファレンス]
(https://docs.microsoft.com/en-us/rest/api/playfab/server/player-item-management/grantitemstousers?view=playfab-rest)
自分が英語が出来ないので機械翻訳でなんとか読み取ると…
- 「CatalogVersion(string)」と「ItemGrants(ItemGrant配列)」が必要
- ItemGrant配列には「PlayFabId」(操作が実行されるプレイヤーID)や渡すべき「ItemId」など、様々なものが入れられるらしい。
「"ItemId": "maguro"」のようにkeyとvalueの対で記載。
currentPlayerIdは実行したプレイヤー自身のID。これに対し、maguroとsanmaを渡します。
// requestに全て詰め込む
var request = {
"CatalogVersion": "nissen_spring", //カタログバージョンを指定
// ItemGrant型配列を定義
"ItemGrants": [
{
"PlayFabId": currentPlayerId,
"ItemId": "maguro"
},
{
"PlayFabId": currentPlayerId,
"ItemId": "sanma"
}
]
};
スクリプティングが終わったら、上にあるリビジョン〇として保存、を押す
任意のプレイヤーのページに進み、CloudScriptを実行
###おまけ:アイテムのカスタムパラメータ
playFabのアイテムはカスタムパラメータが持てる。つまり、レベルだけ持ってるみたいな簡単なキャラクターはアイテムとして実装するのがいいっぽい。
キャラをアイテムとして持つ的な質問があるフォーラム(要翻訳)
https://community.playfab.com/questions/18917/getting-data-about-all-characters.html
https://community.playfab.com/questions/29930/save-character-as-items.html