Interacción entre Unity y Android (2): métodos de interacción comunes

AndroidJavaClass/AndroidJavaObject se usa comúnmente para implementar C# para llamar al código Java, y UnitySendMessage se usa comúnmente para implementar Java para llamar al código C#.

【Ejemplo de código de llamada】

El código Java es:

package com.test.addtest;

import com.unity3d.player.UnityPlayer;

public class JavaTestClass {
    public static int num;
    public static void Add(int a,int b)
    {
        int result = a+b;
        SendMessage(Integer.toString(result));
    }

    private static void SendMessage(final String info)
    {
        UnityPlayer.currentActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                UnityPlayer.UnitySendMessage("GameBase","U3dCallbackMessage",info);
            }
        });
    }

    public String name;
    public int Sub(int c)
    {
        return num-c;
    }
}

El código C# es:

using UnityEngine;
using UnityEngine.UI;

public class TestCode : MonoBehaviour
{
    public Text text;

    public void Add()
    {
        using (AndroidJavaClass testClass = new AndroidJavaClass("com.test.addtest.JavaTestClass"))
        {
            testClass.CallStatic("Add", 3, 5);
            testClass.SetStatic<int>("num", 10);
            int num = testClass.GetStatic<int>("num");
            U3dCallbackMessage(num.ToString());
            using (AndroidJavaObject testObject = new AndroidJavaObject("com.test.addtest.JavaTestClass"))
            {
                testObject.Set<string>("name", "永恒之星");
                string name = testObject.Get<string>("name");
                U3dCallbackMessage(name);
                int result= testObject.Call<int>("Sub", 8);
                U3dCallbackMessage(result.ToString());
            }
        }
    }

    public void U3dCallbackMessage(string message)
    {
        text.text += message;
        text.text += " ";
    }
}

El resultado es:

[Análisis del proceso de llamada]

  1. Después de hacer clic en el botón, se ejecuta el método Add. En el método Add, se genera una clase testClass con AndroidJavaClass. El parámetro entrante es el nombre del paquete + el nombre de la clase (puede ver el código Java), que es similar al espacio de nombres + nombre de la clase en C#. De esta forma, obtenemos la clase escrita en Java, pero en C#, tenemos la clase directamente.
  2.  testClass.CallStatic("Add", 3, 5); Esto es llamar al método Add en JavaTestClass. Add es un método estático, que se llama mediante el método CallStatic de AndroidJavaClass. El primer parámetro es el nombre del método y el subsiguiente Los parámetros son los parámetros del método Add, si el método Add tiene tres parámetros, obviamente debe haber tres parámetros después del nombre del método.
  3. En el método Add, en realidad se llama al método UnityPlayer.UnitySendMessage para pasar el resultado al lado de C#. Tiene tres parámetros. El primer parámetro es el nombre del GameObject, el segundo parámetro es el nombre del método y el tercer parámetro es el contenido del mensaje. Cada parámetro es de tipo cadena (en cuanto a por qué se usa el método RunOnUiThread, se explicará en el siguiente artículo. Primero puede pensar que se trata de una llamada asíncrona, por lo que el resultado 8 se muestra en el fin)
  4. testClass.SetStatic<int>("num", 10) establece el valor del campo de tipo int estático num en el código Java en 10, int num = testClass.GetStatic<int>("num") obtiene el campo de tipo int en el código Java El valor de num, que da como resultado 10
  5. AndroidJavaObject testObject = new AndroidJavaObject("com.test.addtest.JavaTestClass") es para instanciar una clase Java.
  6. testObject.Set<string>("name", "Eternal Star"); establezca el valor para el nombre de campo de tipo de cadena del objeto instanciado, string name = testObject.Get<string>("name") para obtener el valor
  7.  int result= testObject.Call<int>("Sub", 8); es llamar al método Sub del objeto instanciado, que tiene un valor de retorno de tipo int.
  8. Usar using es llamar automáticamente al método Dispose de AndroidJavaClass y AndroidJavaObject

[ La diferencia entre AndroidJavaClass y AndroidJavaObject ]

Al usar, comprenda AndroidJavaClass como una clase en C# y AndroidJavaObject como un objeto instanciado de esta clase

【UnitySendMessage】

Para que el método U3dCallbackMessage en TestCode reciba el mensaje de desconexión de UnityPlayer.UnitySendMessage en Java, la secuencia de comandos TestCode debe colgarse en el GameObject denominado GameBase. Este es el significado de los dos primeros parámetros de UnityPlayer.UnitySendMessage.

[Cómo generar código Java]

En primer lugar, debe instalar Android Studio usted mismo. El código de Java no es muy diferente de C#. Es fácil de escribir y puede entenderlo buscando una gramática poco clara.

Crear una actividad vacía

Especifique PackageName, que se usará en el código

Seleccione la estructura de directorios de Android, haga clic derecho en la aplicación y cree un nuevo Módulo

 

 Elija la biblioteca de Android

 Seleccione Proyecto, abra el directorio de Unity, en la ruta de Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations, según sea il2cpp o mono empaquetado, continúe seleccionando el modo de depuración o lanzamiento, busque classes.jar en la carpeta Classes e impórtelo a Java En la carpeta libs del proyecto, haga clic con el botón derecho y seleccione Agregar como biblioteca. El método de importación es arrastrar el archivo directamente o copiar el archivo a la ruta de la carpeta libs.

Haga clic derecho en addtest->src->main->java->com.test.addtest para crear una nueva JavaClass y escriba código en esta JavaClass

 Después de escribir el código, haga clic en Marcar proyecto o Reconstruir proyecto

La compilación se realizó correctamente sin informar de un error. Haga clic con el botón derecho en los resultados y seleccione mostrar en el explorador. Tenga en cuenta que la carpeta de compilación aparece automáticamente después de la compilación y no existe tal carpeta cuando se acaba de crear el proyecto. La compilación generalmente no informa errores, pero si no tiene suerte, se informarán varios errores. Estos errores se pueden resolver fácilmente mediante la búsqueda.

Descomprima el archivo arr, seleccione el archivo classes.jar y cámbiele el nombre al nombre que necesite. Este artículo se llama add

Coloque este archivo en Unity y el código C# puede llamar al código Java.

 

 Luego puede hacer un paquete de Android y probarlo en el emulador.

【Posibles errores y soluciones en Build】

Hubo recarga. . .

Supongo que te gusta

Origin blog.csdn.net/enternalstar/article/details/130961339
Recomendado
Clasificación