หัวข้อนี้จะอธิบายวิธีใช้ลีดเดอร์บอร์ดของบริการเกมของ Play ในเกม Unity
ก่อนเริ่มต้นใช้งาน
ตั้งค่าโปรเจ็กต์ Unity และปลั๊กอิน Google Play Games สำหรับ Unity โปรดดูรายละเอียดที่คู่มือเริ่มต้นใช้งาน
สร้างกิจกรรม
คุณสร้างลีดเดอร์บอร์ดได้ใน Google Play Console โปรดดูรายละเอียดที่คู่มือเกี่ยวกับตารางอันดับสำหรับบริการ Play Games หลังจากสร้างตารางอันดับแล้ว ให้เพิ่มทรัพยากร 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. รหัส - รหัสลีดเดอร์บอร์ด
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);
});
}