미션 기능 패키지는 플레이어가 완료하여 보상을 받고 경험을 진행할 수 있는 미션을 생성할 수 있는 즉시 사용 가능한 기능을 제공합니다. 모든 미션은 ID, 카테고리 및 플레이어가 미션을 완료하기 위해 수행해야 하는 작업 목록을 가져야 합니다. 그러나 작업 목록은 비워둘 수 있어, 미션의 보상을 즉시 클레임할 수 있습니다.
패키지의 사용자 정의 옵션을 사용하여 고유한 게임 플레이 요구 사항을 충족하도록 모든 미션을 개인화할 수 있습니다. 예를 들어:
- 중장기 목표와 진행 감각을 추가하여 D7 및 D30 유지율을 목표로 합니다.
- 게임 내의 다양한 시스템을 드러내고 플레이어가 상호작용할 때 보상을 제공하여 참여도를 증가시킵니다.

패키지 가져오기
크리에이터 스토어는 프로젝트 내에서 사용할 수 있는 Roblox와 Roblox 커뮤니티에서 제작한 모든 자산을 찾을 수 있는 툴박스의 탭입니다. 여기에는 모델, 이미지, 메쉬, 오디오, 플러그인, 비디오, 글꼴 자산이 포함됩니다. 크리에이터 스토어를 사용하여 열린 경험에 하나 이상의 자산을 직접 추가할 수 있으며, 기능 패키지도 포함됩니다!
모든 기능 패키지가 제대로 작동하려면 코어 기능 패키지가 필요합니다. 코어 및 미션 기능 패키지 자산이 귀하의 인벤토리에 있으면 플랫폼의 어떤 프로젝트에서도 재사용할 수 있습니다.
인벤토리에서 패키지를 경험으로 가져오려면:
다음 구성 요소 세트의 인벤토리에 추가 링크를 클릭하여 Studio 내 인벤토리에 코어 및 미션을 추가하십시오.
Studio의 창 메뉴 또는 홈 탭 툴바에서 툴박스를 엽니다.
툴박스 창에서 인벤토리 탭을 클릭합니다. 내 모델 정렬이 표시됩니다.

