أفكار وميزات للعبة

ميزتك التالية

الإنجازات

يُفتح كل مفتاح مرة لكل لاعب. يثق الوضع اليدوي باللعبة؛ تُقيّم الحدود الإحصائية ضمن معاملة التقرير المتأثر نفسها.

SDK: فرع developتتطلب جلسة لاعب
Unity
رسم توضيحي لميزة الإنجازات
النتيجة المرئية

بعد الإجراء يُفتح first_steps للاعب نفسه. تكرار المفتاح لا يمنح إنجازاً أو مكافأة ثانية.

الفيديو قادم لاحقًا

لا يوجد فيديو لهذه الخطوة بعد. الدليل وطلب MCP متاحان للاستخدام.

الإنجازات

جهّزوا المشروع نفسه

  1. اختر في لوحة التحكم المشروع نفسه الموجود في إعداد لعبتك.

    الإنجازات →
  2. أنشئوا إدخالات الاختبار هذه أو أعيدوا استخدام الموجود منها في نموذج لوحة التحكم. القيم أمثلة وليست بيانات المشروع الحالية.

    المفتاح
    first_steps
    الاسم
    First steps
    قاعدة الفتح
    manual
    نشط
    true
    مخفي حتى الفتح
    false
    دون مكافأة
    []

    يُفتح كل مفتاح مرة لكل لاعب. يثق الوضع اليدوي باللعبة؛ تُقيّم الحدود الإحصائية ضمن معاملة التقرير المتأثر نفسها.

  3. احفظوا الإدخالات وأعيدوا تحميلها وتحققوا منها قبل المثال. احتفظوا بالتعريفات الأخرى.

أضف هذه الميزة

يمكنك الاطلاع على الدليل. يتطلب التنفيذ مفتاح مشروع نشطًا. تجهيز المشروع

SDK مُثبّت وإعداد المشروع مُستورد واللاعب مسجّل الدخول.

يستخدم مثال SDK هذا فرع develop. تحقّق من وجود واجهات API المطلوبة في SDK المثبّت.

أكملوا اتصال البدء السريع باللاعب المقصود. استدعوا RunReviewedAction() بزر أو إجراء مشهد صريح. فتح الملف وحده لا يرسل طلباً.

C#
Assets/Scripts/AchievementsDemo.cs
استدعاء horizOn
1using System.Linq;
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// تُضاف المكافآت فور فتح الإنجاز. إذا فشلت الإضافة، تُلغى العملية بأكملها.
9// This explicit action unlocks the shown configured achievement key.
10public sealed class AchievementsDemo : MonoBehaviour
11{
12 public async void RunReviewedAction()
13 {
14 var sessionUser = UserManager.Instance.CurrentUser;
15 if (sessionUser == null || !sessionUser.IsValid()) return;
16 var userId = UserManager.Instance.CurrentUser.UserId;
17 var manager = AchievementsManager.Instance;
18 var loaded = await manager.GetAchievements(userId);
19 if (!loaded.IsSuccess) { Debug.LogWarning(loaded.ErrorCode); return; }
20 foreach (var progress in loaded.Data.progress)
21 Debug.Log(progress.key + ": " + progress.rewardState);
22​
23 // Configure a manual first_steps definition, then call this on the matching game action.
24 var unlocked = await manager.Unlock(userId, "first_steps");
25 if (!unlocked.IsSuccess) { Debug.LogWarning(unlocked.ErrorCode); return; }
26 // Repeat the same key after timeout; never create a replacement reward identity.
27 // rewardState is complete, unlockedAt is null, and deliveryResults is empty.
28 // Values were credited atomically. Read PlayerValues again when showing the balance.
29 // No Inbox claim or local value addition. Refresh achievements after statistics updates.
30 }
31}
فتح مثال SDK الكامل ↗

اختبر ميزتك الجديدة.

بعد الإجراء يُفتح first_steps للاعب نفسه. تكرار المفتاح لا يمنح إنجازاً أو مكافأة ثانية.

اختر في لوحة التحكم المشروع نفسه الموجود في إعداد لعبتك.

نقاط النهاية
  • GET/achievements
  • POST/achievements/unlock
  • POST/achievements/rewards/deliver
كل نقاط النهاية في مرجع API
اقتراحنا لخطوتك التالية

أضف رقمًا قياسيًا لكل جولة.

احفظ النتيجة بعد الجولة وأظهر المتصدر. واصل استخدام اتصالك وجلسة اللاعب.