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

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

機能パッケージコアタイルをクリックし、その後エンゲージメント報酬機能パッケージタイルをクリックします。両方のパッケージフォルダがエクスプローラーウィンドウに表示されます。
フォルダをReplicatedStorageにドラッグします。
パッケージを初期化する
パッケージをReplicatedStorageに移動し、あなたの体験をテストすることで、ReplicatedStorage.EngagementRewards.Server.Examples内のEngagementRewardsExampleスクリプトが実行されます。
このスクリプトは、体験での使用のためにパッケージを初期化する方法を示しており、いくつかのモジュールスクリプトを要求し、最終的にプレイヤーに報酬を与えるrewardClaimedHandlerFunction()関数を定義する必要があります。
この関数はブーリアンを返さなければなりません。例のスクリプトでは、プレイヤーに報酬を与えず、プレイヤー、報酬、請求されている数量を印刷するだけです。
EngagementRewardsExample
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(`Reward {rewardId} claimed by {player} with quantity {quantity}`)
return true
end
-- more
このスクリプトを直接修正するか、サーバーコードに対する好みの場所であるServerScriptServiceに移動することができます。現状では、スクリプトはテスト目的での使用にのみ役立ちます。
プレイヤーに報酬を与える方法は体験によって異なります。いくつかの体験では、経験値ブーストを与えたり、プレイヤーの金額を増加させたりするかもしれません。他の体験では、カスタムインベントリシステムがあるかもしれませんし、その他の体験では、アイテムをプレイヤーのバックパックに配置するかもしれません。しかし全ての場合において、自分の関数でrewardClaimedHandlerFunction()を置き換える必要があります。
報酬と基準を追加する
ほとんどの報酬のカスタマイズはReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig内で行います。このモジュールスクリプトは、報酬の定義と、それをアンロックするための要件を定義します。
完全な型宣言を見ることができます(または新しいものを追加することができます)ReplicatedStorage.EngagementRewards.Configs.Types内ですが、あなたが取り組む必要があるのはおそらくEngagementRewardsConfigだけです。この機能パッケージには、2つの報酬タイプが含まれています: TimeとDaily。
local engagementRewardsConfig: Types.EngagementRewardsConfig = {[Types.RewardType.Time] = {tabDisplayName = "時間",tabOrder = 1,description = "プレイを続けて報酬をアンロックしよう!",rewards = {MinutesPlayed1 = {icon = 116913478160966,displayName = "アイスランス",requiredSecondsInGame = 1 * 5,},-- more[Types.RewardType.Daily] = {tabDisplayName = "デイリー",tabOrder = 2,description = "毎日プレイして報酬をアンロックしよう!",rewards = {DailyStreak1 = {icon = 116913478160966,displayName = "アイスランス",requiredDaysVisitedStreak = 1,effect = Types.RewardEffect.Valuable,},-- more
両方の報酬タイプにはアイコンが必要で、これは画像のロブロックスアセットIDです(デカールではありません)。UIで使用するための表示名も必要でしょう。1以外の値の場合はquantityを指定してください。また、報酬を貴重なものと指定したい場合(effect = Types.RewardEffect.Valuable)は、UI内で異なる背景フレームを与えることができます。
| 変数 | 型 | 説明 | デフォルト | 必須 |
|---|---|---|---|---|
| icon | Number | UIアイコンのためのロブロックスアセットID。 | N/A | はい |
| displayName | String | UIでの報酬の名前。 | RewardId | いいえ |
| quantity | Number | 与えるアイテムの数。 | 1 | いいえ |
| effect | RewardEffect | UIで使用する視覚効果。詳しくはUIをカスタマイズする。 | Types.RewardEffect.Default | いいえ |
時間報酬
Time報酬は、ゲーム内での一定の秒数後にアンロックされます。これらの数字はニーズに応じてカスタマイズできます。簡単なテストのために小さな数字を使用し、公開体験では10分後に報酬、30分後、1時間後、さらにその後に報酬を与えることができます。
秒数の計算を行いやすくするために、例えば2時間の場合、7200よりも2 * 60 * 60と指定した方が良いでしょう。
| 変数 | 型 | 説明 | デフォルト | 必須 |
|---|---|---|---|---|
| requiredSecondsInGame | Number | プレイヤーが報酬を得るためにゲーム内で過ごさなければならない秒数(正の整数)。 | N/A | はい |
デイリー報酬
Daily報酬は、一定の連続した日数のデイリーログイン後にアンロックされます。たとえば、プレイヤーが初めてログインする日には、3つのポーションやシナモンロールを与えるかもしれません。その後の日には、より貴重な消耗品を報酬し、7日間連続でログインした後には、新しい釣り竿のような耐久性のあるアイテムを与えるかもしれません。
| 変数 | 型 | 説明 | デフォルト | 必須 |
|---|---|---|---|---|
| requiredDaysVisitedStreak | Number | プレイヤーが報酬を得るために体験に接続しなければならない連続した日数。 | N/A | はい |
2つの追加のデイリー報酬設定オプションがDailyRewardTabConfig内に用意されています。
[Types.RewardType.Daily] = {tabDisplayName = "デイリー",tabOrder = 2,description = "毎日プレイして報酬をアンロックしよう!",isHiddenOnJoin = true,isAlignedToStreakResetTime = true,rewards = {DailyStreak1 = {icon = 116913478160966,displayName = "アイスランス",requiredDaysVisitedStreak = 1,},-- more
| 変数 | 型 | 説明 | デフォルト | 必須 |
|---|---|---|---|---|
| isHiddenOnJoin | Boolean | trueの場合、体験に参加すると報酬が自動的にポップアップしません。falseの場合、プレイヤーが新しいデイリー報酬を請求できる場合、体験に参加すると自動的にポップアップします。 | False | いいえ |
| isAlignedToStreakResetTime | Boolean | trueの場合、2日目の報酬は最初の日の請求可能時間の24時間後に請求可能です。falseの場合、2日目の報酬はその日の請求可能時間の翌日の最初の真夜中に請求可能です。たとえば、プレイヤーが午後11時(23:00)にログインして1日目の報酬を請求すると、trueの場合、彼らは翌日の午後11時まで2日目の報酬を請求できません。falseの場合、彼らは翌日の午前0時(00:00)に1時間後に2日目の報酬を請求できます。3日目以降の報酬は、前日の請求可能時間の24時間後には常に利用可能です。 | False | いいえ |
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を修正することができます。
ユーザーインターフェースのエントリポイントはReplicatedStorage.EngagementRewards.Client.UIControllerスクリプトで、必要なオブジェクトを取得してUIを初期化します。もしトップレベルのオブジェクトを追加または名前変更する場合(子だけを追加するかプロパティを変更する場合ではなく)、このフォルダー内のコードを更新して扱う必要があります。