경험 구성

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

경험 구성은 서버를 재시작하지 않고도 게임 내 값을 실시간으로 업데이트할 수 있게 해줍니다:

  • 새로운 온보딩 던전을 활성화하거나 비활성화하는 등의 기능을 켜고 끌 수 있습니다.
  • 보스 체력, 경험치 획득량 또는 아이템 가격과 같은 게임 내 값을 조정할 수 있습니다.
  • 자정에 시작하는 할로윈 이벤트와 같은 시간 제한 콘텐츠를 시작할 수 있습니다.
  • 신규 플레이어에게 추가 방어구를 제공하는 등, 플레이어마다 다른 값을 부여할 수 있습니다.

구성은 키와 값의 형태를 가집니다. 코드에서 하드코딩된 상수를 사용하는 대신, 키를 사용하여 값을 가져오고(문자열, 숫자, 불리언 또는 JSON 객체) 원하는 때에 그 값을 업데이트할 수 있습니다. 새로운 버전을 게시할 필요가 없습니다. 필요한 코드 변경은 최소한입니다:

local ConfigService = game:GetService("ConfigService")
local configSnapshot = ConfigService:GetConfigAsync()
local myValue = configSnapshot:GetValue("my_key_name")

동시에 최대 1,000개의 활성 구성을 가질 수 있으며, Creator Hub 또는 Roblox Studio에서 관리할 수 있습니다.

Creator Hub의 구성 페이지 개요

구성 생성 및 편집

  1. 경험의 Creator Hub 구성 페이지에서 구성 생성을 클릭합니다.

  2. 키, 유형, 값 및 선택적으로 구성의 목적을 나중에 식별하는 데 도움이 되는 설명을 지정합니다. 지원되는 유형은 문자열, 숫자, 불리언 및 JSON 객체입니다. 다음을 클릭합니다.

  3. (선택 사항) 타겟팅 조건 및 값을 추가합니다. 조건은 특정 기준(예: 게임을 한 번도 플레이하지 않은 사용자 또는 포르투갈어를 사용하는 사용자)에 맞는 사용자에게 구성 값을 적용할 수 있게 해줍니다. 자세한 내용은 특정 플레이어에게 구성 타겟팅을 참조하세요.

  4. 생성된 코드 스니펫을 경험의 서버 스크립트에 복사합니다. 일반적으로 ServerScriptService에 위치합니다. 플레이어에 따라 다르지 않은 "전역" 구성의 경우, 코드는 다음과 비슷할 수 있습니다:

    local ConfigService = game:GetService("ConfigService")
    local configSnapshot = ConfigService:GetConfigAsync()
    local MY_KEY = "my_key" -- 선택 사항, 구성 키를 상수로 저장
    local myValue = configSnapshot:GetValue(MY_KEY)

    조건부 구성실험의 경우, 코드는 약간 다릅니다:

    local ConfigService = game:GetService("ConfigService")
    local Players = game:GetService("Players")
    local MY_KEY = "my_key" -- 선택 사항, 구성 키를 상수로 저장
    local function onPlayerAdded(player)
    local playerConfigSnapshot = ConfigService:GetConfigForPlayerAsync(player)
    local myValue = playerConfigSnapshot:GetValue(MY_KEY)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  5. 값을 다른 변수처럼 사용합니다. 구성은 코드 내에서 사용하지 않으면 아무런 작용도 하지 않습니다.

스크립트에서 구성 작업에 대한 자세한 내용은 코드에 구성 추가를 참조하세요.

구성을 편집하는 것은 생성하는 것과 다르지 않습니다. 편집 버튼을 클릭하고 원하는 대로 값과 설명을 업데이트합니다.

한계

구성 값은 유형별로 다음과 같은 한계를 가집니다.

유형최대 크기
문자열100,000 문자
숫자±1.7976931348623157e+308, ±2^53의 정확한 정수 표현
불리언해당 없음
JSON100,000 문자

구성 게시

구성을 생성한 후, 구성은 대기 중 상태로 이동하여 공개적으로 사용 가능해지기 전에 테스트할 수 있습니다. 대기 중 변경 사항은 스튜디오 플레이 세션에서 귀하와 귀하의 팀이 사용할 수 있으며, 라이브 경험의 플레이어에게는 제공되지 않습니다. Creator Hub의 구성 페이지는 모든 활성 및 대기 중인 변경 사항을 보여줍니다.

