게임 아이디어와 기능

다음에 추가할 기능

플레이어 통계

라운드, 처치 수, 최고 기록을 세션별로 한 번에 보고하고 합계, 최댓값, 최솟값 또는 최신값으로 계산합니다.

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

게임이 완전한 세션을 한 번에 보고하고 현재 카운터와 기간을 표시합니다.

동영상 준비 중

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

플레이어 통계

같은 프로젝트 준비

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

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

    통계 정의
    kills: mode=sum, reset=none; best_score: mode=max, reset=none

    합계는 각 보고를 더합니다. 최댓값과 최솟값은 극값을 유지하고 최신값은 대체합니다. 최댓값, 최솟값, 최신값은 첫 보고로 초기화됩니다. 값은 안전한 범위 내의 부호 있는 정수입니다.

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

이 기능 구현하기

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

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

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

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

C#
Assets/Scripts/StatisticsDemo.cs
horizOn 호출
1using PM.horizOn.Cloud.Objects.Network.Requests;
2using UnityEngine;
3using PM.horizOn.Cloud.Core;
4using PM.horizOn.Cloud.Manager;
5​
6// Existing SDK/project configuration and authenticated player session required.
7// Call RunReviewedAction explicitly after reviewing this example and its data.
8// 먼저 스냅샷을 읽고 재시도 시 같은 작업 ID와 원래 보고를 유지하세요. 만료되거나 불확실한 결과는 확인이 필요하며 새 ID를
9// 자동으로 생성하면 안 됩니다.
10// This explicit action reports the shown persisted batch.
11public sealed class StatisticsDemo : MonoBehaviour
12{
13 public async void RunReviewedAction()
14 {
15 var sessionUser = UserManager.Instance.CurrentUser;
16 if (sessionUser == null || !sessionUser.IsValid()) return;
17 var manager = StatisticsManager.Instance;
18 var snapshot = await manager.GetStatistics();
19 if (snapshot == null) { Debug.LogWarning(manager.LastErrorCode); return; }
20 string pendingKey = "horizOn_statistics_pending_" + snapshot.userId;
21 var pending = PlayerPrefs.HasKey(pendingKey)
22 ? JsonUtility.FromJson<UpdateStatisticsRequest>(PlayerPrefs.GetString(pendingKey))
23 : new UpdateStatisticsRequest {
24 userId = snapshot.userId, operationId = manager.CreateOperationId(),
25 updates = new[] { new StatisticUpdate("kills", 3), new StatisticUpdate("best_score", 250) }
26 };
27 string originalJson = JsonUtility.ToJson(pending);
28 PlayerPrefs.SetString(pendingKey, originalJson);
29 PlayerPrefs.Save();
30 var result = await manager.UpdateStatistics(pending.updates, pending.operationId);
31 if (result == null) {
32 // Keep the saved ID and batch. Reconcile OPERATION_EXPIRED before a new logical report.
33 Debug.LogWarning(manager.LastErrorCode);
34 return;
35 }
36 // A late success for O1 must never acknowledge a newer pending O2.
37 if (PlayerPrefs.GetString(pendingKey, null) == originalJson) {
38 PlayerPrefs.DeleteKey(pendingKey);
39 PlayerPrefs.Save();
40 }
41 foreach (var counter in result.values) Debug.Log(counter.key + "=" + counter.value);
42 }
43}
전체 SDK 예제 열기 ↗

새 기능을 테스트하세요.

게임이 완전한 세션을 한 번에 보고하고 현재 카운터와 기간을 표시합니다.

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

엔드포인트
  • GET/statistics
  • GET/statistics/definitions
  • POST/statistics
API 레퍼런스의 모든 엔드포인트
다음 단계에 대한 추천

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

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