Tablas de clasificación en juegos de Unity

En este tema, se describe cómo usar las tablas de clasificación de los Servicios de juego de Play en los juegos de Unity.

Antes de comenzar

Configura tu proyecto de Unity y el complemento de Google Play Juegos para Unity. Si deseas obtener más detalles, consulta la guía de introducción.

Crea eventos

Las tablas de clasificación se crean en Google Play Console. Para obtener más detalles, consulta la guía de tablas de clasificación para los Servicios de juego de Play. Después de crear una tabla de clasificación, agrega su recurso de Android al complemento, como se describe en la guía de introducción.

Publica puntuaciones en una tabla de clasificación

Para publicar puntuaciones en una tabla de clasificación, llama a 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 publicar una puntuación e incluir una etiqueta de metadatos, usa directamente una instancia de PlayGamesPlatform:

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

Ten en cuenta que la plataforma y el servidor descartarán de forma automática las puntuaciones inferiores a la puntuación alta actual del jugador, de manera que puedes enviar las puntuaciones con libertad sin ninguna verificación para probar si estas son mayores o no a la actual del jugador.

Muestra la IU de la tabla de clasificación

Para mostrar la IU integrada de todas las tablas de clasificación, llama a Social.ShowLeaderboardUI.

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

Si deseas mostrar una tabla de clasificación específica en lugar de todas, puedes pasar al método un ID de tabla de clasificación. Sin embargo, esta es una extensión de Play Juegos, por lo que primero se debe transmitir el objeto Social.Active a un objeto PlayGamesPlatform:

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

Accede a los datos de la tabla de clasificación

Existen 2 métodos para recuperar los datos de puntuación de la tabla de clasificación.

Usa Social.ILeaderboard

Este método usa la interfaz de ILeaderboard a fin de definir el alcance y los filtros para obtener los datos. Este enfoque te permite configurar lo siguiente: 1. El ID de la tabla de clasificación. 2. La colección (social o pública). 3. El período (diario, semanal y permanente). 4. La posición de la clasificación para comenzar a recuperar puntuaciones. 5. La cantidad de puntuaciones (el valor predeterminado es 25). 6. El filtro por ID del usuario.

Si el parámetro from no es positivo, los resultados que se muestran se centran en el jugador, lo que significa que se muestran las puntuaciones alrededor de la puntuación del jugador actual.

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

Usa PlayGamesPlatform.LoadScores()

Este método usa PlayGamesPlatform directamente, lo que proporciona información y flexibilidad adicionales cuando se accede a los datos de la tabla de clasificación.

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

Los parámetros para LoadScores() son los siguientes:

  1. El ID de la tabla de clasificación
  2. La posición inicial (puntuaciones superiores o centradas en el jugador)
  3. La cantidad de filas
  4. La colección de la tabla de clasificación (social o pública)
  5. El período (diario, semanal y permanente)
  6. La devolución de llamada que acepta un objeto LeaderboardScoreData

La clase LeaderboardScoreData se usa para mostrar información al llamador cuando se cargan las puntuaciones. Los miembros son los siguientes: 1. ID: El ID de la tabla de clasificación. 2. Valid: Es verdadero si los datos que se muestran son válidos (la llamada se realizó de forma correcta). 3. Status: ResponseStatus de la llamada. 4. ApproximateCount: La cantidad aproximada de puntuaciones en la tabla de clasificación. 5. Title: El título de la tabla de clasificación. 6. PlayerScore: La puntuación del jugador actual. 7. Scores: La lista de puntuaciones. 8. PrevPageToken: Un token que se puede usar para llamar a LoadMoreScores() a fin de obtener la página anterior de puntuaciones. 9. NextPageToken: Un token que se puede usar para llamar a LoadMoreScores() a fin de obtener la siguiente página de puntuaciones.

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

Esta llamada puede fallar cuando se intenta cargar amigos con ResponseCode.ResolutionRequired si el usuario no compartió su lista de amigos con el juego. En este caso, usa AskForLoadFriendsResolution para solicitar acceso.

Obtén los nombres de jugadores

Cada puntuación tiene el ID del usuario del jugador que hizo la puntuación. Puedes usar Social.LoadUsers() para cargar el perfil del jugador. Recuerda que el contenido del perfil del jugador está sujeto a la configuración de privacidad de los jugadores.

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