게시되지 않은 변경 사항을 보여주는 구성 페이지
  1. 대기 중인 변경 사항을 테스트한 후, 지금 게시를 클릭하여 거의 즉시 모든 플레이어에게 게시합니다(약 15초에서 1분 사이). 더 긴 점진적인 롤아웃 기간을 선호하는 경우 15분 동안 게시를 선택할 수도 있습니다. 경우에 따라 클라이언트는 게시 후 몇 분이 지나야 변경 사항을 반영할 수 있습니다.
  2. (권장) 업데이트한 내용을 나타내는 설명적인 게시 메시지를 추가합니다. 이 메시지는 기록 페이지에 나타나며, 나중에 귀하와 귀하의 팀이 변경의 목적을 식별하는 데 도움이 될 수 있습니다.

특정 플레이어에게 구성 타겟팅

기본적으로 구성은 모든 사람에게 동일한 값을 제공합니다. 조건부 구성을 사용하면 플레이어 속성(국가, 경과 기간, 언어, 지불 상태 등)에 따라 서로 다른 플레이어에게 다른 값을 제공할 수 있습니다.

조건부 구성은 플레이어가 받는 값을 결정하는 세 가지 부분으로 구성됩니다:

  • 조건부 규칙은 누가 일치하는지를 정의합니다. 각 규칙은 "첫 30일 동안의 활성 지불자"와 같은 논리적 표현으로, 플레이어 속성을 평가합니다.
  • 규칙 순서는 플레이어가 여러 규칙과 일치할 때 어떤 규칙을 선택할지를 정의합니다. Roblox는 규칙을 위에서 아래로 평가하고 첫 번째 일치하는 분기를 적용합니다. 규칙은 개별 키에 조건부 값을 추가하는 순서와 관계없이 전역적으로 정렬됩니다.
  • 조건부 값은 일치하는 플레이어가 받는 값을 정의합니다. 각 조건에 대해 값을 연결합니다. 플레이어가 해당 조건 내의 규칙과 일치하면 관련 값을 받으며, 그렇지 않으면 구성의 기본 값을 받습니다.

지원되는 속성

조건부 구성은 다음 속성을 지원합니다. 이러한 속성은 분석 대시보드의 동등한 필터분석과 동일한 정의를 공유합니다.

속성설명
국가플레이어의 지리적 위치.
언어플레이어의 언어 설정.
신규 vs 재방문플레이어가 경험을 처음 플레이하는지 아니면 이전에 플레이한 적이 있는지 여부.
출처플레이어가 경험을 찾은 방법(예: 홈페이지 추천, 검색 또는 스폰서 광고).
플레이어가 처음 플레이한 시점플레이어가 경험을 처음 플레이한 시점(예: 0-30일 전 또는 31-90일 전). 매일 계산됩니다.
게임 내 활성 지불자 상태경험 내에서 플레이어의 결제 활동으로, 지불하는 사용자 세그먼트를 타겟팅할 수 있게 해줍니다. 매일 계산됩니다.
게임 내 활동 상태플레이어가 경험을 얼마나 최근에 플레이했는지로, 신규, 활성, 중단 및 재활성화된 플레이어를 다르게 처리할 수 있게 해줍니다. 매일 계산됩니다.
사용자 참여플레이어가 매주 경험을 얼마나 많이 플레이하는지로, 가장 참여도가 높은 플레이어와 더 캐주얼한 플레이어를 구분할 수 있게 해줍니다. 매일 계산됩니다.
플랫폼 지출자 상태플레이어가 Roblox 플랫폼 전역에서 활성 지출자인지 여부. 매일 계산됩니다.
플랫폼 활동 상태플레이어가 Roblox의 다른 곳에서 얼마나 최근에 플레이했는지로, 경험 내에서만이 아닙니다. 매일 계산됩니다.

조건부 값 생성

구성을 생성하거나 편집할 때 조건을 추가합니다. 타겟팅 추가 단계에서 조건을 추가합니다:

  1. 기존 조건을 선택하거나 새로 만들기를 클릭합니다.
  2. 하나 이상의 규칙을 추가합니다.
  3. 일치하는 플레이어가 받는 값을 설정합니다.

예를 들어, 지난 30일 이내에 플레이를 시작한 상위 활성 지불자에게 더 어려운 경험을 제공하기 위해 dynamicBossHealth 값을 증가시킬 수 있습니다.

