[Unity]AndroidStudio导出aar包与Unity交互

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]AndroidStudio导出aar包与Unity交互_第1张图片
2.新建一个模块
[Unity]AndroidStudio导出aar包与Unity交互_第2张图片
[Unity]AndroidStudio导出aar包与Unity交互_第3张图片
3.新建一个Activity

[Unity]AndroidStudio导出aar包与Unity交互_第4张图片
[Unity]AndroidStudio导出aar包与Unity交互_第5张图片

4.删除layout下的文件
[Unity]AndroidStudio导出aar包与Unity交互_第6张图片
[Unity]AndroidStudio导出aar包与Unity交互_第7张图片
删除报红的代码
[Unity]AndroidStudio导出aar包与Unity交互_第8张图片
5.找到所用Unity的class文件,复制classes文件
[Unity]AndroidStudio导出aar包与Unity交互_第9张图片

[Unity]AndroidStudio导出aar包与Unity交互_第10张图片
粘贴后右键点击
[Unity]AndroidStudio导出aar包与Unity交互_第11张图片
6.导入UnityPlayerActivity.java文件
[Unity]AndroidStudio导出aar包与Unity交互_第12张图片
[Unity]AndroidStudio导出aar包与Unity交互_第13张图片
7.写入测试代码
[Unity]AndroidStudio导出aar包与Unity交互_第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]AndroidStudio导出aar包与Unity交互_第15张图片

9.Build,等待编译完成
[Unity]AndroidStudio导出aar包与Unity交互_第16张图片
[Unity]AndroidStudio导出aar包与Unity交互_第17张图片
[Unity]AndroidStudio导出aar包与Unity交互_第18张图片

选中右键 open in Explorer先复制到桌面
打开 用压缩文件打开aar文件
[Unity]AndroidStudio导出aar包与Unity交互_第19张图片
[Unity]AndroidStudio导出aar包与Unity交互_第20张图片

10.新建一个Unity工程
这个是unity2020版本的功能,点击直接生成AndroidManifest文件
[Unity]AndroidStudio导出aar包与Unity交互_第21张图片
将aar导入Unity
[Unity]AndroidStudio导出aar包与Unity交互_第22张图片

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

[Unity]AndroidStudio导出aar包与Unity交互_第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]AndroidStudio导出aar包与Unity交互_第24张图片

这个时候你打包应该不会成功 报错:使用或覆盖了已过时的 API
[Unity]AndroidStudio导出aar包与Unity交互_第25张图片

这个是因为你aar包里面的jar文件里面的UnityPlayerActivity.class与Unity编辑器的冲突了 删除
如图:
[Unity]AndroidStudio导出aar包与Unity交互_第26张图片
删除后就可打包成功
测试结果如下图
[Unity]AndroidStudio导出aar包与Unity交互_第27张图片

你可能感兴趣的:(unity,交互,游戏引擎)