Skip to main content
Economy v2는 이제 정식 출시(GA)되었습니다. 지원 및 피드백은 PlayFab 포럼을 참조하세요.
Economy v1(레거시)에는 Game Manager에서 직접 가중 무작위 아이템 분포를 정의할 수 있는 기본 제공 드롭 테이블 기능이 있었습니다. Economy v2에는 드롭 테이블이 기본 기능으로 포함되어 있지 않지만, Azure FunctionsExecuteInventoryOperations API를 결합해 동일한 동작을(더 유연하게) 구현할 수 있습니다. 이 튜토리얼에서는 다음을 수행하는 완전한 무작위 루트 시스템을 구축하는 방법을 보여줍니다.
  • Title Data에서 가중 아이템 풀로 루트 테이블을 정의합니다.
  • Azure Function을 사용해 루트 테이블에서 무작위 아이템을 롤합니다.
  • 단일 호출로 컨테이너 토큰을 원자적으로 차감하고 무작위로 선택된 아이템을 부여합니다.

작동 방식

  1. Title Data에 루트 테이블 정의: 드롭 테이블 구성(아이템 ID, 가중치, 수량)을 Title Data에 JSON으로 저장하면 코드를 다시 배포하지 않고도 업데이트할 수 있습니다.
  2. 컨테이너를 가상 화폐로 표현: 열지 않은 루트 상자 역할을 하는 가상 화폐인 고정 콘텐츠 컨테이너와 동일한 컨테이너 토큰 패턴을 사용합니다.
  3. Azure Function을 호출해 컨테이너 열기: 함수는 루트 테이블을 읽고 가중 무작위 선택을 실행한 다음 ExecuteInventoryOperations를 호출하여 컨테이너 토큰 1개를 원자적으로 차감하고 무작위로 선택된 아이템을 추가합니다.

필수 구성 요소

1단계: Title Data에 루트 테이블 정의

디자이너가 코드 변경 없이 드롭 확률을 업데이트할 수 있도록 Title Data에 루트 테이블 정의를 저장합니다.

예제 루트 테이블 구조

JSON 값을 갖는 LootTables라는 Title Data 키를 만듭니다.
각 루트 테이블에는 다음 속성이 포함됩니다.

Title Data 설정

Game Manager

  1. Content > Title Data로 이동합니다.
  2. LootTables라는 키를 만듭니다.
  3. JSON 루트 테이블 구성을 값으로 붙여넣습니다.
  4. Save를 선택합니다.

API

SetTitleData를 사용합니다.

2단계: Azure Function 만들기

플레이어가 컨테이너를 열 때 게임 클라이언트가 호출하는 Azure Function을 만듭니다. 함수는 다음을 수행합니다.
  1. 플레이어가 컨테이너 토큰을 하나 이상 갖고 있는지 확인합니다.
  2. Title Data에서 루트 테이블을 읽습니다.
  3. 가중 무작위 선택을 실행합니다.
  4. ExecuteInventoryOperations를 호출하여 토큰을 원자적으로 차감하고 보상을 부여합니다.

데이터 모델

가중 무작위 선택

전체 Azure Function

GetContainerCurrencyId 도우미 함수는 루트 테이블 이름을 해당 컨테이너 화폐 ID에 매핑합니다. 이 매핑은 루트 테이블과 함께 Title Data에 저장하거나 명명 규칙을 사용할 수 있습니다.

3단계: 플레이어에게 컨테이너 토큰 부여

게임플레이, 스토어 구매 또는 보상을 통해 플레이어에게 컨테이너 토큰을 부여합니다. 고정 콘텐츠 컨테이너에서 설명한 것과 동일한 접근 방식을 사용합니다.

4단계: 게임 클라이언트에서 함수 호출

플레이어가 컨테이너를 열 때 ExecuteFunction을 사용해 Azure Function을 호출합니다.
응답에는 무작위로 선택된 보상이 포함됩니다.

루트 테이블 설계 패턴

희귀도 등급

기하급수적으로 감소하는 가중치를 가진 고전적인 희귀도 시스템:
드롭 확률:
  • Common: ~90.0%
  • Uncommon: ~9.0%
  • Rare: ~0.9%
  • Legendary: ~0.09%

혼합 보상을 사용한 다중 롤

혼합 풀에서 3개의 무작위 아이템을 제공하는 보급품 상자:

보장 + 무작위 (피티 시스템)

“10번 열 때마다 레어 이상 보장” 패턴의 경우, Display Properties 또는 Player Data에서 플레이어의 열기 횟수를 추적하고, 임계값에 도달했을 때 Azure Function에서 무작위 선택을 재정의합니다.

중첩된 드롭 테이블

루트 테이블은 ID로 다른 루트 테이블을 참조할 수 있습니다. Azure Function은 참조를 재귀적으로 확인합니다.
함수는 ItemIdTABLE:로 시작하는지 확인하고, 그렇다면 아이템을 직접 부여하는 대신 참조된 테이블에서 롤합니다.

보안 고려 사항

  • 항상 루트 로직을 서버 측 Azure Function에서 실행합니다. 어떤 아이템이 롤되었는지 결정하는 데 클라이언트를 절대 신뢰하지 마세요. 이 접근 방식은 조작을 방지합니다.
  • 함수가 재시도되는 경우 중복 부여를 방지하려면 ExecuteInventoryOperations 호출에 IdempotencyId를 사용하세요. 자세한 내용은 멱등성 트랜잭션 및 재시도를 참조하세요.
  • 차감 전에 플레이어의 인벤토리를 확인하여 컨테이너 소유권을 확인합니다. ExecuteInventoryOperationsSubtract 작업은 플레이어에게 토큰이 충분하지 않으면 실패하며, 전체 배치를 롤백합니다.
  • 감사를 위해 모든 롤을 로깅합니다. 함수의 반환 값과 PlayStream 이벤트는 각 플레이어가 받은 것에 대한 추적을 제공합니다.

참고 항목

마지막 수정일 2026년 8월 13일