Notice: La función wp_enqueue_script ha sido llamada de forma incorrecta. Los scripts y estilos no se deberían registrar o poner en cola hasta que se carguen los ganchos wp_enqueue_scripts, admin_enqueue_scripts y login_enqueue_scripts. Este aviso ha sido activado por la gestión de nfd_wpnavbar_setting. Por favor, ve depuración en WordPress para más información. (Este mensaje fue añadido en la versión 3.3.0). in /home1/spotsail/public_html/martra/wp-includes/functions.php on line 6078
Como crear un tablero de puntos para Unity con Google Leaderboard. – Pere Martra
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!

 

Creación de un Spawner, para UNITY.

Un spawner no es nada más que un objeto que se dedica a crear otros objetos. Puede ser un dispensador Read more

Como dar de alta un juego en Itch.io

Itch.io es una las paginas donde los creadores de juegos Indie suben sus trabajos. Creada por desarrolladores para desarrolladores. Es Read more

Tutorial endless runner con Unity.

Creamos un juego para Unity, de la nada a la publicación en las principales WEB's de juegos. Código y proyecto Read more

Herramientas imprescindibles y gratuitas para crear Arte para videojuegos.

Lo primero que hacemos al decidir que queremos hacer un juego es mirar los diferentes motores de desarrollo de juegos, Read more

Por Martra

Deja una respuesta

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