Unity oyunlarında skor tabloları

Bu konularda, Unity'de Play Games Hizmetleri skor tablolarının nasıl kullanılacağı açıklanmaktadır. oyunlar.

Başlamadan önce

Unity projenizi ve Unity için Google Play Games eklentisini oluşturun. Örneğin, Başlangıç kılavuzuna göz atın.

Etkinlik oluşturma

Skor tablolarını Google Play Console'da oluşturursunuz. Ayrıntılar için skor tabloları kılavuzu: Play Games Hizmetleri. Skor tablosu oluşturduktan sonra Android kaynağını ekleyin aşağıdaki şekilde açıklandığı gibi eklentiye başlangıç kılavuzuna bakın.

Skor tablosunda skor yayınlama

Skor tablosunda skor yayınlamak için Social.reportScore'u çağırın.

    using GooglePlayGames;
    using UnityEngine.SocialPlatforms;
    ...
    // Post score 12345 to leaderboard ID "Cfji293fjsie_QA")
    Social.ReportScore(12345, "Cfji293fjsie_QA", (bool success) => {
        // Handle success or failure
    });

Puan yayınlamak ve meta veri etiketi eklemek için PlayGamesPlatform örneği kullanın doğrudan:

    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
    });

Platformun ve sunucunun güncel puanları otomatik olarak sileceğini unutmayın. oyuncunun mevcut rekorundan düşük olduğundan skorları özgürce gönderebilirsiniz skorun, oyuncunun skorundan yüksek olup olmadığını test etmek için kullanabilirsiniz.

Leaderboard kullanıcı arayüzünü göster

Tüm skor tabloları için yerleşik kullanıcı arayüzünü görüntülemek amacıyla Social.ShowLeaderboardUI çağrısı yapın.

    using GooglePlayGames;
    using UnityEngine.SocialPlatforms;
    ...
    // Show leaderboard UI
    Social.ShowLeaderboardUI();

Tüm skor tabloları yerine belirli bir skor tablosunu göstermek isterseniz yönteme bir leaderboard kimliği iletebilir. Ancak bu bir Play Games uzantısına göre, Sosyal.Etkin nesnesinin bir PlayGamesPlatform değerine yayınlanması gerekir önce nesne:

    using GooglePlayGames;
    using UnityEngine.SocialPlatforms;
    ...
    // Show leaderboard UI
    PlayGamesPlatform.Instance.ShowLeaderboardUI("Cfji293fjsie_QA");

Skor Tablosu verilerine erişme

Skor tablosu puan verilerini almanın 2 yöntemi vardır.

Social.ILeaderboard'u kullanın

Bu yöntemde, kapsamı ve filtreleri tanımlamak için ILeaderboard arayüzü kullanılır gerektiğine değinmeliyiz. Bu yaklaşım şunları yapılandırmanıza olanak tanır: 1. Skor tablosu kimliği 2. Koleksiyon (sosyal veya herkese açık) 3. Zaman aralığı (günlük, haftalık, tüm zamanlar) 5. Puanları almaya başlayacak sıralama konumu. 5. Puan sayısı (varsayılan değer 25'tir). 6. Kullanıcı kimliğine göre filtreleyin.

Gönderen parametresi pozitif değilse döndürülen sonuçlar şöyle olur: oyuncu merkezli, yani mevcut oyuncunun skoru etrafındaki puanlar geri döndü.

    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() işlevini kullanma

Bu yöntem, doğrudan PlayGamesPlatform kullanır ve bu da ek ve skor tablosu verilerine erişme sırasında esneklik ve bilgi sağlar.

    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() parametreleri şunlardır:

  1. skor tablosu kimliği
  2. başlangıç konumu (en yüksek skorlar veya oyuncu merkezde)
  3. satır sayısı
  4. skor tablosu koleksiyonu (sosyal veya herkese açık)
  5. zaman aralığı (günlük, haftalık, tüm zamanlar)
  6. LeaderboardScoreData nesnesini kabul eden geri çağırma.

LeaderboardScoreData sınıfı, bilgileri tekrar çağrısına göre arama yapabilirsiniz. Üyeler şunlardır: 1. Kimlik - skor tablosu kimliği 2. Geçerli: Döndürülen veriler geçerliyse (çağrı başarılıysa) doğru 3. Durum - aramanın ResponseStatus 5. Yaklaşık Sayı - skor tablosundaki yaklaşık skor sayısı 5.c Başlık - skor tablosunun başlığı 6. Oyuncu Puanı - geçerli oyuncunun skoru 7. Puanlar - skorların listesi 8. PrevPageToken - LoadMoreScores() öğesini çağırmak için kullanılabilecek bir jeton skorların bir önceki sayfasına gidin. 9. NextPageToken - LoadMoreScores() öğesini çağırmak için kullanılabilecek bir jeton skorların bir sonraki sayfasına gidin.

    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;
            });
    }

Arkadaşlarınızı yüklemeye çalışırken bu arama başarısız olabilir Kullanıcı, arkadaş listesini paylaşmadıysa ResponseCode.ResolutionRequired bir soru işareti olacaktı. Bu durumda, istekte bulunmak için AskForLoadFriendsResolution öğesini kullanın. erişim.

Oyuncu adlarını al

Her skorda, skoru yapan oyuncunun kullanıcı kimliği bulunur. Tekliflerinizi otomatikleştirmek ve optimize etmek için Oyuncu profilini yüklemek için Social.LoadUsers(). İçeriğinizin , oyuncuların gizlilik ayarlarına tabidir.

    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);
            });
    }