シーズンパス機能パッケージは、プレイヤーがクエスト目標を達成して、あらかじめ定義された期間中にのみ利用可能な報酬を獲得できる、限定的なクエストベースの進行システムを作成するための機能を提供します。パッケージのカスタマイズオプションを使用することで、すべてのシーズンパスをパーソナライズし、新しいコンテンツをオーディエンスに提供し、プレイヤーの維持を促進し、収益を生み出すことができます。

パッケージを取得する
クリエイターストアは、プロジェクト内で使用するためにRobloxとRobloxコミュニティによって作成されたすべてのアセットを見つけるために使用できるツールボックスのタブです。モデル、画像、メッシュ、オーディオ、プラグイン、ビデオ、フォントアセットを含むアセットを見つけることができます。クリエイターストアを使用して、オープンな体験に1つ以上のアセットを直接追加することもできます。機能パッケージも含まれています!
すべての機能パッケージが適切に機能するためには、コア機能パッケージが必要であり、シーズンパスパッケージはシーズンのミッションを定義するためにミッション機能パッケージを要します。これら3つのパッケージアセットがすべてあなたのインベントリにあると、プラットフォーム上の任意のプロジェクトで再利用することができます。
インベントリから体験にパッケージを追加するには:
次のコンポーネントセットの在庫に追加リンクをクリックして、Studio内のインベントリにコア、ミッション、シーズンパスパッケージを追加します。
Studioのウィンドウメニューまたはホームタブのツールバーから、ツールボックスを開きます。
ツールボックスウィンドウで、インベントリタブをクリックします。マイモデルのソートが表示されます。

