قوائم الصدارة في ألعاب Unity

توضّح هذه المواضيع كيفية استخدام لوحات الصدارة في "خدمات ألعاب Play" في ألعاب Unity.

قبل البدء

عليك إعداد مشروع Unity والمكوّن الإضافي لألعاب Google Play في Unity. للحصول على التفاصيل، اطّلِع على دليل البدء.

إنشاء أحداث

تنشئ لوحات صدارة في Google Play Console. للحصول على تفاصيل، راجع دليل لوحات الصدارة لخدمات ألعاب Play. بعد إنشاء ليدربورد، أضف مورد Android إلى المكون الإضافي كما هو موضح في دليل البدء.

نشر النتيجة على "لوحة الصدارة"

لنشر نتيجة على إحدى لوحات الصدارة، اتصل بـ Social.ReportScore.

    using GooglePlayGames;
    using UnityEngine.SocialPlatforms;
    ...
    // Post score 12345 to leaderboard ID "Cfji293fjsie_QA")
    Social.ReportScore(12345, "Cfji293fjsie_QA", (bool success) => {
        // Handle success or failure
    });

لنشر تقييم وتضمين علامة بيانات وصفية، استخدِم مثيل PlayGamesPlatform مباشرةً:

    using GooglePlayGames;
    using UnityEngine.SocialPlatforms;
    ...
    // Post score 12345 to leaderboard ID "Cfji293fjsie_QA" and tag "FirstDaily")
    PlayGamesPlatform.Instance.ReportScore(12345, "Cfji293fjsie_QA", "FirstDaily", (bool success) => {
        // Handle success or failure
    });

لاحظ أن النظام الأساسي والخادم سيتجاهلان تلقائيًا النتائج الأقل من النتيجة العالية الحالية للاعب، لذا يمكنك إرسال النتائج بحرية بدون أي عمليات تحقق لاختبار ما إذا كانت النتيجة أكبر من النتيجة الحالية للّاعب أم لا.

عرض واجهة المستخدم الخاصة بلوحة الصدارة

لعرض واجهة المستخدم المدمجة لجميع لوحات الصدارة، اطلب Social.ShowLeaderboardUI

    using GooglePlayGames;
    using UnityEngine.SocialPlatforms;
    ...
    // Show leaderboard UI
    Social.ShowLeaderboardUI();

إذا أردت عرض لوحة صدارة معينة بدلاً من جميع لوحات الصدارة، يمكنك تمرير معرّف ليدربورد إلى الطريقة. إلا أنّ هذه إضافة على "ألعاب Play"، لذا يجب تحويل الكائن Social.Active إلى عنصر PlayGamesPlatform أولاً:

    using GooglePlayGames;
    using UnityEngine.SocialPlatforms;
    ...
    // Show leaderboard UI
    PlayGamesPlatform.Instance.ShowLeaderboardUI("Cfji293fjsie_QA");

الوصول إلى بيانات "لوحة الصدارة"

هناك طريقتان لاسترداد بيانات نتائج لوحة الصدارة.

استخدام Social.ILeaderboard

تستخدم هذه الطريقة واجهة I Leaderboard لتحديد النطاق والفلاتر للحصول على البيانات. يتيح لك هذا الأسلوب ضبط ما يلي: 1. رقم تعريف ليدربورد 2- المجموعة (الاجتماعية أو العامة) 3. الإطار الزمني (يوميًا أو أسبوعيًا أو في جميع الأوقات) 4. موضع الترتيب لبدء استرداد النتائج. 5. عدد التقييمات (القيم الافتراضية هي 25). ‫6. الفلترة حسب رقم تعريف المستخدم

إذا كانت المعلمة "من" غير موجبة، تكون النتائج المعروضة متمحورة حول اللاعب، بمعنى أنّه تم إرجاع النتائج المتعلقة بنتيجة اللاعب الحالي.

    ILeaderboard lb = PlayGamesPlatform.Instance.CreateLeaderboard();
    lb.id = "MY_LEADERBOARD_ID";
    lb.LoadScores(ok =>
        {
            if (ok) {
                LoadUsersAndDisplay(lb);
            }
            else {
                Debug.Log("Error retrieving leaderboardi");
            }
        });

