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 MainActivity
mismo directorio, pero recomiendo copiar más directamente todo el paquete al
final Efecto
Luego MainActivity
escribimos 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 presen
indica que los recursos están duplicados.Las dos partes anteriores están eliminando archivos redundantes.
En unidad
Luego coloque nuestra classes.jar
suma AndroidManifest.xml
en Unity, classes.jar en la carpeta libs,
luego cree un nuevo objeto de juego en Unity, asígnele un nombre UnityAndroidConnect
y 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 MainActivity
archivos 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