機能パッケージコアタイル、ミッション機能パッケージタイル、次にシーズンパス機能パッケージタイルをクリックします。すべてのパッケージフォルダがエクスプローラーウィンドウに表示されます。
パッケージフォルダをReplicatedStorageにドラッグします。
データストア呼び出しを許可して、パッケージを使用してプレイヤーの購入を追跡します。
- Studioのファイル ⟩ 体験設定ウィンドウを開きます。
- セキュリティタブに移動し、APIサービスへのスタジオアクセスを有効にするを有効にします。
ミッション依存関係を構成する
シーズンが適切に機能するためには、シーズンパス機能パッケージがプレイヤーの進行を追跡し、そのUIコンポーネントを更新できるようにロジックを追加する必要があります。シンプルさのために、以下の例ではミッション機能パッケージを使用し、プレイヤーがミッションを完了するたびにSeasonPasses.addProgressToSeason()を呼び出しますが、プレイヤーの進行を追跡する方法は他にもあります。ミッションを定義するかどうかにかかわらず、シーズンパスコードが機能するためには、あなたの体験にミッション機能パッケージを追加する必要があります。
ミッションはそれぞれ、ミッションを完了するために完了しなければならない一連のタスク、設定オプション、オプションの表示メタデータを持っています。ミッションとそのタスクの構成方法についての詳細なガイドについては、ミッションを定義するを参照してください。
ミッションからシーズンにXPを追加する
この例では、ミッション機能パッケージを使用して、プレイヤーが完了できるミッションを定義し、経験値(XP)を獲得してシーズンを進行する方法を示します。プレイヤーが定義されたミッションを完了したときにXPを付与するには、ReplicatedStorage.Missions.Server.Examples.MissionsExampleサーバースクリプトにロジックを追加して、シーズンパスデータをインポートし、プレイヤーの進行に応じて報酬を付与する必要があります。
local SeasonPasses = require(ReplicatedStorage.SeasonPasses.Server.SeasonPasses)
local function completeHandler(player: Player, missionId: Types.MissionId)
print(`{player}はミッション{missionId}を完了しました`)
if missionId == "Walking" then
SeasonPasses.addProgressToSeason(player, 100)
end
if missionId == "Walking2" then
SeasonPasses.addProgressToSeason(player, 100)
end
if missionId == "Walking3" then
SeasonPasses.addProgressToSeason(player, 100)
end
if missionId == "Availability" then
SeasonPasses.addProgressToSeason(player, 100)
end
if missionId == "Manual" then
SeasonPasses.addProgressToSeason(player, 100)
end
if missionId == "Minutely" then
SeasonPasses.addProgressToSeason(player, 100)
end
end
シーズンティアの報酬アイコンを追加する
ミッションを完了した際にプレイヤーにXPを付与するだけでなく、シーズンパス機能パッケージはミッション機能パッケージを使用して、シーズン内のユニークな報酬ティアを定義します。十分なXPを得ることでプレイヤーが獲得できるティア報酬のオンスクリーンアイコンを追加したい場合は、各シーズンティア報酬のMissions設定にアセットIDを追加します。
Tier3Mission = {categoryId = "General",metadata = {displayName = "Tier 3 ミッション",description = "10回ジャンプする",visibleAfterComplete = true,visibleBeforeUnlocked = true,rewards = {{icon = 16826775737,displayName = "アイテム",},{icon = 106912146245070,displayName = "シーズンXP",},},},}
シーズンを構成する
シーズンに含めたいすべてのミッションを設定したら、シーズンパス自体を構成する時が来ました。ReplicatedStorage.SeasonPasses.Configs.Seasonには、参考用のシーズン構成の例があります。以下のコードサンプルはそのファイルからのものです。
パスを定義する
パスを使用すると、プレイヤーにシーズンパスのミッションや潜在的な報酬にアクセスできるように、一度限りのRobux料金を請求することができます。ユニークなアセットIDを持つパスを作成した後、シーズンのpremiumTrackフィールドにパスの詳細を設定できます。 例えば、以下のコードサンプルは、シーズンパスを表す例のアセットID928192647のパスを定義し、そのシーズンパスに"プレミアムトラック"というトラック名を付けます。
premiumTrack = {pricing = {gamePassId = 928192647,},trackMetadata = {trackName = "プレミアムトラック",},},
ティアと報酬を構成する
シーズンティアは、プレイヤーがシーズンを通して報酬を得るために満たす必要のあるマイルストーンを表します。ティアを上るために、プレイヤーはミッションを完了してXPを獲得し、十分なXPを獲得したときに次のティアに進級し、ちょうど完了したティアの報酬を受け取ります。 ティアには、ティアの報酬を受け取るために必要なXPの閾値を設定するupperBoundXPプロパティがあります。各ティアは次の2種類の報酬を提供できます:
- 無料 - プレイヤーがシーズンパスを購入せずに獲得できる報酬。
- プレミアム - プレイヤーがシーズンパスを購入することによってのみ獲得できる報酬。
以下のコードサンプルを確認すると、100XPを獲得して無料のアイスランスの報酬とプレミアムのブラストシールドの報酬を獲得する必要がある1つのティアを持つシーズンが示されます。iconは報酬のために表示されるUI画像のアセットIDであり、displayNameは報酬の名前を表示します。displayNameはUIに表示されますが、rewardIdはプレイヤーから隠れており、主にデータストアの目的で使用されます。
tiers = {[1] = {upperBoundXP = 100,freeReward = {icon = 128181721602852,displayName = "アイスランス",rewardId = "iceLance",},premiumReward = {icon = 95882371958115,displayName = "ブラストシールド",rewardId = "blastShield",},},}
このスクリプトは1つのティアを構成する方法を示す例ですが、ほとんどのシーズンには1つ以上のティアが含まれています。複数のティアと報酬をシーズンに定義する際は、各rewardIdが数値であり、増加順に整理されていることを確認してください。そうすることで、ティアがリストで定義した順序で表示されるようになります。
シーズンの詳細を定義する
ティアと報酬を持つシーズンパスができたら、シーズンの詳細を定義する時が来ました:
- title - シーズンの名前。
- description - シーズンの説明。
- startUtc - 協定世界時でのシーズンの開始。
- endUtc - 協定世界時でのシーズンの終了。
- seasonId - プレイヤーがあるシーズンを通じて得たXPを追跡することができます。
パッケージはシーズンのカウントダウンを表示するためにstartUtcとendUtcを使用します。
startUtc = DateTime.fromUniversalTime(2024, 10, 01, 17, 0, 0),endUtc = DateTime.fromUniversalTime(2025, 2, 28, 17, 0, 0),title = "シーズン1",description = "宇宙都市へ",seasonId = "season1",
サーバーロジックを統合する
ReplicatedStorage.SeasonPasses.Server.Examples.SeasonPassesExampleを確認して、サーバーがシーズンパス機能パッケージとどのように相互作用するかを示します。以下のコードスニペットは、そのスクリプトからのものです。
主に報酬をプレイヤーに付与するためのハンドラ関数を作成する必要があります。たとえば、以下のコードサンプルでは、プレイヤーが次のティアに進行するときに追跡し、シーズンパスを購入した場合は無料の報酬だけでなく、無料とプレミアムの両方の報酬を付与するrewardClaimedHandlerFunction()関数を作成します。
あなたの目的のために、task.wait()呼び出しを、プレイヤーがシーズンで請求した報酬を取得できるロジックに置き換えます。この関数は必ずブーリアンを返す必要があります:サーバーが報酬を付与した場合はtrue、そうでなければfalseを返します。
local function rewardClaimedHandlerFunction(_player: Player, _rewardId: Types.RewardId): boolean
task.wait(2)
return true
end
local function initializeRewardClaimedHandlers()
for tierId, tier in pairs(Season.tiers) do
if tier then
if tier.freeReward then
SeasonPasses.setRewardClaimedHandler(tier.freeReward.rewardId, rewardClaimedHandlerFunction)
end
if tier.premiumReward then
SeasonPasses.setRewardClaimedHandler(tier.premiumReward.rewardId, rewardClaimedHandlerFunction)
end
end
end
end
定数を構成する
コア機能パッケージの定数は2つの場所にあります:
- 共有定数はReplicatedStorage.FeaturePackagesCore.Configs.SharedConstantsにあります。
- この場合、シーズンパス機能パッケージのパッケージ固有の定数はReplicatedStorage.SeasonPasses.Configs.Constantsにあります。 あなたの体験のデザイン要件を満たすために調整したい主なもの:
- サウンドアセットID
- 購入効果の持続時間と粒子の色 さらに、翻訳用の文字列が1つの場所に分けられているのを見つけることができます:ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings。
UIコンポーネントをカスタマイズする
パッケージオブジェクトの色、フォント、透明度を変更することで、シーズンパスのプロンプトの視覚的なプレゼンテーションを調整できます。しかし、オブジェクトをヒエラルキー内で移動させる場合、コードがそれらを見つけられなくなるため、コードに調整を加える必要があることを覚えておいてください。
シーズンは、ミッション機能パッケージのUIコンポーネントにプログラム的に追加される以下の高レベルコンポーネントで構成されます:
- SeasonBottomFrame – 各トラックに関する情報、ティアの報酬のスクロールフレーム、およびティアデータを含むフレーム。
- SeasonDescriptionFrame - シーズンのタイトル、説明、カウントダウンを表示するヘッダーのフレーム。
- TierRewardFrame - 特定のティアの報酬を表示するフレーム。
- TierProgressFrame - プレイヤーが現在取り組んでいるティアにどれだけ進んだかを表示するフレーム。
- PurchaseFrame - プレイヤーにプレミアムパスの購入を促すフレーム。
- SeasonProgressFrame - シーズン全体にわたるプレイヤーの進度を表示するフレーム。
- RewardsButtonFrame - シーズンの情報をSeasonBottomFrameを通じて表示できるボタンを追加するフレーム。