구성에 대한 조건부 규칙을 보여주는 타겟팅 추가 단계

코드에서 타겟팅된 값에 접근

타겟팅된 값을 검색하려면 ConfigService:GetConfigForPlayerAsync()를 사용합니다. 이 메서드는 개별 플레이어에 대한 규칙과 순서를 평가합니다. ConfigService:GetConfigAsync()는 특정 플레이어에 국한되지 않기 때문에 타겟팅을 적용하지 않습니다. 자세한 내용은 코드에 구성 추가를 참조하세요.

모범 사례 및 한계

  • 모든 조건부 값은 구성의 기본 값의 데이터 유형(불리언, 문자열, 숫자 또는 JSON)과 일치해야 합니다.
  • 게임당 최대 100개의 조건을 가질 수 있습니다.
  • 각 구성 키는 최대 20개의 조건을 지원합니다.
  • 게시하기 전에 규칙 순서를 확인하세요. 규칙이 전역적으로 정렬되므로 평가 순서가 올바르게 우선 순위가 매겨졌는지 확인하세요. 순서를 검토하려면 조건 탭을 클릭하세요.

스튜디오에서 구성 생성 및 편집

원하는 경우 Roblox Studio에서 구성을 생성, 편집, 대기 및 게시할 수 있습니다. 파일 > 구성 열기를 클릭하여 위젯을 엽니다. 스튜디오 인터페이스는 새로운 값을 대기 및 테스트하는 데 특히 편리합니다.

구성과 작업하기 위한 스튜디오 창

다른 경험에 구성 게시

스튜디오에서 구성을 다른 경험에 게시할 수 있으며, 이는 해당 경험의 구성을 완전히 덮어씁니다. 이는 대기 또는 개발 경험에서 라이브 경험으로 구성을 동기화하는 데 특히 유용할 수 있습니다.

  1. Roblox Studio에서 상단 메뉴로 이동하여 파일 > 구성 열기를 선택합니다.

  2. 구성 위젯의 게시됨 탭에서 ⋮ 아이콘을 클릭하고 다른 이름으로 게시를 선택합니다.

    구성을 경험에 게시하기 위한 스튜디오 창
  3. 나타나는 대화 상자에서 편집 권한이 있는 그룹 목록에서 대상 경험을 찾아 선택합니다.

    경험에 구성 게시

기록 보기 및 구성 복원

구성 페이지에서 기록을 클릭하여 과거 업데이트를 확인합니다. 각 업데이트에는 변경 시간 및 날짜, 변경을 수행한 사람, 게시 메시지가 포함됩니다.

구성 값에 대한 차이를 확장한 기록 페이지

  • 각 행을 확장하여 키, 변경 전 값 및 변경 후 값을 확인합니다.
  • 키 검색 상자를 사용하여 키를 검색합니다. 설명이나 값이 아니라 키만 검색합니다.

기록 페이지에서는 구성을 이전 상태로 복원할 수도 있습니다:

  1. 변경 사항 옆의 복원을 클릭하여 "이전" 값을 대기 상태로 만듭니다. 구성을 복원하면 기존의 대기 중인 변경 사항이 모두 삭제됩니다.
  2. 구성 페이지로 돌아가서 구성 게시를 진행합니다.

코드에 구성 추가

구성과 작업하기 위한 주요 클래스는 ConfigService로, 경험에 대한 최신 키와 값을 가져옵니다. ConfigService는 서버 스크립트에서만 사용할 수 있습니다. 클라이언트 스크립트에서 메서드를 호출하려고 하면 오류가 발생합니다.

구성과 작업하기 위한 첫 번째 단계는 ConfigSnapshot을 검색하는 것입니다. 이는 현재 시점에서 모든 구성의 최신 값을 나타냅니다. 스냅샷을 가져오는 방법은 두 가지가 있습니다:

  • ConfigService:GetConfigAsync()는 경험의 모든 플레이어에게 적용할 전역 구성을 위한 것입니다:

    local ConfigService = game:GetService("ConfigService")
    local configSnapshot = ConfigService:GetConfigAsync()
    local bossHealth = configSnapshot:GetValue("bossHealth")
  • ConfigService:GetConfigForPlayerAsync()는 플레이어별 구성을 가져와 서로 다른 플레이어가 서로 다른 값을 받을 수 있도록 합니다. 조건부 구성실험에 사용합니다.

    local ConfigService = game:GetService("ConfigService")
    local Players = game:GetService("Players")
    local function onPlayerAdded(player)
    local playerConfigSnapshot = ConfigService:GetConfigForPlayerAsync(player)
    local bossHealth = playerConfigSnapshot:GetValue("bossHealth")
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

