エンゲージメント報酬機能パッケージは、日々のログインストリークやプレイセッション時間など、特定のプレイヤーアクティビティに対してゲーム内報酬を提供するためのカスタマイズ可能なフレームワークです。クライアントとサーバーロジックに加えて、報酬の進捗、報酬の状態、報酬の請求を表示するためのデフォルトUIが含まれています。

パッケージを取得する
Coreおよびエンゲージメント報酬パッケージをStudio内のインベントリに追加するには、ここにあるインベントリに追加リンクをクリックします:
Studioのウィンドウメニューまたはホームタブツールバーから、ツールボックスを開きます。
ツールボックスウィンドウで、インベントリタブをクリックします。マイモデルのソートが表示されます。

機能パッケージCoreタイルをクリックし、次にエンゲージメント報酬機能パッケージタイルをクリックします。両方のパッケージフォルダがエクスプローラーウィンドウに表示されます。
フォルダをReplicatedStorageにドラッグします。
パッケージを初期化する
パッケージをReplicatedStorageに移動し、ゲームをテストすると、ReplicatedStorage.EngagementRewards.Server.Examples内のEngagementRewardsExampleスクリプトが実行されます。
このスクリプトは、ゲームでの使用のためにパッケージを初期化する方法を示しており、いくつかのモジュールスクリプトを要求し、最終的にプレイヤーに報酬を与えるrewardClaimedHandlerFunction()関数を定義します。
この関数はブール値を返す必要があります。例のスクリプトでは、プレイヤーに報酬を与えず、単にプレイヤー、報酬、および請求される数量を印刷します。
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EngagementRewardsConfig = require(ReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig)
local EngagementRewards = require(ReplicatedStorage.EngagementRewards.Server.EngagementRewards)
local EngagementRewardsUtils = require(ReplicatedStorage.EngagementRewards.Utils.EngagementRewardsUtils)
local Types = require(ReplicatedStorage.EngagementRewards.Configs.Types)
-- このハンドラ関数を独自の報酬請求ハンドラ関数に置き換えてください
-- この関数は、渡されたrewardIdの報酬請求イベントを処理する必要があります
local function rewardClaimedHandlerFunction(player: Player, rewardId: RewardId, quantity: number): (boolean, string?)
print(`報酬 {rewardId} が {player} によって数量 {quantity} で請求されました`)
return true
end
-- さらにこのスクリプトを直接修正するか、サーバーコードの好ましい場所であるServerScriptServiceに移動することができます。現状では、スクリプトはテスト目的でのみ有用です。
プレイヤーに報酬を与える方法はゲームによって異なります。一部のゲームでは、ゲームブーストを付与したり、プレイヤーのゴールドカウントを増加させたりするかもしれません。他のゲームでは、カスタムインベントリシステムを持っているかもしれませんし、また別のゲームではプレイヤーのバックパックにアイテムを配置するかもしれません。ただし、すべての場合において、rewardClaimedHandlerFunction()を独自の関数に置き換える必要があります。
報酬と基準を追加する
ほとんどの報酬のカスタマイズは、ReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig内で行われます。このモジュールスクリプトは、報酬とそれを解除するための要件を定義します。
完全な型宣言(または新しいものを追加することができます)をReplicatedStorage.EngagementRewards.Configs.Typesで見ることができますが、実際にはEngagementRewardsConfigを操作するだけで済むでしょう。この機能パッケージには、TimeとDailyの2つの報酬タイプが含まれています。
local engagementRewardsConfig: Types.EngagementRewardsConfig = {
[Types.RewardType.Time] = {
tabDisplayName = "時間",
tabOrder = 1,
description = "プレイを続けて報酬を解除しよう!",
rewards = {
MinutesPlayed1 = {
icon = 116913478160966,
displayName = "アイスランス",
requiredSecondsInGame = 1 * 5,
},
-- さらに
[Types.RewardType.Daily] = {
tabDisplayName = "デイリー",
tabOrder = 2,
description = "毎日プレイして報酬を解除しよう!",
rewards = {
DailyStreak1 = {
icon = 116913478160966,
displayName = "アイスランス",
requiredDaysVisitedStreak = 1,
effect = Types.RewardEffect.Valuable,
},
-- さらに両方の報酬タイプにはアイコンが必要で、これは画像のRobloxアセットIDです(デカールではありません)。UIで使用するための表示名も必要です。1以外の値にはquantityを指定します。また、報酬を貴重なものとして指定することもできます(effect = Types.RewardEffect.Valuable)ので、UIで異なる背景フレームを与えることができます。
| Variable | Type | Description | Default | Required |
|---|---|---|---|---|
| icon | Number | UIアイコンのためのRobloxアセットID。 | N/A | Yes |
| displayName | String | UIで使用するための報酬の名前。 | RewardId | No |
| quantity | Number | 報酬するアイテムの数。 | 1 | No |
| effect | RewardEffect | UIで使用する視覚効果。 UIのカスタマイズを参照してください。 | Types.RewardEffect.Default | No |
時間報酬
Time報酬は、ゲーム内で一定の秒数が経過した後に解除されます。これらの数値はニーズに合わせてカスタマイズできます。簡単なテストのために小さな数値を使用することもできますし、公開されたゲームでは10分後に報酬を与え、30分後、1時間後に別の報酬を与えることができます。
掛け算を使うことで、秒数を人間が扱いやすくすることができるため、2時間の場合は2 * 60 * 60と指定する方が7200よりも好ましいかもしれません。
| Variable | Type | Description | Default | Required |
|---|---|---|---|---|
| requiredSecondsInGame | Number | プレイヤーが報酬を得るためにゲーム内で過ごさなければならない秒数(正の整数)。 | N/A | Yes |
デイリー報酬
Daily報酬は、連続した日々のログイン後に解除されます。たとえば、プレイヤーが初めてログインした日には、3つのポーションやシナモンロールを与えるかもしれません。次の日には、より貴重な消費アイテムを報酬として与え、7日間連続でログインした後には、新しい釣り竿のような耐久アイテムを与えることができます。
| Variable | Type | Description | Default | Required |
|---|---|---|---|---|
| requiredDaysVisitedStreak | Number | プレイヤーが報酬を得るためにゲームに接続しなければならない連続した日数。 | N/A | Yes |
DailyRewardTabConfigには、2つの追加のデイリー報酬設定オプションがあります。
[Types.RewardType.Daily] = {
tabDisplayName = "デイリー",
tabOrder = 2,
description = "毎日プレイして報酬を解除しよう!",
isHiddenOnJoin = true,
isAlignedToStreakResetTime = true,
rewards = {
DailyStreak1 = {
icon = 116913478160966,
displayName = "アイスランス",
requiredDaysVisitedStreak = 1,
},
-- さらに| Variable | Type | Description | Default | Required |
|---|---|---|---|---|
| isHiddenOnJoin | Boolean | trueの場合、ゲームに参加したときに報酬が自動的にポップアップしません。falseの場合、プレイヤーが新しいデイリー報酬を請求できる場合、ゲームに参加したときに報酬が自動的にポップアップします。 | False | No |
| isAlignedToStreakResetTime | Boolean | trueの場合、2日目の報酬は初日の請求可能時間から24時間後に請求できます。falseの場合、2日目の報酬は初日の請求可能時間の翌日の最初の真夜中に請求できます。たとえば、プレイヤーが午後11時(23:00)にログインし、初日の報酬を請求した場合、trueの場合、翌日の午後11時まで2日目の報酬を請求できません。falseの場合、午前0時(00:00)に2日目の報酬を請求できます。3日目以降の報酬は、前日の請求可能時間から常に24時間後に利用可能です。 | False | No |
UIをカスタマイズする
前のセクションでは、tabDisplayName、tabOrder、およびdescriptionフィールドにより、ユーザーインターフェースの基本的なカスタマイズが可能であることに気づいたかもしれません。ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings内にもいくつかのUI文字列があります。

effect変数を使用して新しい報酬の背景を指定するには、ReplicatedStorage.EngagementRewards.Objects.RewardItemFramesにフレームを追加します。次に、フレームの名前をReplicatedStorage.EngagementRewards.Configs.Types内のTypes.RewardEffectテーブルに追加します。
より包括的なカスタマイズを行うには、ReplicatedStorage.EngagementRewards.Objects内のオブジェクトを修正します。たとえば、RewardsHudButton.BackgroundフレームのBackgroundColor3や、FooterContentFrame.ClaimableUIGradientのColorを修正することができます。
ユーザーインターフェースのエントリポイントは、必要なオブジェクトを取得し、UIを初期化するReplicatedStorage.EngagementRewards.Client.UIControllerスクリプトです。トップレベルのオブジェクトを追加または名前変更する場合(子を追加したりプロパティを修正するだけでなく)、このフォルダ内のコードを更新してそれらを処理する必要があります。