Placares em jogos do Unity

Este tópico descreve como usar os placares dos serviços relacionados a jogos do Google Play em jogos do Unity.

Antes de começar

Configure seu projeto do Unity e o plug-in do Google Play Games para Unity. Para saber mais, consulte o Guia para iniciantes.

Criar eventos

Você cria placares no Google Play Console. Para saber mais, consulte o guia de placares dos serviços relacionados a jogos do Google Play. Depois de criar um placar, adicione o recurso Android ao plug-in, conforme descrito no guia para iniciantes.

Postar uma pontuação em um placar

Para postar uma pontuação em um placar, chame Social.ReportScore.

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

Para postar uma pontuação e incluir uma tag de metadados, use diretamente a instância dos serviços relacionados a jogos do Google Play:

    using GooglePlayGames;
    using UnityEngine.SocialPlatforms;
    ...
    // post score 12345 to leaderboard ID "Cfji293fjsie_QA" and tag "FirstDaily")
    Social.ReportScore(12345, "Cfji293fjsie_QA", "FirstDaily", (bool success) => {
        // handle success or failure
    });

A plataforma e o servidor descartam automaticamente as pontuações mais baixas do jogador. Assim, você pode enviar pontuações livremente sem verificações para testar se ela é maior que a do jogador.

Mostrar a IU dos placares

Para mostrar a IU integrada de todos os placares, chame Social.ShowLeaderboardUI.

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

Se quiser mostrar um placar específico em vez de todos os placares, é possível transmitir um ID de placar para o método. Como essa é uma extensão do Play Games. o objeto Social.Active precisa ser transmitido para um objeto PlayGamesPlatform primeiro:

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

Acessar dados do placar

Há dois métodos para recuperar os dados da pontuação do placar.

Usar Social.ILeaderboard

Esse método usa a interface ILeaderboard para definir o escopo e os filtros para acessar os dados. Essa abordagem permite configurar: 1. O ID do placar. 2. A coleção (social ou pública). 3. O período (diário, semanal, geral). 4. A posição de classificação para iniciar a recuperação das pontuações. 5. O número de pontuações (o padrão é 25). 6. Filtro por ID do usuário.

Se o parâmetro "from" não for positivo, os resultados retornados serão centrados no jogador; ou seja, serão retornadas as pontuações do jogador atual.

    ILeaderboard lb = PlayGamesPlatform.Instance.CreateLeaderboard();
    lb.id = "MY_LEADERBOARD_ID";
    lb.LoadScores(ok =>
        {
            if (ok) {
                LoadUsersAndDisplay(lb);
            }
            else {
                Debug.Log("Error retrieving leaderboardi");
            }
        });

Usar PlayGamesPlatform.LoadScores()

Esse método usa a PlayGamesPlatform diretamente. Essa abordagem fornece mais flexibilidade e informações ao acessar os dados do placar.

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

Os parâmetros de LoadScores() são:

  1. ID do placar
  2. posição inicial (pontuações mais altas ou centradas no jogador)
  3. contagem por linha
  4. coleção de placar (social ou pública)
  5. período (diário, semanal, geral)
  6. callback que aceita um objeto LeaderboardScoreData.

A classe LeaderboardScoreData é usada para retornar informações ao autor da chamada ao carregar pontuações. Os membros são: 1. ID: o ID do placar 2. Valid: verdadeiro se os dados retornados forem válidos (a chamada foi bem-sucedida) 3. Status: o ResponseStatus da chamada 4. ApproximateCount: o número aproximado de pontuações no placar 5. Title: o título do cabeçalho 6. PlayerScore: a pontuação do jogador atual. 7. Scores: a lista de pontuações 8. PrevPageToken: token que pode ser usado para chamar LoadMoreScores() e acessar a página anterior de pontuações. 9. NextPageToken: um token que pode ser usado para chamar LoadMoreScores() para acessar a próxima página de pontuações.

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

Essa chamada pode falhar ao tentar carregar amigos com ResponseCode.ResolutionRequired se o usuário não tiver compartilhado a lista de amigos com o jogo. Nesse caso, use AskForLoadFriendsResolution para solicitar acesso.

Ver nomes de jogadores

Cada pontuação tem o ID de usuário do jogador que fez a pontuação. Você pode usar Social.LoadUsers() para carregar o perfil do jogador. Lembre-se de que o conteúdo do perfil do jogador está sujeito às configurações de privacidade dele.

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