Posted at

AzurePlayFabのアクションとルールを使って自動的にアイテムを配布してみた


まえがき

ゲーム内でユーザーのランクが上がったりクエストを達成したタイミングで、報酬としてアイテムや魔法石を配布したいことがあると思います。

PlayFab の アクションとルール を使うとほぼノンコーディングで実現できるようなので試してみました。


成果物

以下のように、ゲームプレイ開始時やユーザーのランクが上がったタイミングで報酬を配ることができました。

image.png


手順


1. 新しいランキングを作成する

ユーザーのランクを統計情報として使用するために新しいランキングを作成します。

image.png


2. 新しいコンテナーを作成する

報酬はインベントリに直接付与せず、一旦はギフトとして配布して、ギフトを開くと複数のアイテムや通貨が獲得できることが一般的だと思います。

PlayFab ではコンテナーを使うことでそのような仕組みを実現できます。

image.png


3. アクションとルールを設定する

Client や Server から API を使って PlayFab にアクセスすると、その操作に応じたイベントが発生します。

今回は統計情報の更新のイベントをトリガーにするため、イベントタイプを com.playfab.player_statistic_changed とします。

条件の項目では StatisticName と StatisticPreviousValue を絞り込みます。

これによりランクが9から10に上がったイベントだけをトリガーにしてアクションを実行できるようになります。

最後にアクションの項目で先に作っておいたコンテナーを付与するように設定します。

image.png


4. ゲーム内から統計情報を更新する

ユーザーのランクが上がったタイミングで PlayFab の API を呼び、統計情報を更新します。

例えば Unity から PlayFab の API を直接呼ぶ場合は以下のようなコードになります。

    var statistics = new List<StatisticUpdate> { new StatisticUpdate { StatisticName = "Rank", Value = 1 } };

var request = new UpdatePlayerStatisticsRequest { Statistics = statistics };

PlayFabClientAPI.UpdatePlayerStatistics(
request,
response => Debug.Log("成功したときの処理"),
error => Debug.LogError("失敗したときの処理"));

1~3までの設定とこのコードだけでユーザーのランクが上がったタイミングで報酬を配ることができました。

とてもお手軽ですね。

ちなみに PlayFab は統計情報を Unity などの Client から直接送信することをデフォルト設定では禁止しています。

趣味の個人制作などでチート対策を気にしない場合は、GameManager で設定を変更して許可することができます。

image.png


その他

アクションとルールのトリガーにできるイベントは様々なタイプがあります。

例えば com.playfab.player_created をトリガーにすると、アカウントが作成されたことをトリガーにして初期アイテムを配布したりすることが可能です。

PlayFab の殆どの挙動をトリガーできると思いますので、目的に応じたタイプを探してみてください。

また、目的に合うものがなければ独自のイベントを仕込んでそれをトリガーにすることも可能です。

またアクションの種類も様々な種類があり、アイテムを配布刷ること以外にはプッシュ通知を送信したり、自分で定義したFunction(CloudScript)を実行したりすることも可能です。

とても便利な アクションとルール ですが、無料の Essentials プランでは3個までしか作ることができません。

次に安い IndieStudio プラン(月額$99)なら100個まで作ることが可能です。

月額$99は個人開発者には安くない金額ですが、IndieStudio プランでも 1000MAU までは請求が発生しないとのことですので、PlayFab を試してみるときはとりあえず IndieStudio プランにしてしまうのも良いかもしれませんね。

image.png


参考にしたドキュメント

アクションとルール