इस लेख में, 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. आईडी - लीडरबोर्ड का आईडी
2. मान्य - अगर दिखाया गया डेटा मान्य है (कॉल पूरा हो गया है), तो यह वैल्यू 'सही' होगी
3. स्टेटस - कॉल का ResponseStatus
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);
});
}