يوضّح هذا الموضوع كيفية استخدام لوحات الصدارة في "خدمات ألعاب 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
تستخدم هذه الطريقة واجهة 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
لطلب الوصول.
الحصول على أسماء اللاعبين
يتضمّن كلّ نتيجة رقم تعريف المستخدم الخاص باللاعب الذي حقّقها. يمكنك استخدام
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);
});
}