Unity गेम में लीडरबोर्ड

इस विषय में, Unity में Play की गेम सेवाओं के लीडरबोर्ड इस्तेमाल करने का तरीका बताया गया है गेम.

शुरू करने से पहले

Unity के लिए अपना Unity प्रोजेक्ट और Google Play Games प्लगिन सेट अप करें. इसके लिए जानकारी के लिए, शुरुआती निर्देश देखें.

इवेंट बनाएं

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.Show लीडरबोर्डUI को कॉल करें.

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

अगर सभी लीडरबोर्ड के बजाय, कोई खास लीडरबोर्ड दिखाना है, तो तरीके को लीडरबोर्ड आईडी पास कर सकते हैं. हालांकि, यह एक Play Games है एक्सटेंशन है, इसलिए Social.Active ऑब्जेक्ट को PlayGamesPlatform पर कास्ट करना होगा ऑब्जेक्ट पहले बनाएं:

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

लीडरबोर्ड का डेटा ऐक्सेस करना

लीडरबोर्ड स्कोर का डेटा दो तरीकों से वापस पाया जा सकता है.

Social.Iलीडरबोर्ड का इस्तेमाल करें

यह तरीका, स्कोप और फ़िल्टर तय करने के लिए, लीडरबोर्ड इंटरफ़ेस का इस्तेमाल करता है का इस्तेमाल करें. इस तरीके से, इन्हें कॉन्फ़िगर किया जा सकता है: 1. लीडरबोर्ड आईडी 2. कलेक्शन (सोशल या सार्वजनिक) 3. समयसीमा (रोज़, हर हफ़्ते, अब तक के हिसाब से) 4. स्कोर फिर से पाने के लिए रैंक की स्थिति. 5. स्कोर की संख्या (डिफ़ॉल्ट तौर पर यह 25 है). 6. यूज़र आईडी के हिसाब से फ़िल्टर करें.

अगर from पैरामीटर पॉज़िटिव नहीं है, तो मिलने वाले नतीजे ऐसे होते हैं प्लेयर-सेंटर्ड का मतलब है कि मौजूदा खिलाड़ी के स्कोर के आस-पास के स्कोर वापस किया गया.

    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. LeadScoreData ऑब्जेक्ट को स्वीकार करने वाला कॉलबैक.

LeaderboardScoreData क्लास का इस्तेमाल जानकारी को वापस कॉलर की जानकारी दिखती है. ये सदस्य हैं: 1. आईडी - लीडरबोर्ड आईडी 2. मान्य - सही, अगर लौटाया गया डेटा मान्य है (कॉल पूरा हो गया था) 3. स्थिति - कॉल की प्रतिक्रिया स्थिति 4. अनुमानितकाउंट - लीडरबोर्ड में स्कोर की अनुमानित संख्या 5. शीर्षक - लीडरबोर्ड का टाइटल 6. प्लेयरस्कोर - मौजूदा खिलाड़ी का स्कोर 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 का इस्तेमाल करें ऐक्सेस दें.

खिलाड़ियों के नाम पाएं

हर स्कोर में, स्कोर बनाने वाले प्लेयर का उपयोगकर्ता आईडी होता है. Google Analytics 4 पर माइग्रेट करने के लिए, खिलाड़ी की प्रोफ़ाइल लोड करने के लिए 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);
            });
    }