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

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

المباريات

ألعاب بالأدوار مع مراجعات صريحة وحالة غير مفسرة وتقارير نتائج منفصلة.

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

نسّق الردهة والأدوار المتناوبة والتقارير النهائية المستقلة باستخدام جلستين للاعبين.

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

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

مباريات قائمة على الأدوار

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

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

    المباريات →
  2. لا يحتاج الطلب الأول إلى تعريف إضافي. النتيجة الفارغة صالحة ما دامت بيانات اللعبة المطابقة غير موجودة.

    استخدم جلستين منفصلتين: أنشئ ردهة، انضم، ابدأ بترتيب صريح، أرسل حالات البايتات بالتناوب ثم أبلغ عن النتيجة النهائية نفسها بصورة مستقلة.

    يقرأ المثال الأول البيانات. لا ينشئ مجموعة أو مباراة أو كائناً. القائمة الفارغة استجابة أولى صالحة.

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

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

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

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

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

C#
Assets/Scripts/MatchesDemo.cs
استدعاء horizOn
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3​
4public sealed class MatchesDemo : MonoBehaviour
5{
6 // Initialize/connect and restore the existing player in the Quickstart first.
7 // Invoke explicitly. The SDK also enforces the returned polling cadence.
8 public async void ReadMyMatches()
9 {
10 var user = UserManager.Instance.CurrentUser;
11 if (user == null || !user.IsValid()) return;
12 var result = await MatchesManager.Instance.GetMatches(user.UserId);
13 if (!result.IsSuccess) { Debug.LogWarning(result.ErrorCode); return; }
14 Debug.Log($"Ledger revision: {result.Data.revision}");
15 foreach (var match in result.Data.recent)
16 Debug.Log($"Match {match.id}: {match.status}");
17 // Recent may include an active match after this player's forfeit.
18 // Respect result.Data.pollAfterSeconds; no background poll or automatic timeout.
19 }
20}
21// Full two-player recipe: SDK Examples/MatchesExample and MatchesSampleStore.
22// ReadLedger/ReadMatch -> SaveCreateAfterLedgerReview/SaveActionAfterMatchReview.
23// ApplySavedIntent sends one durable original body/revision. Unknown create is reconciled.
24// Never replace a pending original with the revision from a later read.
25// ReportResult uses the original finalStateRevision/result bytes/sorted winnerIds.
26// Ordinary consensus is not trusted victory proof. Ranked runs use Validated Actions.
فتح مثال SDK الكامل ↗

لاعبان ودور أصلي واحد

استخدم جلستين منفصلتين: أنشئ ردهة، انضم، ابدأ بترتيب صريح، أرسل حالات البايتات بالتناوب ثم أبلغ عن النتيجة النهائية نفسها بصورة مستقلة.

احفظ الطلب الدقيق قبل الإرسال. بعد انتهاء المهلة اقرأ الحالة وطابقها. لا تستبدل المراجعة أو النية الأصلية بصمت.

تستخدم التقارير مراجعة نهائية ثابتة. الاتفاق ليس إثباتًا موثوقًا للفوز، والتقارير المتعارضة أو الناقصة لا تحدد فائزًا.

يتطلب التشغيل المصنف مباراة مصنفة مؤكدة ومسار Validated Actions الحالي. لا تمنح التقارير العادية مكافآت.

يدعم PHP مسارات REST العادية. التحقق المصنف والوقت الفعلي غير متاحين ويعيدان FEATURE_NOT_SUPPORTED عند الحاجة.

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

نسّق الردهة والأدوار المتناوبة والتقارير النهائية المستقلة باستخدام جلستين للاعبين.

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

نقاط النهاية
  • GET/matches
  • GET/matches/limits
  • GET/matches/open
  • GET/matches/{matchId}
  • POST/matches
  • POST/matches/{matchId}/join
  • POST/matches/{matchId}/decline
  • POST/matches/{matchId}/start
  • POST/matches/{matchId}/turn
  • POST/matches/{matchId}/timeout
  • POST/matches/{matchId}/leave
  • POST/matches/{matchId}/cancel
  • POST/matches/{matchId}/result
  • POST/matches/{matchId}/ranked-run
كل نقاط النهاية في مرجع API
اقتراحنا لخطوتك التالية

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

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