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项目

unity ab包 依赖 unity aar包_游戏引擎


2.新建一个模块

unity ab包 依赖 unity aar包_3d_02


unity ab包 依赖 unity aar包_游戏引擎_03


3.新建一个Activity

unity ab包 依赖 unity aar包_unity_04


unity ab包 依赖 unity aar包_交互_05

4.删除layout下的文件

unity ab包 依赖 unity aar包_交互_06


unity ab包 依赖 unity aar包_unity_07


删除报红的代码

unity ab包 依赖 unity aar包_游戏引擎_08


5.找到所用Unity的class文件,复制classes文件

unity ab包 依赖 unity aar包_unity ab包 依赖_09

unity ab包 依赖 unity aar包_3d_10


粘贴后右键点击

unity ab包 依赖 unity aar包_游戏引擎_11


6.导入UnityPlayerActivity.java文件

unity ab包 依赖 unity aar包_交互_12


unity ab包 依赖 unity aar包_unity_13


7.写入测试代码

unity ab包 依赖 unity aar包_3d_14

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文件,删除不必要的代码

unity ab包 依赖 unity aar包_交互_15

9.Build,等待编译完成

unity ab包 依赖 unity aar包_3d_16


unity ab包 依赖 unity aar包_交互_17


unity ab包 依赖 unity aar包_3d_18

选中右键 open in Explorer先复制到桌面

打开 用压缩文件打开aar文件

unity ab包 依赖 unity aar包_3d_19


unity ab包 依赖 unity aar包_unity_20

10.新建一个Unity工程

这个是unity2020版本的功能,点击直接生成AndroidManifest文件

unity ab包 依赖 unity aar包_unity ab包 依赖_21


将aar导入Unity

unity ab包 依赖 unity aar包_交互_22

修改AndroidManifest文件

修改android:name,修改为你在Android Studio所打包的库的包名:com.sc.testextendlibrary+类名:MainActivity(因为是扩展MainActivity类所以类名是MainActivity)
修改这个的目的是调用时在这个类下面启动

unity ab包 依赖 unity aar包_unity ab包 依赖_23


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

unity ab包 依赖 unity aar包_unity ab包 依赖_24

这个时候你打包应该不会成功 报错:使用或覆盖了已过时的 API

unity ab包 依赖 unity aar包_游戏引擎_25

这个是因为你aar包里面的jar文件里面的UnityPlayerActivity.class与Unity编辑器的冲突了 删除

如图:

unity ab包 依赖 unity aar包_交互_26


删除后就可打包成功

测试结果如下图

unity ab包 依赖 unity aar包_3d_27