No se han encontrado widgets en la barra lateral

Los tableros de puntos, LeaderBoards, o listas de puntuación estan con nosotros desde siempre. Algunos recordamos esas míticas maquinas recreativas que te permitían poner tres letras en la lista de puntuaciones. Puntuaciones que eran locales, de esa maquina, pero todos los visitantes del salon nos conocíamos, todos sabían a  quien pertenecía la combinación de siglas PMM.

Después de este pequeño ataque nostálgico voy a explicar como crear una Tablero de puntos usando Google Play Services para un juego desarrollado en Unity.

Requisitos:

1-Configurando nuestro Leaderboard en Google Play Console.

Vamos a Game Services en el menú de la izquierda y seleccionamos la aplicación a configurar. ¿Que no tenéis una aplicación configurada? Pasaros por el post: Incorporando Google Logros con Google Play Services para UNITY. 

Pulsamos ADD LEADERBOARD. Lo que nos va a llevar directamente a la pantalla de configuración de el tablero de puntuaciones. 

El tablero de puntuaciones de un juego no es único. Podemos tener tantos como queramos. Imaginemos el tipico juego de carreras, tendriamos un tablero para cada circuito y otro para la temporada general.

Todos los datos a informar son muy simples y autoexplicativos. En el único que pueden haber dudas en en Ordering. Le tenemos que indicar que va primero una puntuación alta o una baja. Siguiendo el ejemplo de un circuito, podríamos tener un tablero de puntuaciones con el tiempo que se tarda en dar la vuelta, esta claro que a un menor tiempo mas alto se tiene que aparecer en la tabla. En este caso tendriamos que escoger la opción SMALLER IS BETTER.

La opción Ordering no se puede modificar una vez creado el LeaderBoard.

Una vez creado el Leaderboard, podemos escoger los recursos y pegarlos en la configuración de Unity, que encontramos en: Window->Google Play Games->Setup->Android Setup.

Todos los recursos que creamos en la Google Play Services, los obtenemos en un xml que debemos pegar en esta ventana de configuración. Con él Unity creará la clase que le indiquemos, en mi caso GPGIdenti con todos los identificadores de los recursos.

2-Los scripts.

No os vais a creer lo sencillo que va a ser esto. Tenemos que hacer dos cosas. Mantener las puntuaciones y mostrar el tablero de puntuaciones cuando lo pida el usuario.

2.1-Enviar puntuaciones al tablero de puntuaciones.

Tenemos que decidir cuando hacerlo. Si se trata de un juego que continuamente estas obteniendo puntos tendremos que encontrar un equilibrio, no podemos estar enviando las puntuaciones de forma casi on-line a Google. Una buena solución podría ser hacerlo al pasar un nivel. En mi caso, he usado un juego en el que la puntuación se actualiza bastante poco, unas dos o tres veces por nivel, así que en cada modificación hago la llamada para actualizar el tablero de puntuaciones.

// public function to add points and update the gui and highscore player prefs accordingly

using GooglePlayGames;

….
    public void AddPoints(int amount)
    {
        // increase score
        score+=amount;
        // Submit leaderboard scores, if authenticated
#if UNITY_ANDROID
        if (PlayGamesPlatform.Instance.localUser.authenticated)
        {
            // Note: make sure to add ‘using GooglePlayGames’
            PlayGamesPlatform.Instance.ReportScore(score,
                                                   GPGidenti.leaderboard_giskard_in_the_dark_master_of_universe,
                (bool success) =>
                {
                    Debug.Log(“(Giskard) Leaderboard update success: “ + success);
                });
        }
#endif
        // update UI
        UIScore.text = “Score: “+score.ToString();

        // if score>highscore then update the highscore UI too
        if (score>highscore) {
            highscore = score;
            UIHighScore.text = “Highscore: “+score.ToString();
        }
    }

Esta es mi función de actualizar los puntos. La llamada para actualizar el contador en Google Play Service esta entre el if del preprocesador que le indica que ese código tan solo tiene que estar disponible para UNITY.

Lo primero es indicar que importamos los Google Play Services: using GooglePlayGames;

Después comprobamos que tenemos sesión abierta con Google Play Services: if (PlayGamesPlatform.Instance.localUser.authenticated)

En el caso de que esté abierta ya podemos hacer la llamada indicando el identificador del leaderboard que queremos actualizar: PlayGamesPlatform.Instance.ReportScore(scoreGPGidenti.leaderboard_giskard_in_the_dark_master_of_universe,
                (bool success) =>
                {
                    Debug.Log(“(Giskard) Leaderboard update success: “ + success);
                });

Como segundo parámetro pasamos una función que será llamada con el resultado de actualizar el leaderboard. En caso de que la actualización haya sido correcta nos devolverá true, y false en caso contrario. Yo solo la uso para trazar el resultado de la operación.

2.2-Mostrar el tablero de puntuaciones.

En el menú principal tengo un botón habilitado que ejecuta una función con este código:

using GooglePlayGames;
using GooglePlayGames.BasicApi;

….

    public void ShowLeaderboards()
    {
#if UNITY_ANDROID
        if (PlayGamesPlatform.Instance.localUser.authenticated)
        {
            PlayGamesPlatform.Instance.ShowLeaderboardUI();
        }
        else
        {
            Debug.Log(“Cannot show leaderboard: not authenticated”);
        }
#endif
    }

Tenemos los using para incorporar las librerías, el if que nos comprueba si tenemos una sesión abierta con Google Play Services y una línea nueva: PlayGamesPlatform.Instance.ShowLeaderboardUI();

¿Que obtenemos con esta llamada? Pues esta imagen: 

Cojonudo! Y con solo una llamada.

Integrar Google Play Services en cualquier juego es muy sencillo. El esfuerzo que representa se ve compensado plenamente por loe beneficios obtenidos. 

El leaderboard del juego Giskard in the dark se ha creado siguiendo esta guía. El código utilizado para el post ha salido directamente del juego. No dudes en bajarlo de la Google Play Store para ver el resultado!

 

Usando el acelerometro como método de entrada para un Juego en Android.
Uso del acelerometro en Android con Unity

Los juegos que usan el acelerometro no abundan, pero los que lo usan si hacen una buena implementación se convierten Read more

Instalar anaconda en MAC OS Catalina

¿Te falla la instalación de Conda en MacOs Catalina? A mi tambíen me ha pasado... y lo he solucionado modificando Read more

Kurond. Una criatura ineficiente.

Kurond ha sido mi primera criatura creada para moverse con ML Agents. Es ineficiente por que su cuerpo esta MAL Read more

Incorporemos niveles a nuestro juego.

Ir avanzando por el juego, superando niveles, asumiendo nuevos retos y descubriendo nuevos mundos, es una de las sensaciones que Read more

Por Martra

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *