Unity3D GameCenter LeaderBoards

Estoy programando la integración de Unity con GameCenter, para que mis juegos puedan tener ese componente de pique on line que necesitan, y me he encontrado - bueno, en realidad me lo dijo Dwair -, con la clase Social de Unity. He pensado que ya que la versión 3.5 de Unity nos lo deja tan fácil, sería muy ilustrativo hacer una entrada con los pasos a seguir, así que allá vamos.

1.- Dar de alta GameCenter en iTunesConnect
Digamos que éste es el paso burocrático. Tenemos que entrar en nuestra cuenta de iTunesConnect y tenemos que tener la App dada de alta. Si has subido alguna aplicación, ya te habrás dado cuenta del botón que pone Manage GameCenter. Pues entras y lo cambias a enable. 

2.- Añadir Leaderboard en iTunesConnect
A partir de éste punto puedes crear Leaderboards (mejores puntuaciones) y Achievements (méritos o logros). En este post me voy a centrar en los Leaderboards para no extenderme. Pulsa en Edit y luego en Add Leaderboard, ahí podrás configurarlo a tu gusto. Debes tener en cuenta que una cosa es dar de alta el Leaderboard en sí mismo, y otra es la vista que tendrá cada usuario según su idioma, así que tienes que configurar al menos un idioma para cada Leaderboard.

Una vez que lo tienes, Apple ya sabe que tu juego va a tener ese Leaderboard. Pero ahora toca decirle a Unity qué tiene que hacer para enviarle las puntuaciones al GameCenter:


3.- Autentificar al jugador en GameCenter desde Unity
Aquí es donde vamos manos a la obra. Lo primero de lo que nos avisan los chicos de Unity es que hagamos la autentificación del usuario lo antes posible, ya que al ser un proceso on line puede requerir unos segundos. Así que yo recomiendo ponerla en la función Start(). Otro de los consejos que nos dan es que nos hagamos un usuario de GameCenter para testeo. Mientras estemos de pruebas, no vamos a atacar al GameCenter oficial, sino que iremos contra un sandbox, una copia de GameCenter para pruebas. No tienes que hacer nada a éste respecto.
Para autentificar al usuario, utilizamos la siguiente función:


Social.localUser.Authenticate (function (success) {
        if (success) {
            Debug.Log ("Authentication successful");
            var userInfo : String = "Username: " + Social.localUser.userName + 
                "\nUser ID: " + Social.localUser.id + 
                "\nIsUnderage: " + Social.localUser.underage;
            Debug.Log (userInfo);   

        }
        else
            Debug.Log ("Authentication failed");
    });



Ésta función intenta autentificar al usuario, y si lo consigue muestra la conocida notificación de GameCenter, con el añadido *** Sandbox *** para que sepamos que estamos en el GameCenter de pruebas.

De paso podéis ver el menú principal de mi próximo juego: LHC: Search for Higgs Boson


4.- Enviar puntuaciones a GameCenter desde Unity
Para rematar la faena, sólo tenemos que usar la siguiente línea para enviar una puntuación al LeaderBoard:


Social.ReportScore (tiempo, "LifeSeconds", null) ;


Donde el primer argumento es la puntuación, el segundo el nombre del LeaderBoard que dimos de alta en el paso 2, y el tercero un Callback a donde llamará GameCenter una vez que finalice el proceso. Por ahora lo he dejado a null, porque quiero añadir otra entrada acerca de los callbacks en UnityScript (el Javascript de Unity). Así que ésta línea sólo envía el resultado, pero no sabemos si Apple lo recibe bien hasta que no quitemos de ahí ese null tan feo.






Con éstos sencillos pasos, hemos habilitado una competitividad online para nuestros jugadores. Recomiendo mirarse el resto de la clase Social de Unity, que no tiene desperdicio.

Comentarios