게임 아이디어와 기능

다음에 추가할 기능

공유 객체

명시적인 접근 정책, 인덱스 쿼리, 원래 리비전을 사용하여 내용을 해석하지 않는 게임 데이터를 공유하세요.

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

생성 전에 소유자 사용량을 조회하세요. 생성에는 해당 사용량의 리비전을 사용하고, 업데이트와 삭제에는 객체의 원래 리비전을 사용합니다. 소유자, 그룹, 생성 시 설정한 만료 시점은 변경되지 않습니다.

동영상 준비 중

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

공유 객체

같은 프로젝트 준비

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

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

    키
    bases
    읽기 정책
    all
    쓰기 정책
    owner
    격자 위치
    true
    객체당 최대 바이트 수
    1024
    소유자당 최대 객체 수
    1

    키는 계속 예약된 상태로 유지됩니다. 처음 사용한 뒤에는 정책, 검색 스키마, TTL, 위치를 변경할 수 없습니다. 보관하면 새 쓰기가 차단되며 읽기와 삭제는 계속 가능합니다.

    첫 예제는 데이터를 읽습니다. 그룹, 매치, 오브젝트를 생성하지 않습니다. 빈 목록도 정상적인 첫 응답입니다.

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

이 기능 구현하기

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

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

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

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

C#
Assets/Scripts/SharedObjectsDemo.cs
horizOn 호출
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3using PM.horizOn.Cloud.Objects.Network.Responses;
4​
5public sealed class SharedObjectsDemo : MonoBehaviour
6{
7 // Initialize/connect and restore the existing player in the Quickstart first.
8 // Wire an explicit player action; do not add this read to a startup/poll loop.
9 public async void ReadWorldMap()
10 {
11 var user = UserManager.Instance.CurrentUser;
12 if (user == null || !user.IsValid()) return;
13 var result = await SharedObjectsManager.Instance.QueryObjects(user.UserId, "bases", new SharedQuery {
14 mode = SharedQueryMode.Rectangle,
15 minX = -10, maxX = 10, minY = -10, maxY = 10, limit = 20
16 });
17 if (!result.IsSuccess) {
18 Debug.LogWarning(result.ErrorCode);
19 return;
20 }
21 foreach (var item in result.Data.objects) {
22 byte[] bytes = item.data; // Opaque game bytes; validate your game's own format.
23 Debug.Log($"Object {item.id}: {bytes.Length} bytes");
24 }
25 // Respect result.Data.pollAfterSeconds; no automatic poll or next-page loop.
26 // Keep exact dataBase64 and typed search metadata unchanged on metadata edits.
27 // Persist original target, bytes and If-Match revision before a single mutation.
28 // Unknown CREATE: explicit GetRecoveryUsage/QueryRecoveryObjects; never resend.
29 // Generic/defense/ranked VA starts share one start/submit lease; do not replace a pending run.
30 // Trusted validation and durable ordinary Inbox delivery belong to the game backend.
31 }
32}
전체 SDK 예제 열기 ↗

월드 맵

소유자의 기지를 내용을 해석하지 않는 바이트로 저장하세요. 설정된 정수 좌표 격자의 직사각형을 명시적으로 쿼리하고, 객체의 원래 리비전으로 업데이트하세요. 위치는 쿼리 인덱스이며 게임 규칙을 검증하지 않습니다.

비동기 PvP

범위가 제한된 비균등 정수 쿼리로 상대를 선택하세요. 상대의 방어 바이트를 불러오고 서버가 관리하는 Validated Actions 실행으로 플레이를 검증하세요. 신뢰할 수 있는 백엔드만 결과를 결정하고 변경 불가능한 Inbox 알림을 전송합니다.

해당 플레이어 세션, 영구적으로 보존한 원래 쓰기 의도, 명시적이고 범위가 제한된 읽기를 사용하세요. 신뢰할 수 있는 결과 검증과 Inbox 전송은 게임 백엔드에서 처리해야 합니다. Account Keys는 게임 빌드에 절대 포함하면 안 됩니다.

새 기능을 테스트하세요.

생성 전에 소유자 사용량을 조회하세요. 생성에는 해당 사용량의 리비전을 사용하고, 업데이트와 삭제에는 객체의 원래 리비전을 사용합니다. 소유자, 그룹, 생성 시 설정한 만료 시점은 변경되지 않습니다.

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

엔드포인트
  • GET/shared-objects/collections
  • GET/shared-objects/{collection}/usage
  • GET/shared-objects/{collection}/objects/{objectId}
  • POST/shared-objects/{collection}/query
  • POST/shared-objects/{collection}/objects
  • PUT/shared-objects/{collection}/objects/{objectId}
  • DELETE/shared-objects/{collection}/objects/{objectId}
API 레퍼런스의 모든 엔드포인트
다음 단계에 대한 추천

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

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