참여 보상

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

참여 보상 기능 패키지는 특정 플레이어 활동에 대한 게임 내 보상을 제공하기 위한 사용자 정의 가능한 프레임워크로, 일일 로그인 연속 및 플레이 세션 시간을 포함합니다. 클라이언트 및 서버 로직 외에도, 이 패키지는 보상 진행 상황, 보상 상태 및 보상을 청구하는 기본 UI를 포함합니다.

패키지 가져오기

  1. Studio의 메뉴 또는 탭 도구 모음에서 도구 상자를 엽니다.

  2. 도구 상자 창에서 인벤토리 탭을 클릭합니다. 내 모델 정렬이 표시됩니다.

    Studio의 도구 상자 창에서 인벤토리 탭이 강조 표시된 모습.
  3. 기능 패키지 Core 타일을 클릭한 다음 참여 보상 기능 패키지 타일을 클릭합니다. 두 패키지 폴더가 탐색기 창에 표시됩니다.

  4. 폴더를 ReplicatedStorage로 드래그합니다.

패키지 초기화

패키지를 ReplicatedStorage로 이동하고 게임을 테스트하면 ReplicatedStorage.EngagementRewards.Server.ExamplesEngagementRewardsExample 스크립트가 실행됩니다.

이 스크립트는 게임에서 패키지를 사용하는 방법을 보여주며, 여러 모듈 스크립트를 요구하고 궁극적으로 플레이어에게 보상을 제공하는 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(`보상 {rewardId}{player}에 의해 수량 {quantity}로 청구되었습니다.`)
return true
end
-- 더 많은 내용

이 스크립트를 직접 수정하거나 서버 코드의 선호하는 위치인 ServerScriptService로 이동할 수 있습니다. 현재 상태로는 이 스크립트는 테스트 목적으로만 유용합니다.

플레이어에게 보상을 주는 방법은 게임에 따라 다릅니다. 일부 게임에서는 게임 부스트를 제공하거나 플레이어의 금액을 증가시킬 수 있습니다. 다른 게임에서는 사용자 정의 인벤토리 시스템을 가질 수 있으며, 또 다른 게임에서는 플레이어의 배낭에 아이템을 배치할 수 있습니다. 그러나 모든 경우에 rewardClaimedHandlerFunction()을 자신의 함수로 교체해야 합니다.

보상 및 기준 추가

대부분의 보상 사용자 정의는 ReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig 내에서 발생합니다. 이 모듈 스크립트는 보상과 이를 잠금 해제하기 위한 요구 사항을 정의합니다.

전체 유형 선언(또는 새 유형 추가)은 ReplicatedStorage.EngagementRewards.Configs.Types에서 확인할 수 있지만, 아마도 EngagementRewardsConfig와 작업하는 것만으로 충분할 것입니다. 이 기능 패키지는 두 가지 보상 유형을 포함합니다: 시간일일.

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를 지정하세요. 또한 UI에서 다른 배경 프레임을 제공하기 위해 보상을 귀중한 것으로 지정할 수 있습니다 (effect = Types.RewardEffect.Valuable).

변수유형설명기본값필수
icon숫자UI 아이콘에 대한 Roblox 자산 ID입니다.N/A
displayName문자열UI에서 사용할 보상 이름입니다.RewardId아니오
quantity숫자보상할 항목의 수입니다.1아니오
effectRewardEffectUI에서 사용할 시각적 효과입니다. UI 사용자 정의를 참조하세요.Types.RewardEffect.Default아니오

시간 보상

시간 보상은 게임 내에서 특정 초 수가 지나면 잠금 해제됩니다. 이러한 숫자는 필요에 맞게 사용자 정의할 수 있습니다. 테스트를 쉽게 하기 위해 작은 숫자를 사용할 수 있으며, 게시된 게임에서는 10분 후에 보상을 제공하고, 30분 후, 1시간 후에 또 다른 보상을 제공하는 식으로 진행할 수 있습니다.

