ইউনিটি গেমে লিডারবোর্ড

ইউনিটি গেমগুলিতে প্লে গেম পরিষেবা লিডারবোর্ডগুলি কীভাবে ব্যবহার করবেন তা এই বিষয়গুলি বর্ণনা করে৷

আপনি শুরু করার আগে

ইউনিটির জন্য আপনার ইউনিটি প্রোজেক্ট এবং গুগল প্লে গেম প্লাগইন সেট আপ করুন। বিস্তারিত জানার জন্য, শুরু করুন নির্দেশিকা দেখুন।

ইভেন্ট তৈরি করুন

আপনি Google Play Console-এ লিডারবোর্ড তৈরি করেন। বিস্তারিত জানার জন্য, প্লে গেম পরিষেবাগুলির জন্য লিডারবোর্ড নির্দেশিকা দেখুন। আপনি একটি লিডারবোর্ড তৈরি করার পরে, শুরু করার নির্দেশিকাতে বর্ণিত প্লাগইনে এর 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();

আপনি যদি সমস্ত লিডারবোর্ডের পরিবর্তে একটি নির্দিষ্ট লিডারবোর্ড দেখাতে চান তবে আপনি পদ্ধতিতে একটি লিডারবোর্ড আইডি পাস করতে পারেন। যাইহোক, এটি একটি প্লে গেমস এক্সটেনশন, তাই 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. ব্যবহারকারী আইডি দ্বারা ফিল্টার.

যদি ফ্রম প্যারামিটারটি অ-পজিটিভ হয়, তাহলে ফলাফলগুলি খেলোয়াড়-কেন্দ্রিক, যার অর্থ বর্তমান খেলোয়াড়ের স্কোরের চারপাশের স্কোরগুলি ফেরত দেওয়া হয়।

    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. একটি লিডারবোর্ডস্কোরডেটা অবজেক্ট গ্রহণ করে কলব্যাক।

LeaderboardScoreData ক্লাস স্কোর লোড করার সময় কলারের কাছে তথ্য ফেরত দিতে ব্যবহৃত হয়। সদস্যরা হলেন: 1. আইডি - লিডারবোর্ড আইডি 2. বৈধ - সত্য যদি ফেরত দেওয়া ডেটা বৈধ হয় (কলটি সফল হয়েছিল) 3. স্থিতি - কলটির প্রতিক্রিয়ার স্থিতি 4. আনুমানিক সংখ্যা - লিডারবোর্ডে স্কোরের আনুমানিক সংখ্যা 5 শিরোনাম - লিডারবোর্ডের শিরোনাম 6. প্লেয়ারস্কোর - বর্তমান প্লেয়ারের স্কোর 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 ব্যবহার করুন।

খেলোয়াড়ের নাম পান

প্রতিটি স্কোরে স্কোর তৈরি করা খেলোয়াড়ের ব্যবহারকারীর আইডি থাকে। প্লেয়ার প্রোফাইল লোড করতে আপনি 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);
            });
    }