Hola Gente! Hoy les traigo un pequeño gran tutorial que me pidieron desde que comenzó el año prácticamente 😛 como usar Google Play Game Services en Unity 2D y bueno para esto seguimos utilizando el Flappy Bird que estuvimos creando hasta ahora.
La ventaja de Google Play Game services en verdad es los extras que le puede brindar a cualquier juego, los logros, el poder compartirlos, los puntajes más altos, etc. además viene con opciones para multiplayer y grabar el juego en la nube y poder compartirlo a través de Google Play en otros dispositivos, algo bastante interesante que el mismo Unity quiere emular con su Cloud, pero eso es tema de otros tutoriales, por lo pronto veremos un caso pequeño de como usar Google Play Game services en nuestro juego y poder hacer uso de ello para brindar una mejor experiencia al usuario.
El plugin de Google Game Play Services para Unity lo pueden encontrar aquí
Si no saben como compilar en Android o no tienen el SDK instalado en Unity por favor revisar este video
PD-> Cuidado con Rodinia Games que son unos estafadores, me han contado que ofrecen muchos euros por hacer sus juegos y al final no pagan. Mucho cuidado con ellos
PD 2-> Si quieren que se mantenga logueado durante todo el tiempo coloquen esta función en la clase ServiciosGoogleScript
void Awake () { DontDestroyOnLoad (transform.gameObject); }
Código
FlappyScript
using UnityEngine; using System.Collections; public class flappyScript : MonoBehaviour { //Declaramos la velocidad inicial del pajaro sea igual a zero, Vector3.zero = 0,0,0 //1,1,0 Vector3 velocidad = Vector3.zero; //Declaramos un vector que controle la gravedad, no usaremos la fisica de unity public Vector3 gravedad; //Declaramos un vector que define el salto (aleteo) del pajaro public Vector3 velocidadAleteo; //Declaramos si se debe aletear, si se toco la pantalla o se presiono espacio bool aleteo = false; //Declaramos la velocidad maxima de rotacion del pajaro public float velocidadMaxima; public TubosScript tubo1; public TubosScript tubo2; private Animator anim; private bool juegoTerminado; private bool juegoIniciado; //Declaramos el objeto que tiene el script de Google Play Game Services public ServiciosGoogleScript servicios; // Use this for initialization void Start () { anim = this.gameObject.GetComponent<Animator> (); } // Update is called once per frame void Update (){ //aumenta con el numero de presiones en la pantalla int numPresiones = 0; foreach (Touch toque in Input.touches) { if (toque.phase == TouchPhase.Ended) numPresiones++; } //Si la persona presiona el boton de espacio o hace clic en la pantalla con el mouse, o tocas con el dedo if (Input.GetKeyDown(KeyCode.Space) | Input.GetMouseButtonDown(0) | numPresiones > 0) { if(juegoTerminado == false) aleteo = true; juegoIniciado = true; tubo1.juegoIniciado = true; tubo2.juegoIniciado = true; } } //Este es el update de la fisica, que es ligeramente mas lento que el update del juego void FixedUpdate () { if(juegoIniciado) { //A la velocidad le sumamos la gravedad (Para que el pajaro caiga) velocidad += gravedad * Time.deltaTime; //Si presionaron espacio o hicieron clic if (aleteo == true) { //Que solo sea una vez aleteo = false; //El vector velocidad recibe el impulso hacia arriba al pajaro velocidad.y = velocidadAleteo.y; } //Hacemos que el pajaro reciba la velocidad (la gravedad lo hace caer mas rapido) transform.position += velocidad * Time.deltaTime; float angulo = 0; if (velocidad.y >= 0) { //Cambiamos el angulo si Y es positivo que mire arriba angulo = Mathf.Lerp (0, 25, velocidad.y/velocidadMaxima); } else { //Cambiamos el angulo si Y es negativo que mire abajo angulo = Mathf.Lerp (0, -75, -velocidad.y/velocidadMaxima); } //Rotamos transform.rotation = Quaternion.Euler (0, 0, angulo); } } //Cada vez que haya una colision con cualquier objeto que tenga un collider se actiavara esta funcion //Collider son Box Collider 2D, Circle Collider 2D, etc. void OnCollisionEnter2D (Collision2D colision) { //Si colisionamos con el tubo, que se detengan los tubos if(colision.gameObject.name == "TuboAbajo" | colision.gameObject.name == "TuboArriba"|colision.gameObject.name == "Piso") { //Hacemos que la velocidad de los tubos se haga cero tubo1.velocidad = new Vector3(0,0,0); tubo2.velocidad = new Vector3(0,0,0); anim.SetTrigger("JuegoTerminado"); juegoTerminado = true; } if(colision.gameObject.name == "Piso") { gravedad = new Vector3(0,0,0); } if(colision.gameObject.name == "TuboAbajo") { colision.gameObject.GetComponent<BoxCollider2D>().enabled = false; } } void OnGUI() { GUIStyle customButton = new GUIStyle("button"); customButton.fontSize = 20; int anchoBoton = Screen.width / 3; int altoBoton = Screen.height / 7; if(juegoTerminado) { // Dibujamos un boton de Reinicio if ( GUI.Button( new Rect( Screen.width / 2 - (anchoBoton / 2), (1 * Screen.height / 3) - (altoBoton / 2), anchoBoton, altoBoton ), "Reiniciar!",customButton ) ) { Application.LoadLevel("escena1"); } if ( GUI.Button( new Rect( Screen.width / 2 - (anchoBoton / 2), (1.5f * Screen.height / 3) - (altoBoton / 2), anchoBoton, altoBoton ), "Login!",customButton ) ) { //Nos logueamos a google game services servicios.Autenticar(); } if ( GUI.Button( new Rect( Screen.width / 2 - (anchoBoton / 2), (2 * Screen.height / 3) - (altoBoton / 2), anchoBoton, altoBoton ), "Puntajes!",customButton ) ) { //Ingresamos puntajes servicios.Puntajes(int.Parse(tubo1.puntajes.text)); } if ( GUI.Button( new Rect( Screen.width / 2 - (anchoBoton / 2), (2.5f * Screen.height / 3) - (altoBoton / 2), anchoBoton, altoBoton ), "Logro!",customButton ) ) { //Ingresamos un logro servicios.Logros(5); } } } }
ServiciosGoogleScript
using UnityEngine; using System.Collections; using GooglePlayGames; using UnityEngine.SocialPlatforms; //Calse para manipular los Google Play Game Services en Unity public class ServiciosGoogleScript : MonoBehaviour { //leaderboard strings private string idPuntajes = "idPuntajes"; private string idLogro = "idLogro"; private string idIncremental = "idIncremental"; // Use this for initialization void Start() { PlayGamesPlatform.Activate(); } //Retorna si esta autenticado o no public bool Autenticado() { if (Social.localUser.authenticated) return true; else return false; } //Autentica la usuario public bool Autenticar() { bool exito = false; Social.localUser.Authenticate((bool success) => { if (success) { exito = true; } else { exito = false; } }); return exito; } //Se agrega los puntajes al leaderboard public bool Puntajes(long puntaje ) { bool exito = false; if (Social.localUser.authenticated) { Social.ReportScore(puntaje, idPuntajes, (bool success) => { if (success) { ((PlayGamesPlatform)Social.Active).ShowLeaderboardUI(idPuntajes); exito = true; } else { exito = false; } }); } return exito; } //Se agregan los logros public bool Logros(long valor ) { bool exito = false; if (Social.localUser.authenticated) { Social.ReportProgress(idLogro, valor, (bool success) => { if (success) { exito = true; } else { exito = false; } }); } return exito; } //Se va incrementado los logros public bool LogroIncremental(int valor ) { bool exito = false; if (Social.localUser.authenticated) { ((PlayGamesPlatform)Social.Active).IncrementAchievement(idIncremental, valor, (bool success) => { if (success) { exito = true; } else { exito = false; } }); } return exito; } //Muestra la tabla de puntajes public void mostrarPuntajes() { ((PlayGamesPlatform)Social.Active).ShowLeaderboardUI(idPuntajes); } }
Algunos errores comunes al momento de compilar con Unity 3D y Android.
Si les aparece Error building Player: Win32Exception: ApplicationName=C:/Users/user/AppData/Local/Android/android-sdk/platforms/(version)\aapt.exe busquen el archivo aapt.exe en sdk\build-tools\xx.x.x.x(versión que les tira el error) una vez hecho esto peguenlo en sdk\platforms\xx.x.x.x(versión que les tira el error) esto y un poco de suerte, les resolverá el error
Si les aparece Error building Player: Win32Exception: ApplicationName=C:/Users/user/Desktop/adt-bundle-windows-x86_64-20140624/sdk\tools\zipalign.exe busquen el archivo zipalign.exe en sdk\build-tools\(version) búsquenlo en todas las carpetas si no lo encuentran al inicio, luego peguenlo en la carpeta sdk\tools
Si les aparece Error building Player: Win32Exception: ApplicationName=’java.exe’, CommandLine=’-Dcom.android.sdkmanager.toolsdir=C:/Program Files (x86)/Android/android-sdk\tools Se puede resolver de 2 maneras, una es instalando el java x86 o de 32 bits, y la otra es copiando el archivo java.exe. de of c:\windows\system32 a c:\windows\syswow64
Si les aparece Exception: Error building Player: Win32Exception: ApplicationName=’C:/Program Files (x86)/Android/android-sdktoolsapkbuilder.bat significa que tienen una version antigua de unity, y actualizaron el sdk, siendo incompatible con el viejo unity, o actualizan unity o le bajan la versión de Android
No se olviden que si quieren modificar la ruta del sdk de Android, pueden ir a Edit>>Preferences>>External Tools y hacerlo:
Suerte!
Hola de nuevo Julio!
Llevo varios dias tratando de meter en mi proyecto Unity Google plays junto al sdk de Appodeal (Si lo llevo usando unas semanas tal y como me recomendaste).
El caso es que al combinar los SDK me da error, me imagino que tu has tenido de lidiar con este problema, cual a sido tu solución? gracias!
Hola de nuevo^^
Tengo problemas para instalar el service de Google igual que otros compañeros.
Me sale el error “con otra ruta”:
Error building Player: CommandInvokationFailure: Failed to re-package resources. See the Console for details.
C:\Users\Elias\AppData\Local\Android\android-sdk\build-tools\21.1.2\aapt.exe package –auto-add-overlay -v -f -m -J gen -M AndroidManifest.xml -S “res” -I “C:/Users/Elias/AppData/Local/Android/android-sdk/platforms/android-21\android.jar” -F bin/resources.ap_ –extra-packages
Seguí tu video:
https://www.youtube.com/watch?v=sb87j3JYA2A
Pero creo que se a quedado obsoleto ya que Android support librarys no aparece y en la carpeta Extras no aparece la carpeta libproject.
Tanto cambia el proceso a las diferentes versiones? porque vaya un trabajo!
Te agradecería que lo explicaras de nuevo. Aunque me ha llegado a los oídos que en un mes cambian. Hay una actualziación y todos los servicios de publicidad que hay en las aplicaciones se tienen que actualizar…así que mejor ya nos esperamos 😀 jajaj
Bueno lo ultimo que hice que me ayudo en Unity fui ir a Assets – Google Play Services- Resolve Client Jars, pareciera que no pasara nada pero vuelves a compilar y funciona, solo no olvides tener actualizado a lo ultimo el SDK y los Extras
hola, con otra duda, ya esta compilando el proyecto pero me sale este error, te anexo la imagen, espero me puedas orientar, gracias.
http://www.subirimagenes.com/imagen-capturadepantalla-9620524.html
Hola, ya ejecute el paquete de Gogle Play Services y se guardo en mi proyecto pero cuando me voy a Build no me aparece que pueda compilar para android te anexo la imagen, espero me puedas ayudar, garcias.
http://www.subirimagenes.com/imagen-capturadepantalla-9619791.html
Tienes que bajar primero el Android SDK https://developer.android.com/studio/index.html sin el studio, al final, luego en la instalación de Unity verifica que tengas la opcion de compilar en Android olo dale clic a la opcion que te aparece module manager
Hola disculpa la molestia, pase el paquete a unity de Gogle Play Services pero cuando me voya Build no me aparece la opcion para compilar te anexo la imagen para que lo puedas ver, espero me puedas ayudar, muchas gracias http://www.subirimagenes.com/imagen-capturadepantalla-9619791.html
muchas gracias me salvaste casi tiro la toalla enserio gracias. tengo unas pregentas ¿con que windows es mejor trabajar el 7 o el 10? y ¿con que versiones de unity,tools,jdk,api,Plugins PlayGames y MobileAds trabajas actualmente? para cambiarme a esas verciones para no tener mas errores despues y si puedes por fabor pasame los links de descargar te lo agradeceria mucho
Ninguno 😛 windows es un mal market, está en caida, yo trabajo con todo lo ultimo siempre estoy actualizando
Hola Julio Cesar gracias por tus videos fueron de gran ayuda es facil de en tender lo que esplicas quisiera que me ayudes con dos errores que me salen y no los puedo solusionar
el primero es:
CommandInvokationFailure: Failed to re-package resources. See the Console for details.
C:\Users\jkarlos\AppData\Local\Android\sdk\build-tools\24.0.0\aapt.exe package –auto-add-overlay -v -f -m -J gen -M AndroidManifest.xml -S “res” -I “C:/Users/jkarlos/AppData/Local/Android/sdk\platforms\android-24\android.jar” -F bin/resources.ap_ –extra-packages com.google.example.games.mainlibproj
el segundo es:
Error building Player: CommandInvokationFailure: Failed to re-package resources. See the Console for details.
C:\Users\jkarlos\AppData\Local\Android\sdk\build-tools\24.0.0\aapt.exe package –auto-add-overlay -v -f -m -J gen -M AndroidManifest.xml -S “res” -I “C:/Users/jkarlos/AppData/Local/Android/sdk\platforms\android-24\android.jar” -F bin/resources.ap_ –extra-packages com.google.example.games.mainlibproj
El tema con services que es que tienes que tener el SDK actualizado a lo ultimo y fijate en este vídeo https://www.youtube.com/watch?v=y2oCGlO9CEk
Assets/GooglePlayGames/ISocialPlatform/PlayGamesUserProfile.cs(148,36): error CS0117: `UnityEngine.Texture2D’ does not contain a definition for `blackTexture’
Como lo soluciono?
Jamás me dio ese error, prueba reinciando Unity
Si, pero no incluye ese tipo de error, he probado todo lo que hay por la red sin resultado 🙁
Mira el que dice Si les aparece Error building Player: Win32Exception: ApplicationName=C:/Users/user/AppData/Local/Android/android-sdk/platforms/(version)\aapt.exe
Buenas, antes de nada darte las gracias por tanta dedicación, quería pedirte ayuda con este error, ya que he buscado por mil foros sin hayar solución, en principio pienso que será algún paquete extra que deba copiar de algún lado a otro. El error es este:
Error building Player: CommandInvokationFailure: Failed to re-package resources. See the Console for details.
C:\Users\Elias\AppData\Local\Android\android-sdk\build-tools\21.1.2\aapt.exe package –auto-add-overlay -v -f -m -J gen -M AndroidManifest.xml -S “res” -I “C:/Users/Elias/AppData/Local/Android/android-sdk/platforms/android-21\android.jar” -F bin/resources.ap_ –extra-packages
stderr[
ERROR: No argument supplied for ‘–extra-packages’ option
Android Asset Packaging Tool
.
.
.
Te fijaste en el post? en la parte de abajo hablo de este error donde dice “Algunos errores comunes al momento de compilar con Unity 3D y Android.”
solucionado me faltaba vincular la apk 🙂
🙂
failed to sign in. please check your network connection and try again nose que pasa jaja
🙁
Solucionado tenia el jdk instalado en Archivos de Programa en vede en Program Files(x86) tan solo tuve que copiar el jdk de una carpeta a otra ;D
Genial! 🙂
Hola ante todo muchas gracias por tu rapida respuesta XD El problema solo me pasa cuando meto el pluguin de google service sin embargo cuando pongo el de admob me deja copilar sin problemas pero tengo que quitar el de service y ya habia bajado todos los productos de oracle ya que al principio empeze programando en eclipse y ya tengo algun juego acabado pero cuando actualize el sdk de android empezo a darme problemas a la hora de copilar voy actualizar el JDK y JRE de Java a ver si se soluciona mi problema y te comento.
🙂
y esto como lo soluciono ?¿?¿?¿
🙂
Error building Player: Win32Exception: ApplicationName=’C:\Program Files (x86)\Java\jre6\bin\javac.exe’, CommandLine=’-bootclasspath “C:/Users/PC/AppData/Local/Android/android-sdk/platforms/android-20\android.jar” -d “C:\Users\PC\Documents\Unity Project\FPS\Temp\StagingArea\bin\classes” -source 1.6 -target 1.6 -encoding UTF-8 “com\AsturGameSl\SGC\R.java” “com\google\example\games\basegameutils\R.java”‘, CurrentDirectory=’C:\Users\Robert\Documents\Unity Project\FPS\Temp\StagingArea\gen’
Te flata instalar el java SDK, solo tienes el JRE instalado http://www.oracle.com/technetwork/java/javase/downloads/index.html
ignora el comentario anterior, ya lo resolvi 🙂 me hacia fata una linea de codigo xD
^_^
julio estaba siguiendo tu turorial cuando me encontraba editando el scrip para mi juego, al momento escribir la linea para activar la plataforma PlayGamesPlatform.Activate(); esta linea me dice que no esta dentro del contexto a pesar de que agregue el plugin a unity e hice todos los pasos de tu tutorial :s no se si hice algo mal
🙂
Exelente Julio, el proximo video sera el de admob?
Y ya esta en el blog ^_^ http://singletechgames.com/2014/07/21/tutorial-plugin-admob-unity-android-interstitial-banner/