استخدام PlayGamesPlatform.LoadScores()

تستخدم هذه الطريقة السمة PlayGamesPlatform مباشرةً، ما يوفّر مزيدًا من المرونة والمعلومات عند الوصول إلى بيانات "لوحة الصدارة".

    PlayGamesPlatform.Instance.LoadScores(
            GPGSIds.leaderboard_leaders_in_smoketesting,
            LeaderboardStart.PlayerCentered,
            100,
            LeaderboardCollection.Public,
            LeaderboardTimeSpan.AllTime,
            (data) =>
            {
                mStatus = "Leaderboard data valid: " + data.Valid;
                mStatus += "\n approx:" +data.ApproximateCount + " have " + data.Scores.Length;
            });

معلمات LoadScores() هي:

  1. رقم تعريف ليدربورد
  2. موضع البداية (أعلى النتائج أو في وسط اللاعب)
  3. عدد الصفوف
  4. مجموعة ليدربورد (الشبكات الاجتماعية أو العامة)
  5. الفترة الزمنية (يوميًا، أسبوعيًا، طوال الوقت)
  6. قبول كائن LeaderboardScoreData.

تُستخدم الفئة LeaderboardScoreData لإعادة المعلومات إلى المتصل عند تحميل النتائج. الأعضاء هم: 1. المعرّف - معرّف ليدربورد 2- صالح - صحيح إذا كانت البيانات المعروضة صالحة (كانت المكالمة ناجحة) 3- الحالة - حالة الاستجابة للمكالمة 4- ApproximateCount - العدد التقريبي للنتائج في لوحة الصدارة 5. العنوان - عنوان لوحة الصدارة 6- PlayerScore - نتيجة اللاعب الحالي 7- الدرجات: قائمة الدرجات 8- PrevPageToken: رمز مميّز يمكن استخدامه لطلب بيانات من LoadMoreScores() للحصول على صفحة النتائج السابقة. 9. NextPageToken: رمز مميّز يمكن استخدامه لطلب الصفحة LoadMoreScores() للحصول على الصفحة التالية من النتائج.

    void GetNextPage(LeaderboardScoreData data)
    {
        PlayGamesPlatform.Instance.LoadMoreScores(data.NextPageToken, 10,
            (results) =>
            {
                mStatus = "Leaderboard data valid: " + data.Valid;
                mStatus += "\n approx:" +data.ApproximateCount + " have " + data.Scores.Length;
            });
    }

قد يتعذّر إجراء هذه المكالمة عند محاولة تحميل الأصدقاء باستخدام "ResponseCode.ResolutionRequired" إذا لم يشارك المستخدم قائمة أصدقائه مع اللعبة. في هذه الحالة، استخدِم AskForLoadFriendsResolution لطلب الوصول.

الحصول على أسماء اللاعبين

وتتضمن كل نتيجة userId للاعب الذي أدّى إلى النتيجة. يمكنك استخدام Social.LoadUsers() لتحميل الملف الشخصي للّاعب. نذكّرك بأنّ محتوى الملف الشخصي للّاعب خاضع لإعدادات الخصوصية لدى اللاعبين.

    internal void LoadUsersAndDisplay(ILeaderboard lb)
    {
        // Get the user ids
        List<string> userIds = new List<string>();

        foreach(IScore score in lb.scores) {
            userIds.Add(score.userID);
        }
        // Load the profiles and display (or in this case, log)
        Social.LoadUsers(userIds.ToArray(), (users) =>
            {
                string status = "Leaderboard loading: " + lb.title + " count = " +
                    lb.scores.Length;
                foreach(IScore score in lb.scores) {
                    IUserProfile user = FindUser(users, score.userID);
                    status += "\n" + score.formattedValue + " by " +
                        (string)(
                            (user != null) ? user.userName : "**unk_" + score.userID + "**");
                }
                Debug.log(status);
            });
    }