Crear un plugin Android Java para Unity 3D paso a paso
Una forma de implementar funciones de Android es mediante plugins Java, estos pueden ser archivos .jar o .aar(plugin Android) desde C# como tal no podemos mandar a llamar los métodos y funciones de Java, pero mediante un script podemos crear algo similar a una interfaz y ejecutarlos desde C#.
Para esto vamos a necesitar Android Studio no importa mucho la versión mientras tengan actualizado el SDK y las API necesarias yo recomiendo como minimo la versión 17 (Jelly Bean)
Obviamente requieres de Unity, de igual manera no importa la versión ya que el script funciona sobre cualquier versión del software, pero, si tienes problemas de compatibilidad te recomiendo actualizar a la versión más reciente.
Ahora comencemos.
1. Crear y configurar el proyecto en Android Studio
En Android Studio vamos a crear un proyecto especifico para el plugin, vamos a File -> New -> New Project, En la primera ventana seleccionamos la plataforma «Add No Activity» para que no se cree un activity en el proyecto.
En la segunda ventana nombramos el proyecto, yo lo llamare ‘AndroidPlugin’ y como API mínima voy a usar la API 17 que es Jelly Bean y finalizamos con la creación del proyecto.
Con el proyecto ya creado, vamos a crear la biblioteca de Android, vamos a File -> New -> New Module, en la ventana que se despliega seleccionamos Android Library, pulsamos ‘next’.
Ahora configuramos el nombre, yo la nombrare ‘AndroidLib’ y luego seleccionamos la versión de SDK, de igual forma la pondremos en la API 17 (Jelly Bean),el ‘Module Name’ lo podemos dejar como nos lo pone automáticamente. y finalmente pulsamos ‘Finish’.
Ya hemos creado nuestro proyecto y configurado algunas cosas, ahora necesitamos codificar dentro de nuestra librería.
2. Codificar funciones para Android
Empecemos a codificar algo, dentro de la ventana de project, vamos a la carpeta de la biblioteca que en mi caso es ‘AndroidLib’, luego vamos a la carpeta ‘java’ ahí tenemos hasta 3 paquetes, 2 tienen entre paretesis (androidTest) y (test), seleccionamos el que no tenga ninguno de esos nombres que en mi caso es ‘com.scrapywar.unitylib’, damos clic derecho New -> Java Class.
En mi caso llamare la mi clase ‘androidToast’, dejaremos la visibilidad en
public
y los modificadores en
None
, luego pulsamos ‘ok’.
Ahora dentro de la clase vamos a codificar el ejemplo para mostrar un mensaje con
Toast
que es el siguiente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import android.content.Context; import android.widget.Toast; public class androidToast { Context currentContext; // Asignamos un Context para poder utilizar las funciones de Android. public androidToast(Context UnityContext){ currentContext = UnityContext; } public void showToast(final String message) { //Creamos y mostramos un mensaje con el Toast de Android Toast.makeText(currentContext, message, Toast.LENGTH_SHORT).show(); exec(); } } |
Una vez completado nuestro código vamos a compilar el plugin para poder utilizarlo en Unity, antes de eso no olvidemos modificar el AndroidManifest.xml que se encuentra en carpetaplugin/manifest (Aunque eso debe ser antes de codificar).
Pero esto lo haremos si requerimos de permisos para utilizar algunas funciones, cosa que para este tutorial no haremos.
Ya solo queda compilar nuestro plugin,por defecto se compila la versión ‘debug’ pero debemos de generar la versión ‘release’, para ello debemos ir a la ventana «Build Variants» en donde cambiaremos la variable de nuestro modulo de
debug
a
release
.
Para finalizar ya solo ve a Build -> Make Project y espera a que el proceso termine, al finalizar dirígete a la carpeta de tu modulo, y en build/outputs/aar encontraras el archivo
.aar
que es tu plugin.
3. Implementar el plugin en Unity
Prácticamente el paso final si lo queremos ver así, ahora vamos a implementar el plugin en Unity, primero creamos la carpeta Plugins y dentro de esta creamos otra llamada Android en la cual copiaremos el archivo
.aar
previamente generado.
Debemos asegurarnos que este configurado únicamente para Android, como lo muestra la imagen.
Ahora vamos a crear un script para llamar a los métodos de Java, en mi caso voy a crear un nuevo script llamado
ToastCaller
y le voy a agregar el método
ShowToast
el cual va a recibir como parámetro un valor de tipo
string
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class ToastCaller : MonoBehaviour{ // Start is called before the first frame update void Start(){ } // Update is called once per frame void Update(){ } /// <summary> /// Muestra el Toast con el texto que se le especifique /// </summary> /// <param name="Message">El mensaje que se mostrara en el Toast</param> public void ShowToast(string Message){ AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject unityActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity"); /* Aqui especificamos la ruta de la clase que vamos a utilizar, en mi caso "com.scrapywar.unitylib.androidToast" ademas le pasamos el valor de unityActivity a el contructor de la clase androidToast que pide un Context como parametro. */ AndroidJavaObject androidtoast = new AndroidJavaObject("com.scrapywar.unitylib.androidToast", unityActivity); //Ahora solo llamamos a la clase 'showToast' y le mandamos el valor de tipo string que es el mensaje a mostrar androidtoast.Call("showToast", Message); } } |
Como paso final ya solo queda mandar a llamar el método en Unity, para ello agregaremos un botón a nuestra escena y al mismo le agregamos el script, para después configurar el evento
On Click()
, recuerda añadirle el mensaje que quieres mostrar.
No olvides que para compilar debes de modificar los parámetros dentro del Player Settings como el package name y el Minimum API Level que debe ser el mismo que el de tu plugin.
4. Probar
Puedes implementar tu aplicación en tu emulador preferido o directamente en tu dispositivo Android, al final de todo el resultado que obtendremos es el siguiente.
Descargas
Puedes descargar el proyecto para Android Studio y/o el UnityPackage que puedes importar directamente en tu software Unity.
Proyecto Android Studio
Descarga el proyecto AndroidPlugin.zip que puedes abrir con Android Studio 3.3.2.
Descarga el Proyecto de Android Studio desde MEGA
Unity Package/Proyecto
Descarga el paquete de Unity, importalo a un nuevo proyecto o uno ya existente.
Descarga el Unity Package desde MEGA
Comparte este tutorial en tus redes sociales, hay funciones que Unity aun no ha incorporado y para ello debes utilizar plugins, hay muchas posibilidades así evitas comprar plugins tan sencillos como este.
Documentación relacionada.
- https://docs.unity3d.com/ScriptReference/AndroidJavaObject-ctor.html
- https://developer.android.com/studio/projects/android-library
- https://docs.unity3d.com/Manual/PluginsForAndroid.html
- https://developer.android.com/studio/projects/android-library
- https://en.wikipedia.org/wiki/Java_Native_Interface