इस विषय में, 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);
});
}