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
Incorporando Google Logros con Google Play Services para UNITY. – Pere Martra
No se han encontrado widgets en la barra lateral

El mismo Google mantiene el pluguin “Google Play Games pluguin for Unity“. Este pluguin nos da acceso a los siguientes servicios:

  • Logros / Achievements.
  • Tableros de puntuaciones / Leaderboards.
  • Multiusuario basado en turnos / Turn based multiuser.
  • Multiusuario en tiempo real / Real Time Multiplayer.
  • Eventos i misiones / Events and Quests.
  • Salvar el progreso en el juego / Saved Games.
  • Conexión con dispositivos cercanos / Nearby Connections

En este ejemplo vamos a crear un logro y usarlo.

Requisitos.

  • Unity 5. Buenoooo, esto ya es del plebistecenio, o como se llame. Yo he usado la versión 2018.1.
  • Android SDK. Versión 4 o mayor.
  • La libreria Google Play Services. En la versión 11.6 o superior. Pero como siempre, ya que estamos, la actualizamos.


Para actualizar el SDK y los Google Play Services lo podemos hacer desde el SDK Manager de Android Studio.

1-Configurando la Google Play Console.

Tenemos que tener la aplicación dada de alta en la Google Play Console, no hace falta que lo tengamos publicado, pero si que tiene que estar dado de alta. Podéis seguir la guía en la que explico como subir un juego a la Google Play Store.

Una vez tenemos la aplicación dada de alta, tenemos que activar el servicio.

En development tools (menú izquierda) encontraremos Services & APIs que nos dará la posibilidad de activar Google Play Services. 

Una vez seleccionado Services & APIs tenemos que pulsar el botón USE GOOGLE PLAY GAME SERVICES IN THIS APP, que encontramos en la parte central.

Podemos pulsar Sample Game, y veremos una aplicación de ejemplo.

Pulsamos SET UP GOOGLE PLAY GAME SERVICES y ya empezamos a configurar nuestra aplicación.


No usamos otros servicios Google Play Services. 

Escogemos la opción I don’t use any Google APIs in my game yet. Como nombre del juego y categoria, he escogido las que ya he configurado al dar de alta la aplicación en Google Play Store Console.

Configurando los datos de la aplicación. 

Necesitamos un icono de 512×512 y una imagen de cabecera de 1024 x 500.

Todos estos datos ya los tendremos si hemos dado de alta previamente la aplicación.

En linked apps nos encontramos con diferentes plataformas,  en este caso he escogido Android. Se tiene que informar del nombre del apk de la aplicación a linkar. Si la hemos dado de alta correctamente, escogeremos el package name de un combo, donde nos presentará todos los que están disponibles para ser linkados.

Una vez informado el apk pulsamos el botón Save and ContinueDespués de pulsar sobre AUTHORIZE YOUR APP NOW nos presentara un par de cuadros de dialogo mas, mostrando la clave generada, no tenemos que hacer nada mas que darle al OK.

Lo importante es que cuando acabemos tendremos informado el Application ID y el OAuth2 Client ID. En la parte inferior de la pantalla de linked apps.

Los dos últimos campos nos indican el Application ID y el Oauths Client ID. Con esto ya podemos dar nuestra aplicación por correctamente configurada en la Google Play Console para usar los Google Play Services.

1.2-Vamos a crear los logros.

Seleccionamos la opción de Achievements del menú lateral izquierdo.

Una vez seleccionado ADD ACHIEVEMENT vemos todo lo que tenemos que informar:

Tenemos que informar:

  • Una descripción,
  • El nombre del logro.
  • Un icono de 512×512. Para hacer el icono yo he utilizado piskelapp. Se recomienda que el logo sea colorido, ya que cuando no lo has conseguido se le presenta al usuario en una escala de grises.
  • Indicar si es un logro con varios pasos. No marcamos la opción.
  • Si el logro esta escondido o el usuario lo puede conocer. Esconderemos los que por ejemplo contengan spoilers de nuestro juego.
  • El valor del logro. A mas dificultad mas puntos le podemos dar, pero queda totalmente a nuestro criterio.
  • El orden en el que se muestran los logros al usuario.

