Bu makalede, Unity oyunlarında Play Games Hizmetleri liderlik tablolarının nasıl kullanılacağı açıklanmaktadır.
Başlamadan önce
Unity projenizi ve Unity için Google Play Games eklentisini ayarlayın. Ayrıntılı bilgi için Başlangıç kılavuzunu inceleyin.
Etkinlik oluşturma
Google Play Console'da skor tabloları oluşturursunuz. Ayrıntılar için Play Games Hizmetleri'nin puan tabloları kılavuzuna bakın. Bir liderlik tablosu oluşturduktan sonra, Android kaynağını başlangıç kılavuzunda açıklandığı şekilde eklenti içine ekleyin.
Skor tablosunda skor yayınlama
Bir skor tablosunda skor yayınlamak için Social.ReportScore işlevini ç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 doğrudan bir PlayGamesPlatform
örneği kullanın:
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
});
Platform ve sunucunun, oyuncunun mevcut en yüksek puanından düşük puanları otomatik olarak atacağını unutmayın. Bu nedenle, puanların oyuncunun mevcut puanından daha yüksek olup olmadığını kontrol etmek için herhangi bir kontrol yapmadan puanları özgürce gönderebilirsiniz.
Skor tablosu kullanıcı arayüzünü gösterme
Tüm skor tabloları için yerleşik kullanıcı arayüzünü göstermek üzere Social.ShowLeaderboardUI işlevini çağırın.
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// Show leaderboard UI
Social.ShowLeaderboardUI();
Tüm leaderboard'lar yerine belirli bir leaderboard'u göstermek istiyorsanız yönteme bir leaderboard kimliği iletebilirsiniz. Ancak bu bir Play Games uzantısı olduğundan Social.Active nesnesinin önce bir PlayGamesPlatform
nesnesine atanması gerekir:
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// Show leaderboard UI
PlayGamesPlatform.Instance.ShowLeaderboardUI("Cfji293fjsie_QA");
Skor tablosu verilerine erişme
Liderler tablosu puan verilerini almak için 2 yöntem vardır.
Social.ILeaderboard'ı kullanma
Bu yöntem, verileri almak için kapsamı ve filtreleri tanımlamak amacıyla ILeaderboard arayüzünü kullanır. Bu yaklaşımla şunları yapılandırabilirsiniz: 1. Skor tablosu kimliği 2. Koleksiyon (sosyal veya herkese açık) 3. Zaman aralığı (günlük, haftalık, tüm zamanlar) 4. Puanları almaya başlanacak sıralama konumu. 5. Puan sayısı (varsayılan değer 25'tir). 6. Kullanıcı kimliğine göre filtreleyin.
from parametresi pozitif değilse döndürülen sonuçlar oyuncuya odaklanır. Yani, mevcut oyuncunun puanına yakın puanlar döndürülür.
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, PlayGamesPlatform
'ü doğrudan kullanır. Bu sayede, lider tablosu verilerine erişirken ek esneklik ve bilgi elde edilir.
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() işlevinin parametreleri şunlardır:
- leaderboardId
- başlangıç konumu (en yüksek puanlar veya oyuncu merkezli)
- satır sayısı
- skor tablosu koleksiyonu (sosyal veya herkese açık)
- zaman aralığı (günlük, haftalık, tüm zamanlar)
- LeaderboardScoreData nesnesi kabul eden geri çağırma işlevi.
LeaderboardScoreData
sınıfı, puanlar yüklenirken bilgileri arayan kullanıcıya döndürmek için kullanılır. Üyeler:
1. Kimlik: Skor tablosu kimliği
2. Valid: Döndürülen veriler geçerliyse (çağrı başarılıysa) doğru değerini döndürür.
3. Durum: Aramanın ResponseStatus değeri
4. ApproximateCount: Skor tablosundaki yaklaşık skor sayısı
5. Başlık: Liderlik tablosunun başlığı
6. PlayerScore: Mevcut oyuncunun puanı
7. Puanlar: Puanların listesi
8. PrevPageToken: Puanların önceki sayfasını almak için LoadMoreScores()
'ü çağırmak üzere kullanılabilecek bir jeton.
9. NextPageToken: Puanların bir sonraki sayfasını almak için LoadMoreScores()
'ü çağırmak üzere kullanılabilen bir jeton.
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;
});
}
Kullanıcı, arkadaş listesini oyunla paylaşmadıysa bu çağrı, ResponseCode.ResolutionRequired
ile arkadaş yüklenmeye çalışılırken başarısız olabilir. Bu durumda, erişim isteğinde bulunmak için AskForLoadFriendsResolution
değerini kullanın.
Oyuncu adlarını alma
Her puanda, puanı alan oyuncunun userId değeri bulunur. Oyuncu profilini yüklemek için Social.LoadUsers()
öğesini kullanabilirsiniz. Oyuncu profilinin içeriğinin, oyuncuların gizlilik ayarlarına tabi olduğunu unutmayın.
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);
});
}