어느 경우든, 키가 존재하지 않으면 ConfigSnapshot:GetValue()는 nil을 반환합니다.

자동 완성

구성은 스크립트 편집기의 자동 완성과 통합되어 있습니다. ConfigSnapshot:GetValue()를 호출하면 편집기가 구성 키 이름을 제안하고 변수 이름 위에 마우스를 올리면 각 구성의 유형을 표시합니다.

스크립트가 --!strict 모드를 사용하는 경우, 린터가 유형을 감지하고 검증할 수 있습니다.

자동 완성은 복잡한 중첩 JSON 유형을 사용하는 구성에서도 작동합니다.

스냅샷 새로 고침

ConfigSnapshots는 요청한 시점의 구성 상태를 나타냅니다. 게임 플레이를 방해하지 않기 위해, 구성에 대한 업데이트는 스냅샷에 자동으로 전파되지 않습니다. 예를 들어, 경쟁 슈팅 게임에서는 라운드 간에만 새로운 구성 값을 원할 수 있습니다. 그래야 무기 속성이 경기 중에 변동하지 않습니다.

최신 값을 수동으로 가져오려면 ConfigSnapshot:Refresh() 메서드를 사용합니다. 선택적으로, ConfigSnapshot.UpdateAvailable 이벤트에 함수를 연결하여 자동으로 새로 고칠 수 있습니다:

configSnapshot.UpdateAvailable:Connect(function()
configSnapshot:Refresh()
end)

스냅샷을 새로 고친 후, ConfigSnapshot:GetValueChangedSignal()을 사용하여 특정 키의 변경 사항을 듣고 경험의 코드를 업데이트할 수 있습니다:

configSnapshot:GetValueChangedSignal("bossHealth"):Connect(function(newHealthValue)
spawnNewBoss(newHealthValue)
end)

오류 처리

구성이 로드되지 않거나 이전에 로드된 적이 없는 경우, ConfigService:GetConfigAsync()는 오류를 발생시킵니다.

ConfigService가 이전에 로드된 후 Roblox 서버와의 연결을 잃으면, ConfigService:GetConfigAsync()는 최신 사용 가능한 값이 포함된 스냅샷을 반환합니다. 이러한 스냅샷은 재연결을 시도하며, 새로운 업데이트를 성공적으로 로드하면 UpdateAvailable 이벤트를 발생시킵니다.

이러한 드문 상황을 처리하는 방법은 귀하에게 달려 있습니다. 호출을 pcall()로 감싸고 코드에 기본값을 두거나, 플레이어에게 오류를 표시하고 스냅샷이 재연결될 때까지 기다리거나, 다른 해결책을 사용할 수 있습니다.

구성 테스트

ConfigService는 스튜디오와 라이브 서버 모두에서 전체 경험에 영향을 주지 않고 구성 변경을 임시로 테스트할 수 있는 내장 메서드를 제공합니다.

로컬 테스트 값을 설정하려면 서버 스크립트 또는 개발자 콘솔에서 ConfigService:SetTestingValue()를 호출합니다. 테스트 값에 대한 변경 사항은 구성 업데이트와 함께 ConfigSnapshot.UpdateAvailable 신호를 발생시킵니다. 프로덕션 업데이트와 마찬가지로, 기존 스냅샷을 새로 고쳐야 테스트 값을 가져올 수 있습니다:

local ConfigService = game:GetService("ConfigService")
ConfigService:SetTestingValue("bossHealth", 200)
local configSnapshot = ConfigService:GetConfigAsync()
local bossHealth = configSnapshot:GetValue("bossHealth") -- 이제 200입니다!

테스트 변경 사항은 현재 서버의 수명 동안 적용되며 다른 서버로 전파되지 않습니다. 스튜디오에서는 현재 플레이 세션에 적용되며 라이브 서버에 영향을 주지 않습니다. ConfigService:ClearTestingValue()를 사용하여 테스트 변경 사항을 수동으로 지울 수 있습니다.

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