기능 패키지 코어 타일을 클릭한 다음 미션 기능 패키지 타일을 클릭합니다. 두 패키지 폴더가 탐색기 창에 표시됩니다.
패키지 폴더를 ReplicatedStorage로 끌어다 놓습니다.
미션 정의하기
각 완료 가능한 미션은 미션을 완료하기 위해 완료해야 할 작업 세트, 구성 옵션 및 선택적 표시 메타데이터를 포함하며, 이는 ReplicatedStorage.Missions.Configs.Missions 내에서 정의할 수 있습니다. 이와 관련된 유형은 동일 폴더의 Types 스크립트에서 내보낼 수 있습니다.
필수 필드
각 미션에 필요한 필드는 다음과 같습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| missionId | string | 주요 미션 테이블 키. 모든 미션은 고유한 문자열로 식별됩니다. |
| categoryId | string | 미션은 카테고리에 속해야 하며, UI에서 카테고리별로 그룹화됩니다. |
| tasks | table | 플레이어가 미션을 완료하기 위해 완수해야 하는 작업 목록입니다. |
잠금 조건
기본적으로 미션은 플레이어에게 자동으로 잠금 해제되며 정확히 한 번만 완료할 수 있습니다. 그러나 다음 선택적 구성 옵션을 사용하여 이 동작을 변경할 수 있습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| prerequisites | table | 미션이 잠금 해제되기 전에 완료해야 하는 다른 missionIds 목록입니다. |
| manualOnly | bool | 미션의 자동 잠금 해제를 비활성화합니다. 대신, 미션을 잠금 해제하기 위해서는 함수를 호출해야 합니다. 다른 잠금 조건도 여전히 충족해야 합니다. |
| availableAfterUtc | bool | 지정된 UTC 시간 이전에는 미션을 잠금 해제할 수 없습니다. |
| availableBeforeUtc | bool | 지정된 UTC 시간 이후에는 미션을 잠금 해제할 수 없습니다. 이 시간 이전에 잠금 해제되었지만 완료되지 않은 경우, 미션이 실패합니다. |
| repeatable | bool | 미션이 완료된 후 다시 잠금 해제됩니다. |
| repeatLimit | number | 미션이 반복 가능할 경우, 이 횟수보다 더 반복할 수 없습니다. |
| repeatCooldownSeconds | number | 미션이 반복 가능할 경우, 잠금 해제되기까지 지연 시간이 있습니다. |
| expireSeconds | number | 미션이 잠금 해제되고 지정된 초 내에 완료되지 않으면 실패하게 됩니다. |
| expireCountOffline | bool | 미션에 expireSeconds가 있으며, expireCountOffline이 true로 설정된 경우, 플레이어가 경험에 실제로 있지 않을 동안의 시간이 미션 만료에 포함됩니다. |
메타데이터
미션은 미션 사용자 인터페이스에 어떻게 표시될지를 명시하는 메타데이터를 가지고 있습니다. 다음 선택적 필드를 사용하여 메타데이터를 사용자 정의할 수 있습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| displayName | string | 미션의 missionId 대신 사용자 인터페이스에 표시할 이름입니다. |
| description | string | 미션에 대한 추가 정보나 맥락을 제공하는 짧지 않은 텍스트 블록입니다. |
| visibleAfterComplete | bool | true로 설정하면, 미션이 완료된 후에도 목록에 표시되지만 완료됨으로 표시됩니다. |
| visibleAfterFailed | bool | true로 설정하면, 미션이 실패한 후에도 목록에 표시되지만 실패됨으로 표시됩니다. |
| visibleBeforeUnlocked | bool | true로 설정하면, 미션은 잠금 해제 가능하기 전에 목록에 표시되지만 잠겨 있습니다. |
| invisibleWhileActive | bool | true로 설정하면, 미션이 진행 중에도 보이지 않습니다. |
| rewards | table | 보상 표시 정보 목록입니다.
|
작업 정의하기
각 미션은 0개 이상의 작업을 가질 수 있습니다. 미션에 작업이 없는 경우, 잠금 해제와 동시에 클레임할 수 있습니다. 미션에 하나 이상의 작업이 있는 경우, 작업이 완료되면 플레이어는 미션과 관련된 보상을 수령할 수 있습니다. 각 작업에는 해당 미션과 관련된 키인 taskId가 있습니다.
작업은 두 가지 유형이 있습니다:
- 시간 제한 작업 - 작업을 여러 시점에서 시작하고 중지할 수 있습니다. 작업 타이머가 실행되는 동안 특정 시간이 경과해야 하고, 그러면 작업이 완료됩니다.
- 수량 작업 - 작업의 진행 상황을 추가하거나 설정할 수 있습니다. 진행 상황이 설정된 값에 도달하면 작업이 완료됩니다.
각 작업 유형은 다음 필드를 공유합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| taskType | string | 작업 유형이 수량 또는 시간 제한인지 지정합니다. |
| counter | object | (선택 사항) 이 작업이 추적하는 카운터입니다. 카운터는 숫자 또는 타이머에 대한 플레이어 특정의 지속 가능한 저장소입니다. 여러 작업이 단일 카운터를 추적할 수 있습니다. 예를 들어, 여러 작업이 플레이어가 수집한 동전 수를 추적하는 경우, 모두 동일한 "동전" 카운터를 공유할 수 있습니다. 이러한 작업은 독립적으로 새로 수집된 동전을 추적할 수 있으며, 이 경우 0부터 시작하거나 카운터 값에서 계속 세어 나갈 수 있습니다(이미 수집된 모든 동전).
|
| metadata | object | (선택 사항) 작업이 UI에 표시되는 방법에 대한 정보입니다.
|
| callToAction | object | (선택 사항) 콜백 함수를 트리거하는 버튼입니다.
|
수량 작업 필드
수량 작업에는 필수 값이 있습니다. 작업 진행 상황이 이 수치에 도달하면 작업이 완료됩니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| goalCount | number | (선택 사항) 작업을 완료하는 데 필요한 진행 상황입니다. |
시간 작업 필드
시간 작업에는 소비해야 하는 목표 시간이 있으며 시작하고 정지합니다. 목표 시간이 충족되면 작업이 완료됩니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| goalSeconds | number | 작업을 완료하기 위해 경과해야 하는 초의 수입니다. |
| startImmediately | bool | 작업이 시작된 이후가 아니라 잠금 해제되자마자 시간을 세기 시작해야 하는지 여부입니다. |
| includesOfflineTime | bool | 플레이어가 경험에 적극적으로 참여하지 않을 때 소비된 시간을 포함해야 하는지 여부입니다. |
카테고리 구성
카테고리는 명시적으로 정의할 필요는 없으며, 미션에 대한 카테고리는 기본값이 사용됩니다. 그러나 ReplicatedStorage.Missions.Configs.Categories에서 이러한 값을 구성하여 카테고리에 추가 효과를 추가할 수 있습니다. 카테고리는 고유한 CategoryIds로 식별되며, 이는 미션 구성에서 참조됩니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| repeatDelaySeconds | number | (선택 사항) 설정된 경우, 카테고리 내 모든 미션은 지정된 시간이 지날 때마다 리셋되며, 다시 잠금 해제되고 완료되며 보상을 클레임할 수 있습니다. 이는 주어진 카테고리 반복 내에서 반복될 수 있는 반복 가능한 미션과는 별개입니다. |
서버 로직 통합
ReplicatedStorage.Missions.Server.Examples.MissionsExample를 확인하여 서버가 미션 기능 패키지와 어떻게 상호작용하는지 확인하십시오.
미션 기능 패키지를 경험에 드래그한 후 주로 네 가지를 연결해야 합니다:
미션 구성에서 미션을 정의합니다.
작업 진행 상황이나 해당 진행 상황이 연결된 카운터를 업데이트하는 로직을 경험에 추가합니다.
README-- Jumps 작업으로 Jumping 미션의 진행 상황을 증가시킵니다.Missions.addProgressToTask(player, "Jumping", "Jumps", 1)-- TimeInBattle 작업으로 BattlingTime 미션의 타이머를 시작합니다.Missions.startTimedTask(player, "BattlingTime", "TimeInBattle")-- TimeInBattle 작업으로 BattlingTime 미션의 타이머를 중지합니다.Missions.stopTimedTask(player, "BattlingTime", "TimeInBattle")-- Jumps 카운터와 연결된 모든 작업의 진행 상황을 증가시킵니다.CounterSystem.addCounter(player, "Jumps", 1)-- TimeInBattle 타이머 카운터와 연결된 모든 시간 제한 작업의 타이머를 시작합니다.CounterSystem.startTimer(player, "TimeInBattle")-- TimeInBattle 타이머 카운터와 연결된 모든 시간 제한 작업의 타이머를 중지합니다.CounterSystem.stopTimer(player, "TimeInBattle")미션 완료 핸들러 및 선택적으로 잠금 해제 또는 실패 핸들러를 설정합니다. 완수 핸들러를 사용하여 경험에서 미션의 보상을 수여합니다.
READMElocal function completeHandler(player: Player, missionId: Types.MissionId)print(`{player}가 미션 {missionId}을 완료했습니다.`)-- 플레이어에게 보상을 수여합니다.endMissions.setCompletionHandler(missionId, completeHandler)자동으로 잠금 해제되지 않은 미션을 잠금 해제합니다. 미션 기능 패키지 로직은 미션이 완료되기 전에 모든 미션 요구 사항이 충족되도록 합니다. 그리고 그 보상을 수령할 수 있습니다.
READMEMissions.unlockMission(player, "Manual")
상수 구성
코어 기능 패키지의 상수는 두 개의 위치에 있습니다:
공유 상수는 ReplicatedStorage.FeaturePackagesCore.Configs.SharedConstants에 존재합니다.
패키지별 상수, 즉 미션 기능 패키지의 경우 ReplicatedStorage.Missions.Configs.Constants에 존재합니다.
추가로, 번역을 위한 문자열은 하나의 위치인 ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings에 나누어져 있습니다.
UI 구성 요소 사용자 정의
패키지 객체(색상, 글꼴 및 투명도 등)를 수정하여 미션 UI의 시각적 프레젠테이션을 조정할 수 있습니다. 예를 들어, ReplicatedStorage.Missions.Configs.Constants에서 SingleTaskMode를 활성화하면 하나의 작업만 있는 미션에 대해 미션 자체에 진행 바를 표시할 수 있습니다.
마지막으로, 경험에 이미 존재하는 UI와 미션 기능 패키지를 통합하고자 하는 경우, 클라이언트 ModuleScript MissionsClient에는 서버에서 플레이어의 미션 정보를 전송하는 데 필요한 모든 기능이 포함되어 있습니다.