Construye un puente para Android en Unity | juegos David Silvera | Ingeniería vudú | Octubre de 2020

En Voodoo, todos nuestros juegos están programados en Unity. Algunas funciones son simples, más rápidas y más sólidas en los idiomas nativos. Por ejemplo, podemos tener un equipo trabajando en SDK de publicidad nativa y nosotros (Unity) queremos comunicarnos entre nosotros (SDK). Para hacer esto, debemos crear un puente entre nuestra lengua materna y la unidad.

Este artículo explica cómo hacer esto en Android (para iOS puede leer este artículo: https://medium.com/voodoo-engineering/bringing-native-ios-frameworks-into-unity-games-by-hacking -ios -métodos-2c656d18cf9b).

Para entender el método que usaremos, tomemos este ejemplo: queremos pedirle al SDK de Android que sume entre dos números y envíe el resultado.

Primero, cree un proyecto de Android con Android Studio y ejecute el módulo. Ahora está listo para trabajar en este nuevo módulo.

Para desarrollarlo, necesita el archivo unity-classes.jar, que contiene todas las clases de unidad necesarias para crear un puente de Android. Para cargar el archivo anterior, puede exportar el proyecto de Android en el editor de Unity y obtenerlo en el proyecto generado. Cópielo y péguelo en el mismo directorio de su archivo Gradle de Android. Asegúrese de no ponerlo en el repositorio lib, porque no quiere incluirlo al crear una biblioteca puente, Unity ya lo contiene.

En sus dependencias de Gradle, debe agregar:

compileOnly files('unity-classes.jar')

Puede usar todas las clases de dependencia a través de la línea anterior, pero nunca se conectarán a su archivo AAR.

Necesitas dos clases:

  • El primero en enviar una solicitud a Android: lo llamarás MathManager
  • el segundo devuelve el resultado: MathCallback

Primero creará este código para que sea más fácil para los demás. Creemos una interfaz MathCallback en Java (también puede funcionar en Kotlin, pero para una mejor comprensión, la desarrollará en Java). Esta interfaz incluirá todos los métodos que se implementarán en el lado de Unity.

Aquí puede ver que establece una firma de método que devuelve el resultado de la adición.

Eso es todo para esta parte y para Android.

Cree una clase MathManager en Java dentro de un módulo de Android creado previamente. Todos tus métodos estarán en esta clase. estático. Por lo tanto, Unity puede llamarlos directamente.

El primer método configura una instancia de la clase de devolución de llamada para que pueda enviar un resultado a Unity.

public static void SetCallback(MathCallback callback) {  Log.d("MathManager", "SetCallback");  this.callback = callback;}

Con el código anterior, almacena la devolución de llamada en una variable privada estática llamada «devolución de llamada».

Luego puede crear un método principal para el cálculo:

public static void Add(int var1, int var2){   callback.AddResult(var1 + var2);}

Solo agrega var1 a var2 y envía el resultado con la instancia de devolución de llamada.

Para generar fácilmente un archivo AAR, recomiendo agregar algunas tareas a su archivo Gradle de la siguiente manera:

La primera tarea copia el archivo AAR en una carpeta llamada «lanzamiento»

El segundo crea un grupo llamado «Matemáticas» que completa la tarea más rápido. Esta tarea crea el proyecto y realiza la primera tarea para que se copie el AAR.

Puede realizar esta tarea fácilmente abriendo la superposición de Gradle en Android Studio y haciendo doble clic en ella:

Puede copiar el archivo generado a su proyecto de unidad para su uso.

Para desarrollar esta sección, asegúrese de copiar la biblioteca de Android Bridge.

En esta sección, verá cómo crear una devolución de llamada y cómo llamar al método estático de Android.

Primero, verá cómo crear un proxy para crear una instancia de la interfaz de Android.

Codifique aquí:

Utilice AndroidJavaProxy para vincular su interfaz MathCallback para Android y la clase MathCallback Unity. En el constructor, usa un método llamado «base» para especificar el nombre completo de la clase de Android con el paquete. Aquí está mi interfaz declarada en el paquete io.voodoo.math de mi biblioteca de Android.

Finalmente, puede desarrollar el método utilizado en la interfaz y obtener el resultado. Puede ver que el método tiene la misma firma que la interfaz de Android.

Para obtener el resultado de una devolución de llamada de puente, puede usar otras técnicas, como usar un método llamado UnityPlayer.UnitySendMessage

Pero personalmente prefiero la técnica del proxy, que es fácil de implementar y más estructurada.

Para ejecutar esta sección, debe enviar una instancia de su interfaz. Aquí está el código:

new AndroidJavaClass("io.voodoo.math.MathManager").CallStatic("SetCallback", new MathCallback());

Ha creado una instancia de su clase MathManager de Android y llama al método estático SetCallback. Tiene su parámetro, le das una instancia de tu servidor proxy de unidad (que implementa tu interfaz de Android). Esto configura la devolución de llamada primero. Ahora puede llamar al segundo método y obtener el resultado:

new AndroidJavaClass("io.voodoo.math.MathManager").CallStatic("Add", 1, 2);

Como antes, creó una instancia de la clase Java y llamó al método estático «Agregar» con 2 parámetros: 1 y 2. El resultado de este método aparecerá en su proxy junto con el resultado 3.

Puede guardar AndroidJavaClass para no crearlo todo el tiempo.

A veces necesita comunicarse con la actividad actual u obtener el contexto de la aplicación.

Para hacerlo, puede agregar un método estático a su clase MathManager de la siguiente manera:

private static MathActivity getActivity() {   Activity currentActivity = UnityPlayer.currentActivity;   if (currentActivity instanceof MathActivity)      return (MathActivity) currentActivity;   return null;}

MathActivity es el nombre de su actividad actual.

Este método usa la biblioteca jar unity. UnityPlayer.currentActivity devuelve la actividad actual. En el proyecto Unity, te recomiendo que desarrolles en una actividad para que te sientas más cómodo.

A veces resulta más interesante desarrollar algunas funciones en lenguas nativas. Espero que este artículo te ayude a comprender que no es complicado en Android. Con este método, ahora puede desarrollar muchas funciones complejas y utilizar todos los métodos nativos para sus juegos.

Deja una respuesta

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