ลีดเดอร์บอร์ดในเกม Unity

หัวข้อนี้อธิบายถึงวิธีใช้ลีดเดอร์บอร์ดของบริการเกมของ Play ใน Unity เกม

ก่อนเริ่มต้นใช้งาน

ตั้งค่าโปรเจ็กต์ Unity และปลั๊กอิน Google Play Games สำหรับ 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 วิธี

ใช้โซเชียลIลีดเดอร์บอร์ด

วิธีนี้ใช้อินเทอร์เฟซ Iลีดเดอร์บอร์ด เพื่อกำหนดขอบเขตและตัวกรอง ในการดูข้อมูล วิธีนี้จะช่วยให้คุณกําหนดค่าสิ่งต่อไปนี้ได้ 1. รหัสลีดเดอร์บอร์ด 2. คอลเล็กชัน (โซเชียลหรือสาธารณะ) 3. กรอบเวลา (รายวัน รายสัปดาห์ ตลอดเวลา) 4. ตำแหน่งอันดับที่จะเริ่มดึงข้อมูลคะแนน 5. จำนวนคะแนน (ค่าเริ่มต้นคือ 25) 6. กรองตามรหัสผู้ใช้

หากพารามิเตอร์ "จาก" ไม่เป็นบวก ผลลัพธ์ที่แสดงจะเป็น เน้นผู้เล่นเป็นศูนย์กลาง ซึ่งหมายถึงคะแนนรอบๆ คะแนนของผู้เล่นปัจจุบัน ส่งคืนแล้ว

    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() มีดังนี้

  1. รหัสลีดเดอร์บอร์ด
  2. ตำแหน่งเริ่มต้น (คะแนนสูงสุดหรือผู้เล่นอยู่ตรงกลาง)
  3. จำนวนแถว
  4. คอลเล็กชันลีดเดอร์บอร์ด (โซเชียลหรือสาธารณะ)
  5. ช่วงเวลา (รายวัน รายสัปดาห์ ตลอดเวลา)
  6. Callback ที่ยอมรับออบเจ็กต์ LeaderboardScoreData

คลาส LeaderboardScoreData ใช้เพื่อส่งคืนข้อมูลกลับไปยัง เมื่อโหลดคะแนน สมาชิกคือ 1. รหัส - รหัสลีดเดอร์บอร์ด 2. ถูกต้อง - เป็นจริงหากข้อมูลที่แสดงผลถูกต้อง (การเรียกใช้สำเร็จ) 3. สถานะ - สถานะการตอบกลับของการโทร 4. จำนวนโดยประมาณ - จำนวนคะแนนโดยประมาณในลีดเดอร์บอร์ด 5. ชื่อ - ชื่อของลีดเดอร์บอร์ด 6. PlayerScore - คะแนนของผู้เล่นปัจจุบัน 7. คะแนน - รายการคะแนน 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 เพื่อส่งคำขอ สิทธิ์การเข้าถึง

รับชื่อผู้เล่น

แต่ละคะแนนจะมีรหัสผู้ใช้ของผู้เล่นที่ทำคะแนน คุณสามารถใช้ 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);
            });
    }