Bu bölümde, Unity oyunlarında Play Games 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 ayarlayın. Ayrıntılı bilgi için Başlangıç kılavuzuna bakın.
Etkinlik oluşturma
Skor tablolarını Google Play Console'da oluşturursunuz. Ayrıntılar için Play Games Hizmetleri'nin skor tabloları kılavuzuna bakın. Bir skor tablosu oluşturduktan sonra, Android kaynağını Başlangıç kılavuzunda açıklandığı şekilde eklentiye ekleyin.
Skor tablosunda skor yayınlama
Skor tablosunda skor yayınlamak için Social.ReportScore yöntemini ç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
});
Skor 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 rekorundan düşük olan skorları otomatik olarak sileceğini unutmayın. Bu nedenle, skorun oyuncunun mevcut skorundan yüksek olup olmadığını test etmek için herhangi bir kontrol yapmadan skorları rahatça 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 istiyorsanız Social.ShowLeaderboardUI yöntemini çağırın.
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// Show leaderboard UI
Social.ShowLeaderboardUI();
Tüm skor tabloları yerine belirli bir skor tablosunu göstermek istiyorsanız yönteme bir skor tablosu kimliği iletebilirsiniz. Ancak bu bir Play Games uzantısı olduğundan Social.Active nesnesinin önce PlayGamesPlatform nesnesine aktarılması gerekir:
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.
Use Social.ILeaderboard
Bu yöntemde, verileri almak için kapsamı ve filtreleri tanımlamak üzere ILeaderboard arayüzü kullanılır. Bu yaklaşım sayesinde ş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. Skorların alınmaya başlanacağı sıralama konumu 5. Skor sayısı (varsayılan değer 25'tir) 6. Kullanıcı kimliğine göre filtreleme
Eğer from parametresi pozitif değilse döndürülen sonuçlar oyuncu merkezlidir. Yani mevcut oyuncunun skorunun etrafındaki skorlar 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() yöntemini kullanma
Bu yöntemde, skor tablosu verilerine erişirken daha fazla esneklik ve bilgi sağlayan PlayGamesPlatform yöntemi doğrudan kullanılır.
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() yönteminin parametreleri şunlardır:
- leaderboardId
- Başlangıç konumu (en yüksek skorlar 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 nesnesini kabul eden geri çağırma
LeaderboardScoreData sınıfı, skorlar yüklenirken bilgileri çağrıya geri döndürmek için kullanılır. Üyeler:
1. Id - the leaderboard id
2. Valid - true if the returned data is valid (the call was successful)
3. Status - the ResponseStatus of the call
4. ApproximateCount - the approximate number of scores in the leaderboard
5. Title - the title of the leaderboard
6. PlayerScore - the score of the current player
7. Scores - the list of scores
8. PrevPageToken - a token that can be used to call `LoadMoreScores()` to
get the previous page of scores.
9. NextPageToken - a token that can be used to call `LoadMoreScores()` to
get the next page of scores.
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şları yüklemeye çalışırken başarısız olabilir. Bu durumda, erişim isteğinde bulunmak için AskForLoadFriendsResolution seçeneğini kullanın.
Oyuncu adlarını alma
Her skor, bu skoru alan oyuncunun userId bilgisini içerir. Oyuncu profilini yüklemek için Social.LoadUsers() yöntemini 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);
});
}