इस लेख में, Unity गेम में Play Games Services के लीडरबोर्ड का इस्तेमाल करने का तरीका बताया गया है.
शुरू करने से पहले
Unity प्रोजेक्ट और Unity के लिए Google Play Games प्लगिन सेट अप करें. ज़्यादा जानकारी के लिए, शुरुआती निर्देश देखें.
इवेंट बनाएं
आपने Google Play Console में लीडरबोर्ड बनाए हैं. ज़्यादा जानकारी के लिए, Play Games Services के लिए लीडरबोर्ड की गाइड देखें. लीडरबोर्ड बनाने के बाद, शुरू करने के लिए गाइड में बताए गए तरीके से, प्लग इन में उसका 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 Games का एक्सटेंशन है. इसलिए, Social.Active ऑब्जेक्ट को पहले PlayGamesPlatform ऑब्जेक्ट में कास्ट करना होगा:
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// Show leaderboard UI
PlayGamesPlatform.Instance.ShowLeaderboardUI("Cfji293fjsie_QA");
लीडरबोर्ड का डेटा ऐक्सेस करना
लीडरबोर्ड के स्कोर का डेटा पाने के दो तरीके हैं.
Social.ILeaderboard का इस्तेमाल करना
इस तरीके में, डेटा पाने के लिए दायरा और फ़िल्टर तय करने के लिए, ILeaderboard इंटरफ़ेस का इस्तेमाल किया जाता है. इस तरीके से, ये कॉन्फ़िगर किए जा सकते हैं: 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() के पैरामीटर ये हैं:
- leaderboardId
- शुरू करने की पोज़िशन (सबसे ज़्यादा स्कोर या खिलाड़ी के बीच में)
- पंक्तियों की संख्या
- लीडरबोर्ड कलेक्शन (सोशल या सार्वजनिक)
- समयावधि (हर दिन, हर हफ़्ते, हमेशा के लिए)
- ऐसा कॉलबैक जो LeaderboardScoreData ऑब्जेक्ट स्वीकार करता है.
LeaderboardScoreData क्लास का इस्तेमाल, स्कोर लोड करते समय कॉलर को जानकारी वापस देने के लिए किया जाता है. इनमें ये सदस्य शामिल हैं:
1. Id - the leaderboard id
2. Valid - true if the returned data is valid (the call was successful)
3. Status - the ResponseStatus of the call
4. ApproximateCount - the approximate number of scores in the leaderboard
5. Title - the title of the leaderboard
6. PlayerScore - the score of the current player
7. Scores - the list of scores
8. PrevPageToken - a token that can be used to call `LoadMoreScores()` to
get the previous page of scores.
9. NextPageToken - a token that can be used to call `LoadMoreScores()` to
get the next page of scores.
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);
});
}