Bu makalede, Unity oyunlarında Play Oyun Hizmetleri skor tablolarının nasıl kullanılacağı açıklanmaktadır.
Başlamadan önce
Unity projenizi ve Unity için Google Play Games eklentisini oluşturun. Ayrıntılar için Başlangıç kılavuzuna bakın.
Etkinlik oluşturma
Skor tabloları Google Play Console'da oluşturulur. Ayrıntılar için Play Games Hizmetleri skor tablosu kılavuzunu inceleyin. Bir skor tablosu oluşturduktan sonra, skor tablosunun Android kaynağını başlangıç kılavuzunda açıklandığı gibi eklentiye ekleyin.
Skor Tablosunda Skor Yayınlama
Bir skor tablosunda skor yayınlamak için Social.ReportScore hizmetini ç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
});
Bir 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
});
Platformun ve sunucunun, oyuncunun mevcut rekorundan düşük puanları otomatik olarak sileceğini unutmayın. Böylece, skorun oyuncunun mevcut puanından yüksek olup olmadığını test etmek için hiçbir kontrol yapmadan skorları serbestçe gönderebilirsiniz.
Leaderboard kullanıcı arayüzünü göster
Tüm skor tablolarında yerleşik kullanıcı arayüzünü göstermek için Social.ShowLeaderboardUI öğesini çağırı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 skor tablosu kimliği aktarabilirsiniz. Ancak bu, bir Play Games uzantısı olduğundan Social.Active nesnesinin önce bir PlayGamesPlatform
nesnesine yayınlanması gerekir:
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// Show leaderboard UI
PlayGamesPlatform.Instance.ShowLeaderboardUI("Cfji293fjsie_QA");
Leaderboard verilerine erişme
Skor tablosu puan verilerini almanın 2 yöntemi vardır.
Social.ILeaderboard kullanın
Bu yöntem, verileri almak için kapsamı ve filtreleri tanımlamak üzere 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. Skor alınmaya başlanacak sıralama konumu. 5. Puan sayısı (varsayılan değer 25'tir). 6. Kullanıcı kimliğine göre filtrele.
From parametresi pozitif değilse döndürülen sonuçlar oyuncu merkezlidir. Diğer bir deyişle, mevcut oyuncunun puanının etrafındaki 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 kullan
Bu yöntem doğrudan PlayGamesPlatform
kullanır. Bu da skor tablosu verilerine erişirken daha fazla 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:
- skor tablosu kimliği
- başlangıç konumu (en yüksek skorlar veya oyuncu ortalanmış)
- satır sayısı
- skor tablosu koleksiyonu (sosyal veya herkese açık)
- zaman aralığı (günlük, haftalık, tüm zamanlar)
- bir LeaderboardScoreData nesnesini kabul eden geri çağırma.
LeaderboardScoreData
sınıfı, puanlar yüklenirken arayan kişiye bilgileri geri döndürmek için kullanılır. Üyeler:
1. Kimlik - leaderboard kimliği
2. Geçerli: Döndürülen veriler geçerliyse (çağrı başarılı olduysa)
3. Durum - Aramanın ResponseStatus
4. Yaklaşık Sayı - Skor tablosundaki yaklaşık skor sayısı
5. Başlık - skor tablosunun başlığı
6. PlayerScore - mevcut oyuncunun skoru
7. Puanlar - puanların listesi
8. PrevPageToken: Önceki puan sayfasını almak üzere LoadMoreScores()
çağrısında bulunmak için kullanılabilecek bir jeton.
9. NextPageToken: Bir sonraki puan sayfasını almak üzere LoadMoreScores()
yöntemini çağırmak için kullanılabilecek bir jetondur.
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 ResponseCode.ResolutionRequired
adlı sağlayıcıyla arkadaşlar yüklenmeye çalışılırken bu çağrı başarısız olabilir. Bu durumda, erişim isteğinde bulunmak için AskForLoadFriendsResolution
öğesini kullanın.
Oyuncu adlarını al
Her skor, skoru yapan oyuncunun kullanıcı kimliğini içerir. Oyuncu profilini yüklemek için Social.LoadUsers()
kullanabilirsiniz. Oyuncu profili içeriklerinin, 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);
});
}