Cuando lo tengamos todo informado, le damos al SAVE, en la parte superior de la pantalla, y ya tenemos un logro creado!

Como podemos ver debajo de la lista tenemos un link a Get resources. Al pulsarlo nos abrirá una ventana con un código que necesitaremos para configurar el plugin de Unity. Ya volveremos a por el después de configurar el plugin.

2-Configurando el plugin de Google Play Services en Unity.

Nos descargamos el pluguin desde su hoja en github: https://github.com/playgameservices/play-games-plugin-for-unity.

Una vez descargado, lo descomprimimos y en la carpeta current-build encontraremos el package a importar desde Unity.

En Unity seleccionamos Assets->Import Package->Custom Package y seleccionamos el package de la carpeta current-build. Al finalizar la importación Unity nos mostrará un mensaje indicando que el plugin ya esta instalado.

Como podemos ver en el mensaje el plugin aun se tiene que configurar. Una vez la demos al OK la instalación continuara durante un momento.

En el mensaje se nos dice que tenemos que buscar el menu Google Play Games, lo mas normal es no encontrarlo y acabar buscando en internet: No me aparece el menu del plugin Google Play Games for Unity, o si sabes ingles: Google Play Services Menu is not appearing. Nos ahorramos este paso, el menú esta en: Window->Google Play Games->Setup->Android Setup…

Al abrir el cuadro de dialogo tan solo tenemos que informar los android Resources, que los recuperaremos del listado de Achivements de la Google Play Console, donde hace nada hemos configurado nuestros logros. También podemos cambiar el nombre de la clase que contendrá los ID’s de los logros, lo encontramos en la casilla Constants class name.

El contenido a pegar en Resources definition lo obtenemos de la Google Play Console, en nuestro paso 1.2, donde hemos creado el logro, al finalizar nos mostraba un link para obtener el código que ahora pegaremos en este cuadro de dialogo. Después de hacer el copy / paste , pulsamos Setup y si todo va bien nos mostrara un mensaje indicandolo.

3-Los Scripts.

Ya hemos avanzado mucho, por ahora tenemos:

  • La Aplicación dada de alta en la Google Play Console y linkada con los Google Play Services.
  • Creado un logro en Google Play Services.
  • Configurado Unity con el Plugin de Google Play Service y informado el logro en la configuración.

Ahora nos toca crear un poco de código.

3.1-Login en Google Play Services.

Para hacer el login tenemos varias opciones, podemos habilitar un botón o podemos hacer que el login se haga automaticamente al arrancar la aplicación. Yo prefiero esta segunda opción, y para el caso, las llamadas a los Google Play Services son las mismas.

Vamos a crear un plugin, yo lo he llamo loadGame, por que se ejecutará al cargar el juego.

Vamos a ver su contenido:

[code language=”csharp”]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GooglePlayGames;
using GooglePlayGames.BasicApi;

public class loadGame : MonoBehaviour {

private void Awake()
{
#if UNITY_ANDROID
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().Build();

PlayGamesPlatform.DebugLogEnabled = true;
PlayGamesPlatform.InitializeInstance(config);
PlayGamesPlatform.Activate();
PlayGamesPlatform.Instance.Authenticate(SignInCallback, false);
#endif
}

public void SignInCallback(bool success)
{
#if UNITY_ANDROID
if (success)
{
Debug.Log("(Giskard) Signed in!" + Social.localUser.userName);

}
else
{
Debug.Log("(Giskard) Sign-in failed…");
}
#endif
}

}
[/code]

Primero tenemos que cargar los diferentes namespaces:

[code language=”csharp”]
using UnityEngine;
using GooglePlayGames;
using GooglePlayGames.BasicApi;
[/code]

En la función awake hacemos las llamadas necesarias para inicializar Google Play Services. Primero creamos el objeto config del tipo PlayGamesClientConfiguration. Como solo estamos utilizando los logros la llamada es muy sencilla, pero dependido de lo que queramos usar se puede complicar, veamos un ejemplo:

[code language=”csharp”]
//Inicialización normal.
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().Build();

//Inicialización que permite salvar las partidas.
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().EnableSavedGames().Build();
[/code]

En la llamada a Autenticate pasamos una función de callback, que se llamará con el resultado del login. En la función de callback, que he llamado SigInCallback recibimos una variable booleana indicando el éxito o fracaso de la operación de login.

Con el plugin recién creado ahora tenemos pensado donde lo ponemos. No es demasiado importante, seleccionamos cualquier objeto que se cargue al iniciar el juego y le añadimos el script 🙂

3.2-Logro conseguido.

Una cosa es definir cuando se consigue el logro y la otra realizar la llamada. Aquí trataremos la llamada, que es muy sencilla, desde donde ejecutéis esta llamada es cosa vuestra.

[code language=”csharp”]
//achievement succed
PlayGamesPlatform.Instance.ReportProgress(
GPGidenti.achievement_path_maker,
100.0f, (bool success) =>
{
Debug.Log("Path maker logro: " +
success);
});
[/code]

En el primer parámetro “GPGidenti.achievement_path_maker“, obtenemos el nombre del logro de la clase que hemos configurado en el cuadro de dialogo Windows->Google Play Games->Setup->Android Setup. La clase estará creada (posiblemente con un nombre diferente al que he usado yo, por defecto se llama GPSids).
En el segundo, le indicamos el grado de avance del logro, como hemos configurado un logro no incremental, cualquier valor que le pongamos por encima de 0 lo tomará como logro completado.
El tercer y ultimo parametro es una función de callback, que he puesto inside. Unity llamará a esta función con el resultado de la operación. Es decir si todo ha funcionado correctamente nos devuelve un true, y un false en caso contrario.

3.3-Consultar los logros.

Es tan sencillo como escribir una sola linea:

PlayGamesPlatform.Instance.ShowAchievementsUI();

Con esta linea Google ya se encarga de todo! Podemos decorarlo un poco y llamarla tan solo cuando sea necesario, o posible.

    public void ShowAchievements()
    {
#if UNITY_ANDROID
        if (PlayGamesPlatform.Instance.localUser.authenticated)
        {
            PlayGamesPlatform.Instance.ShowAchievementsUI();
        }
        else
        {
            Debug.Log(“Cannot show Achievements, not logged in”);
        }
#endif
    }

Con esta función nos aseguramos de que se este ejecutando en un sistema Android, y que el usuario ya este logado en Google Play Services.

Con esto es suficiente como para obtener la pantalla que veis. Os prometo que no he tenido que escribir nada mas para mostrar esta magnifica pantalla de logros en Giskard in the Dark.

Ya lo tenemos.

Tan solo tenemos que conectar nuestro teléfono y darle al Build & Run. Los pasos y la programación para incorporar logros a nuestro juego mediante Google Play Services son sencillos. Dedicaremos  bastante mas tiempo a pensar que logros poner, crear los iconos e incorporandos que programando los scripts necesarios.

Los logros del juego Giskard in the dark se han 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!

 

Subir un juego de Unity a GameJolt.

GameJolt es otra de las opciones que tenemos para publicar nuestros juegos. A diferencia de Kongregate GameJiolt no esta orientada Read more

Cómo firmar un .apk de Unity para subirlo a la Google Play Store.

El firmado del .apk es uno de los pasos que mas problemas suelen dar al subir una aplicación realizada en Read more

Como crear un efecto Parallax en Unity, de una forma acojonantemente sencilla.

Lo primero es explicar qué es el efecto Parallax. Se trata de cuando las imágenes del fondo se mueven a Read more

Creando Giskard: El peor desarrollador de juegos de la historia. 

OJALA!!!! OJALA FUERA EL PEOR DESARROLLADOR DE JUEGOS DE LA HISTORIA. Tan solo soy un tío que mientras aprende Unity Read more

Por Martra

Un comentario en «Incorporando Google Logros con Google Play Services para UNITY.»

Deja una respuesta

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