Unity版本:2020.3.16f1c1
AndroidStudio版本:Android Studio Arctic Fox | 2020.3.1 Patch 1.4
首先先了解一个概念,对于安卓应用来说每一个界面都是一个Activity,而Unity打包出来的整个应用对于安卓来说就是一个Activity也就是MainActivity
通过扩展MainActivity导出aar包来与Unity进行交互
1.新建一个Android Studio项目
2.新建一个模块
3.新建一个Activity
4.删除layout下的文件
删除报红的代码
5.找到所用Unity的class文件,复制classes文件
粘贴后右键点击
6.导入UnityPlayerActivity.java文件
7.写入测试代码
package com.sc.testextendlibrary;
import android.os.Bundle;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public int add(int a,int b){
//这一行代码是安卓调用unity 第一个参数是unity中脚本挂在的对象,第二个是脚本里面调用的方法
UnityPlayer.UnitySendMessage("Main Camera","ChangeColor","");
return a+b;
}
}
8.修改AndroidManifest文件,删除不必要的代码
9.Build,等待编译完成
选中右键 open in Explorer先复制到桌面
打开 用压缩文件打开aar文件
10.新建一个Unity工程
这个是unity2020版本的功能,点击直接生成AndroidManifest文件
将aar导入Unity
修改AndroidManifest文件
修改android:name,修改为你在Android Studio所打包的库的包名:com.sc.testextendlibrary+类名:MainActivity(因为是扩展MainActivity类所以类名是MainActivity)
修改这个的目的是调用时在这个类下面启动
11.创建C#脚本,因为之前java代码写了Main Camera,所以脚本必须挂载到Main Camera上
public class Test : MonoBehaviour
{
public Text text;
// Start is called before the first frame update
void Start()
{
try
{
//这两句代码是扩展MainActivity 的固定写法
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
//Unity调用安卓
text.text = jo.Call<int>("add", 1, 2).ToString();
}
catch (Exception e)
{
Debug.Log("初始化错误:" + e.ToString());
text.text = "初始化错误:" + e.ToString();
}
}
public void ChangeColor()
{
text.color = Color.red;
}
}
12.打包 因为之前创建安卓项目是设置的最小的API是8.0 所以这个调成8.0
这个时候你打包应该不会成功 报错:使用或覆盖了已过时的 API
这个是因为你aar包里面的jar文件里面的UnityPlayerActivity.class与Unity编辑器的冲突了 删除
如图:
删除后就可打包成功
测试结果如下图