곱셈을 사용하면 초 단위의 숫자를 사람이 다루기 쉽게 만들 수 있으므로, 2시간의 경우 2 * 60 * 60을 지정하는 것이 7200보다 더 나을 수 있습니다.

변수유형설명기본값필수
requiredSecondsInGame숫자플레이어가 보상을 얻기 위해 게임 내에서 소비해야 하는 초 수(양의 정수)입니다.N/A

일일 보상

일일 보상은 연속적인 일일 로그인 수에 따라 잠금 해제됩니다. 예를 들어, 플레이어가 로그인하는 첫날에 세 개의 물약이나 시나몬 롤을 제공할 수 있습니다. 이후 날에는 더 귀중한 소비재를 보상으로 제공하고, 일곱 연속 날 후에는 새로운 낚싯대를 같은 내구성 있는 아이템으로 제공할 수 있습니다.

변수유형설명기본값필수
requiredDaysVisitedStreak숫자플레이어가 보상을 얻기 위해 게임에 연결해야 하는 연속적인 날 수입니다.N/A

DailyRewardTabConfig에서 두 가지 추가 일일 보상 구성 옵션을 사용할 수 있습니다.

[Types.RewardType.Daily] = {
tabDisplayName = "일일",
tabOrder = 2,
description = "매일 플레이하여 보상을 잠금 해제하세요!",
isHiddenOnJoin = true,
isAlignedToStreakResetTime = true,
rewards = {
DailyStreak1 = {
icon = 116913478160966,
displayName = "얼음 창",
requiredDaysVisitedStreak = 1,
},
-- 더 많은 내용
변수유형설명기본값필수
isHiddenOnJoin부울true일 경우, 게임에 참여할 때 보상이 자동으로 팝업되지 않습니다. false일 경우, 플레이어가 청구할 새로운 일일 보상이 있을 경우 게임에 참여할 때 자동으로 팝업됩니다.false아니오
isAlignedToStreakResetTime부울true일 경우, 2일 차 보상은 초기 1일 차 청구 가능 시간으로부터 24시간 후에 청구할 수 있습니다. false일 경우, 2일 차 보상은 1일 차 청구 가능 시간 이후 첫 자정에 청구할 수 있습니다. 예를 들어, 플레이어가 오후 11시(23:00)에 로그인하고 1일 차 보상을 청구하면, true는 다음 날 오후 11시까지 2일 차 보상을 청구할 수 없음을 의미합니다. false는 2일 차 보상을 자정(00:00) 한 시간 후에 청구할 수 있음을 의미합니다. 3일 차 및 그 이후의 보상은 항상 이전 날의 청구 가능 시간으로부터 24시간 후에 사용할 수 있습니다.false아니오

UI 사용자 정의

이전 섹션에서 tabDisplayName, tabOrder, description 필드를 통해 사용자 인터페이스의 기본적인 사용자 정의가 가능하다는 것을 알 수 있습니다. ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings에서 일부 UI 문자열도 찾을 수 있습니다.

  • effect 변수를 사용하여 새로운 보상 배경을 지정하려면 ReplicatedStorage.EngagementRewards.Objects.RewardItemFrames에 프레임을 추가하세요. 그런 다음 프레임의 이름을 ReplicatedStorage.EngagementRewards.Configs.TypesTypes.RewardEffect 테이블에 추가하세요.

  • 보다 포괄적인 사용자 정의를 위해 ReplicatedStorage.EngagementRewards.Objects의 객체를 수정하세요. 예를 들어, RewardsHudButton.Background 프레임의 BackgroundColor3 또는 FooterContentFrame.ClaimableUIGradientColor를 수정할 수 있습니다.

  • 사용자 인터페이스의 진입점은 ReplicatedStorage.EngagementRewards.Client.UIController 스크립트로, 필요한 객체를 가져오고 UI를 초기화합니다. 최상위 객체를 추가하거나 이름을 바꾸는 경우(자식 추가 또는 속성 수정만 하는 것이 아닌 경우) 이 폴더의 코드를 업데이트하여 이를 처리해야 할 수 있습니다.

©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.