메인 콘텐츠로 건너뛰기
HyperX는 게임 데이터의 소유자와 운영 방식에 따라 저장소를 나눕니다. 먼저 어떤 데이터인지 결정한 뒤 Console에서 필요한 테이블을 만들고 SDK로 읽거나 저장합니다.

어떤 기능을 써야 하나요?

기능소유자주 용도
공유 데이터프로젝트아이템 목록, 상점 카탈로그, 공개 밸런스 값처럼 모든 클라이언트가 읽는 데이터
유저 데이터유저 계정재화, 업적, 튜토리얼 진행도, 설정, 세이브처럼 계정에 붙는 데이터
캐릭터 데이터캐릭터캐릭터 레벨, 장비, 스탯처럼 플레이 캐릭터에 붙는 데이터
계정 전체에 붙는 설정이나 세이브도 유저 데이터로 저장합니다. 자유로운 JSON 묶음이 필요하면 유저 데이터 테이블에 object 필드를 두고 그 안에 payload를 저장하세요.

공유 데이터 읽기

공유 데이터는 Console에서 테이블과 레코드를 만들고 게시합니다. SDK는 읽기만 합니다. 레코드 ID를 지정하지 않으면 테이블의 첫 레코드를 읽습니다.
var sword = await HyperX.Core.Data.Shared.Get("catalog");
var itemRecordIds = await HyperX.Core.Data.Shared.ListRecordIds("catalog");
var specificItem = await HyperX.Core.Data.Shared.GetRecord("catalog", itemRecordIds[0]);

int price = (int)sword.Data["price"];

유저 데이터 저장

유저 데이터는 로그인한 유저 계정에 저장됩니다.
await player.PutUserData(
    "inventory",
    new { gold = 1200, gem = 30 }
);

var inventory = await player.GetUserData("inventory");
int gold = (int)inventory.Data["gold"];
PutUserData는 POCO, anonymous object, dictionary를 JsonMapper로 JSON object로 변환합니다. 정확한 JSON 문자열이나 Unity AOT 제어가 필요하면 PutUserDataJson 또는 JsonData overload를 사용할 수 있습니다. 레코드 ID를 지정하지 않으면 테이블의 첫 레코드를 읽고 저장합니다. 필요 없어진 기본 레코드는 삭제할 수 있습니다.
await player.DeleteUserData("inventory");

여러 레코드 저장

테이블에 여러 레코드가 필요하면 서버가 레코드 ID를 자동으로 생성합니다. 클라이언트는 반환된 RecordId를 저장해 특정 레코드를 다시 읽거나, 테이블의 레코드 ID 목록을 조회할 수 있습니다.
var save = await player.CreateUserData(
    "save_state",
    new { payload = new { chapter = 3, checkpoint = "forest" } }
);

var recordIds = await player.ListUserDataRecordIds("save_state");

var loaded = await player.GetUserDataRecord(
    "save_state",
    save.RecordId
);