Unity2019.4 llama a la interacción de comunicación con Android

Prefacio

¡No se pudo encontrar UnityPlayerActivity! ¡No se pudo encontrar UnityPlayerActivity! ¡No se pudo encontrar UnityPlayerActivity! Se cambió a
la versión 2019.4 y se encontraron muchos errores al exportar Android. Por ejemplo, No se pudo encontrar UnityPlayerActivity, los recursos se duplicaron, etc. La razón es que Unity ha realizado cambios. Parece ser posterior a 2019.2. La versión se ha actualizado (la versión específica es desconocida), no digas mucho, solo iníciala

Estudio de Android

Crea un proyecto, recuerda el nombre del paquete

Ejemplos de configuración y código en Android Studio

Primero importe classes.jar, no hay cambios en este paso. De acuerdo con su proyecto andriod mono/IL2Cpp, busque el paquete jar correspondiente, como mi proyecto

ctrl + c, luego ctrl + v en la carpeta AS Libs, luego haga clic Add as library



y edite MainActivity.java, y descubrió que el UnityplayerActivity

complemento no se puede heredar la unidad del paquete Classes.jar no está presente en esta clase, esta vez necesitamos encontrar Untiy en UnityPlayerActivity, por ejemplo, mi ruta

, simplemente puede agregar la clase al MainActivitymismo directorio, pero recomiendo copiar más directamente todo el paquete al

final Efecto

Luego MainActivityescribimos código en

package com.test.unityandroidtest;
import android.os.Bundle;
import android.widget.Toast;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {
    
    
    public static MainActivity instance = null;  //单例类
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        instance=this;
    }
    //利用Toast
    public void SayHi(final String str)
    {
    
    
        runOnUiThread(new Runnable() {
    
    
            @Override
            public void run() {
    
    
                Toast.makeText(getApplicationContext(),str,Toast.LENGTH_SHORT).show();
            }
        });
    }
    //计算两数之和
    public int GetSum(int num1,int num2)
    {
    
    
     return num1+num2;
    }

    public static void SendUnity(String str)
    {
    
    
        String newstr="我是Android传来的消息:"+str;
        UnityPlayer.UnitySendMessage("UnityAndroidConnect","AndroidCallUnityMsg",newstr);
    }
}

Luego modifica el AndroidManifest.xml
original

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.unityandroidtest">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Después de la modificación

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.unityandroidtest">

    <application>
      <!--表明这个Activity是启动Activity 一定要写完全的包名 路径-->
        <activity android:name="com.test.unityandroidtest.MainActivity">
           
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>

Luego, en AS, la barra de tareas del título Build-> Make Project.
Generalmente, solo necesitamos un jar .

Abra el paquete jar con el paquete comprimido, elimine el directorio com dentro, elimine

buildConfig.class en el archivo de prueba.

Nota: Al empaquetar la unidad , Si encuentra

esto, D8:Program type already presenindica que los recursos están duplicados.Las dos partes anteriores están eliminando archivos redundantes.

En unidad

Luego coloque nuestra classes.jarsuma AndroidManifest.xmlen Unity, classes.jar en la carpeta libs,

luego cree un nuevo objeto de juego en Unity, asígnele un nombre UnityAndroidConnecty luego agregue un nuevo script y escriba el código

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class NewBehaviourScript : MonoBehaviour
{
    
    
    public Button btnToast, btnNum, btnString;
    public Text text;

    AndroidJavaClass jc;
    AndroidJavaObject androidInstance; //单例

    private void Start()
    {
    
    
        try
        {
    
    
            /* 下面的代码已不再适用
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
            */

            //一定要写完整
            jc = new AndroidJavaClass("com.test.unityandroidtest.MainActivity");
            androidInstance = jc.GetStatic<AndroidJavaObject>("instance");
        }
        catch (Exception e)
        {
    
    
            text.text = "初始化错误:" + e.ToString();
        }
        btnToast.onClick.AddListener(MakeToast);
        btnNum.onClick.AddListener(GetSum);
        btnString.onClick.AddListener(UnitySendAndroid);
    }

    public void MakeToast()
    {
    
    
        try
        {
    
    
            androidInstance.Call("SayHi", "hello unity");
        }
        catch (Exception e)
        {
    
    
            text.text = e.ToString();
        }
    }

    public void GetSum()
    {
    
    
        try
        {
    
    
            int num = 90;
            int num2 = 90;
            num = androidInstance.Call<int>("GetSum", num, num2); //返回值Int方法
            text.text = "计算结果:" + num.ToString();
        }
        catch (Exception e)
        {
    
    
            text.text = e.ToString();
        }
    }

    public void UnitySendAndroid()
    {
    
    
        try
        {
    
    
            string str = "loveyou";
            jc.CallStatic("SendUnity", str); //静态方法 可以直接用AndroidJavaClass jc
        }
        catch (Exception e)
        {
    
    
            text.text = e.ToString();
        }
    }

    /// <summary>
    /// android 发来的消息
    /// </summary>
    /// <param name="recvMsg"></param>
    public void AndroidCallUnityMsg(string recvMsg)
    {
    
    
        text.text = "结果:" + recvMsg;
    }
}

Simplemente construya la interfaz de Unity, la

configuración del

paquete , los resultados de la prueba del paquete

La última operación de espectáculo

Los pasos anteriores están empaquetados y ejecutados. Al buscar información, encontramos otras operaciones de sao, es decir, podemos compilar directamente la clase java escrita en la unidad. Aquí hay un proyecto oficial de GitHub, puede verificar https: // github. com / Unity-Technologies / uaal-example
Por ejemplo, los MainActivityarchivos anteriores se colocan directamente en la carpeta Unity Android (AndroidMainfest.xml también debe colocarse), también es completamente posible, ¡realmente posible! Es conveniente guardar muchos pasos

Gracias por el artículo

  1. Configuración del entorno Android Unity2019
  2. Comunicación de la plataforma Unity3D y Android
  3. Unity2019.4.4 interactúa con AndroidStudio3.5.2

Supongo que te gusta

Origin blog.csdn.net/K20132014/article/details/109159008
Recomendado
Clasificación