Bu konuda, 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 ayarlayın. Ayrıntılı bilgi için Başlangıç kılavuzu'na bakın.
Etkinlik oluşturma
Skor tablolarını Google Play Console'da oluşturursunuz. Ayrıntılar için Play Games Hizmetleri'ne yönelik liderlik tabloları kılavuzuna bakın. Bir skor tablosu oluşturduktan sonra, Başlangıç kılavuzunda açıklandığı şekilde Android kaynağını eklentiye ekleyin.
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 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 yüksek puanından düşük olan puanları otomatik olarak sileceğini unutmayın. Bu nedenle, puanın oyuncunun mevcut puanından yüksek olup olmadığını test etmek için herhangi bir kontrol yapmadan puanları serbestçe 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'yı ç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 bir skor tablosu kimliği iletebilirsiniz. Ancak bu bir Play Games uzantısı olduğundan Social.Active nesnesinin önce PlayGamesPlatform nesnesine yayınlanması gerekir:
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// Show leaderboard UI
PlayGamesPlatform.Instance.ShowLeaderboardUI("Cfji293fjsie_QA");
Skor tablosu verilerine erişme
Liderlik tablosu puan verilerini almanın 2 yöntemi vardır.
Social.ILeaderboard'u kullanma
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. Puanların alınmaya başlanacağı sıralama konumu. 5. Puan sayısı (varsayılan değer 25'tir). 6. Kullanıcı kimliğine göre filtreleme
from parametresi pozitif değilse döndürülen sonuçlar oyuncu merkezlidir. Yani mevcut oyuncunun puanı 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() yöntemini kullanma
Bu yöntemde, skor tablosu verilerine erişirken ek esneklik ve bilgi sağlayan PlayGamesPlatform 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() 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 nesnesini kabul eden geri çağırma.
LeaderboardScoreData sınıfı, puanlar yüklenirken bilgileri arayana 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 işlev, 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 puan, puanı alan oyuncunun userId'sini içerir. Oyuncu profilini yüklemek için Social.LoadUsers()
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);
});
}