หัวข้อนี้อธิบายวิธีใช้ลีดเดอร์บอร์ดของบริการเกมของ 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
});
โปรดทราบว่าแพลตฟอร์มและเซิร์ฟเวอร์จะทิ้งคะแนนที่ต่ำกว่าคะแนนสูงสุดที่มีอยู่ของผู้เล่นโดยอัตโนมัติ ดังนั้นคุณจึงส่งคะแนนได้อย่างอิสระโดยไม่ต้องตรวจสอบเพื่อทดสอบว่าคะแนนสูงกว่าคะแนนที่มีอยู่ของผู้เล่นหรือไม่
แสดง UI ของลีดเดอร์บอร์ด
หากต้องการแสดง UI ในตัวสำหรับลีดเดอร์บอร์ดทั้งหมด ให้เรียกใช้ 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");
เข้าถึงข้อมูลลีดเดอร์บอร์ด
การดึงข้อมูลคะแนนลีดเดอร์บอร์ดทำได้ 2 วิธี
ใช้ 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
- ตำแหน่งเริ่มต้น (คะแนนสูงสุดหรือผู้เล่นอยู่ตรงกลาง)
- จำนวนแถว
- คอลเล็กชันลีดเดอร์บอร์ด (โซเชียลหรือสาธารณะ)
- ระยะเวลา (รายวัน รายสัปดาห์ ตลอดเวลา)
- Callback ที่ยอมรับออบเจ็กต์ 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);
});
}