시즌 패스 기능 패키지는 플레이어가 미리 정의된 기간 동안만 사용할 수 있는 보상을 얻기 위해 퀘스트 목표를 완료할 수 있는 제한된 시간의 퀘스트 기반 진행 시스템을 생성하는 즉시 사용 가능한 기능을 제공합니다. 패키지의 사용자 정의 옵션을 사용하여 모든 시즌 패스를 개인화하여 청중에게 새로운 콘텐츠를 제공하고, 플레이어 유지율을 촉진하며, 수익을 창출할 수 있습니다.

패키지 가져오기
크리에이터 스토어는 프로젝트 내에서 사용할 수 있는 Roblox 및 Roblox 커뮤니티에서 만든 모든 자산을 찾는 데 사용할 수 있는 툴박스의 탭입니다. 여기에는 모델, 이미지, 메시, 오디오, 플러그인, 비디오 및 글꼴 자산이 포함됩니다. 크리에이터 스토어를 사용하여 기능 패키지를 포함하여 열린 게임에 하나 이상의 자산을 직접 추가할 수 있습니다!
모든 기능 패키지는 제대로 작동하기 위해 코어 기능 패키지가 필요하며, 시즌 패스 패키지는 시즌의 미션을 정의하기 위해 미션 기능 패키지가 필요합니다. 세 가지 패키지 자산이 모두 귀하의 인벤토리에 있으면 플랫폼의 모든 프로젝트에서 재사용할 수 있습니다.
인벤토리에서 게임으로 패키지를 가져오려면:
다음 구성 요소 세트에서 인벤토리에 추가 링크를 클릭하여 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 = "3단계 미션",
description = "10번 점프하기",
visibleAfterComplete = true,
visibleBeforeUnlocked = true,
rewards = {
{
icon = 16826775737,
displayName = "아이템",
},
{
icon = 106912146245070,
displayName = "시즌 XP",
},
},
},
}시즌 구성
포함할 모든 미션을 설정한 후에는 시즌 패스 자체를 구성할 차례입니다. ReplicatedStorage.SeasonPasses.Configs.Season에는 참조용 시즌 구성 예제가 있으며, 다음 코드 샘플은 해당 파일에서 가져온 것입니다.
패스 정의
패스는 플레이어가 시즌 패스의 미션 및 잠재적 보상에 접근하기 위해 일회성 Robux 요금을 지불하도록 허용합니다. 고유한 자산 ID로 패스를 생성한 후, 시즌의 premiumTrack 필드에서 패스의 세부 정보를 설정할 수 있습니다. 예를 들어, 다음 코드 샘플은 시즌 패스를 나타내기 위해 928192647라는 예제 자산 ID로 패스를 정의한 다음, 시즌 패스에 "프리미엄 트랙"이라는 트랙 이름을 부여합니다.
premiumTrack = {
pricing = {
gamePassId = 928192647,
},
trackMetadata = {
trackName = "프리미엄 트랙",
},
},계층 및 보상 구성
시즌 계층은 플레이어가 시즌 동안 보상을 얻기 위해 충족해야 하는 이정표를 나타냅니다. 플레이어는 미션을 완료하여 XP를 얻고, 충분한 XP를 얻으면 다음 계층으로 올라가고 방금 완료한 계층에 대한 보상을 받습니다. 계층에는 보상을 청구하는 데 필요한 XP의 임계값을 설정하는 upperBoundXP 속성이 있습니다. 각 계층은 두 가지 유형의 보상을 제공할 수 있습니다:
- 무료 - 플레이어가 시즌 패스를 구매하지 않고도 얻을 수 있는 보상.
- 프리미엄 - 플레이어가 시즌 패스를 구매해야만 얻을 수 있는 보상.
예를 들어, 다음 코드 샘플은 무료 얼음 창 보상과 프리미엄 폭발 방패 보상을 얻기 위해 100 XP가 필요한 하나의 계층이 있는 시즌을 보여줍니다. icon은 보상을 표시하기 위한 UI 이미지의 자산 ID이며, displayName은 보상의 이름을 표시합니다. displayName은 UI에 표시되지만, rewardId는 플레이어에게 숨겨져 있으며 주로 데이터 저장소 용도로 사용됩니다.
tiers = {
[1] = {
upperBoundXP = 100,
freeReward = {
icon = 128181721602852,
displayName = "얼음 창",
rewardId = "iceLance",
},
premiumReward = {
icon = 95882371958115,
displayName = "폭발 방패",
rewardId = "blastShield",
},
},
}이 스크립트는 한 번에 하나의 계층을 구성하는 방법을 설명하기 위한 것이지만, 대부분의 시즌은 하나 이상의 계층을 포함합니다. 시즌에 대해 여러 계층과 보상을 정의할 때는 각 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상수 구성
코어 기능 패키지의 상수는 두 곳에 있습니다:
- 공유 상수는 ReplicatedStorage.FeaturePackagesCore.Configs.SharedConstants에 있습니다.
- 패키지별 상수, 이 경우 시즌 패스 기능 패키지는 ReplicatedStorage.SeasonPasses.Configs.Constants에 있습니다. 게임의 디자인 요구 사항을 충족하기 위해 조정할 수 있는 주요 항목은 다음과 같습니다:
- 사운드 자산 ID
- 구매 효과 지속 시간 및 입자 색상 또한, 번역을 위한 문자열이 하나의 위치에 나누어져 있습니다: ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings.
UI 구성 요소 사용자 정의
패키지 객체의 색상, 글꼴 및 투명도를 수정하여 시즌 패스 프롬프트의 시각적 표현을 조정할 수 있습니다. 그러나 객체를 계층적으로 이동하면 코드가 해당 객체를 찾을 수 없게 되므로 코드에 조정을 해야 한다는 점을 유의하세요.
시즌은 미션 기능 패키지 UI 구성 요소에 프로그래밍적으로 추가되는 다음과 같은 고급 구성 요소로 구성됩니다:
- SeasonBottomFrame – 각 트랙에 대한 정보, 계층 보상 스크롤 프레임 및 계층 데이터를 포함하는 프레임.
- SeasonDescriptionFrame - 시즌 제목, 설명 및 카운트다운을 표시하는 헤더의 프레임.
- TierRewardFrame - 특정 계층에 대한 보상을 표시하는 프레임.
- TierProgressFrame - 플레이어가 현재 작업 중인 계층에 대해 진행한 정도를 표시하는 프레임.
- PurchaseFrame - 플레이어에게 프리미엄 패스를 구매하라는 프롬프트를 표시하는 프레임.
- SeasonProgressFrame - 전체 시즌 동안 플레이어의 진행률 막대를 표시하는 프레임.
- RewardsButtonFrame - 시즌 정보를 SeasonBottomFrame을 통해 표시할 수 있는 버튼을 추가하는 프레임.