게임 아이디어와 기능

다음에 추가할 기능

아이템

선택한 프로젝트의 고유 장비, 속성, 카탈로그 규칙과 플레이어 인벤토리를 관리합니다.

SDK: develop 브랜치플레이어 세션 필요
Unity
아이템 일러스트
확인할 수 있는 결과

저장 후 카탈로그에 starter_sword가 있습니다. 검토한 예제 구매 후 현재 인벤토리에 고유 instanceId가 있습니다.

동영상 준비 중

이 단계의 동영상은 아직 없습니다. 안내와 MCP 요청은 바로 사용할 수 있습니다.

아이템

같은 프로젝트 준비

  1. 게임 설정과 같은 프로젝트를 대시보드에서 선택하세요.

    아이템 →
  2. 대시보드 양식에서 다음 테스트 항목을 만들거나 기존 항목을 사용하세요. 표시된 값은 현재 프로젝트 데이터가 아닌 예시입니다.

    키
    starter_sword
    이름
    Quickstart Sword
    유형
    equipment
    희귀도
    common
    활성
    true
    기본 속성
    {"damage":5}
    속성 규칙
    []

    아이템에는 고유 ID와 속성이 있습니다. 개수로 세는 자원은 플레이어 값에, 외형 전용 꾸미기는 플레이어 프로필에 둡니다.

    플레이어 값 가이드로 coins를 준비하세요. 활성 starter-sword 상품을 저장하세요. 비용은 10 coins, 아이템 보상은 1 starter_sword입니다.

    플레이어 값 →
  3. 예제를 실행하기 전에 저장하고 다시 불러와 확인하세요. 관련 없는 정의는 유지하세요.

이 기능 구현하기

가이드는 미리 볼 수 있습니다. 실행하려면 활성 프로젝트 키가 필요합니다. 프로젝트 준비

SDK 설치와 프로젝트 설정 가져오기가 완료되고 플레이어가 로그인해야 합니다.

이 SDK 예제는 develop을 사용합니다. 필요한 API가 설치된 SDK에 있는지 확인하세요.

빠른 시작으로 원하는 플레이어를 연결하세요. 명시적인 버튼이나 씬 동작에서 ReadCatalogPage(), ReadInventory()을 호출하세요. 파일을 여는 것만으로는 요청을 보내지 않습니다.

C#
Assets/Scripts/ItemsDemo.cs
horizOn 호출
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3​
4public sealed class ItemsDemo : MonoBehaviour
5{
6 // Initialize/connect and restore the existing player in the Quickstart first.
7 public async void ReadInventory()
8 {
9 var user = UserManager.Instance.CurrentUser;
10 if (user == null || !user.IsValid()) return;
11 var result = await ItemsManager.Instance.GetInventory(user.UserId);
12 if (!result.IsSuccess) { Debug.LogWarning(result.ErrorCode); return; }
13 foreach (var item in result.Data.instances)
14 Debug.Log($"{item.instanceId}: {item.itemKey}");
15 // Keep result.Data.revision for a separately reviewed mutation.
16 }
17​
18 // Wire a separate explicit action; no automatic catalog traversal or poll.
19 public async void ReadCatalogPage()
20 {
21 var user = UserManager.Instance.CurrentUser;
22 if (user == null || !user.IsValid()) return;
23 var result = await ItemsManager.Instance.GetCatalog(user.UserId, limit: 1);
24 if (!result.IsSuccess) { Debug.LogWarning(result.ErrorCode); return; }
25 Debug.Log($"Catalog revision: {result.Data.revision}");
26 // Explicit Next keeps result.Data.revision and nextAfterKey unchanged.
27 }
28}
29// SDK ItemsExample/ItemsSampleStore persist original instanceId/body/revision before writes.
30// Keep the original Player Values operationId for purchase recovery.
31// The initial success may include item references; retained replay may return empty applied/items.
32// Read the current inventory separately. Never reconstruct earlier item references.
33// A failed refresh never authorizes a replacement purchase or a local item grant.
전체 SDK 예제 열기 ↗

저장한 아이템 사용

공식 예제와 보조 파일을 가져오세요. 상품을 확인하고 기존 플레이어로 아래 순서를 실행하세요. 각 단계가 끝날 때까지 기다리고 구매는 한 번만 확인하세요. 응답이 불확실하면 원래 요청을 보관하세요.

ItemsExample: projectId → ReadOneCatalogPage() → ReviewOffers() → SavePurchaseAfterReview("starter-sword") → RefreshInventory()

새 기능을 테스트하세요.

저장 후 카탈로그에 starter_sword가 있습니다. 검토한 예제 구매 후 현재 인벤토리에 고유 instanceId가 있습니다.

게임 설정과 같은 프로젝트를 대시보드에서 선택하세요.

엔드포인트
  • GET/items
  • GET/items/catalog
  • POST/items/adjust
  • POST/items/equip
  • POST/items/discard
API 레퍼런스의 모든 엔드포인트
다음 단계에 대한 추천

모든 라운드에 최고 점수를 더하세요.

라운드가 끝나면 점수를 저장하고 선두를 보여주세요. 기존 연결과 플레이어 세션을 계속 사용하세요.