效果

在这里插入图片描述
在这里插入图片描述

方式一
android端
1、新建library库
2、复制jar包

把unity的安装目录下面的class.jar包给复制出来,具体目录如下

注意

这里分 il2cpp 和 mono 两个,这个取决于你后面unity要使用那个方式打包,我这里使用的是il2cpp里面的jar包

在这里插入图片描述
在这里插入图片描述

3、android项目中引用jar包

以compileOnly 的方式引用

dependencies {
    compileOnly files('libs/unity-classes.jar')
}
4、新建activity类继承UnityPlayerActivity
import com.unity3d.player.UnityPlayerActivity;

public class TestActivity extends UnityPlayerActivity {
	// 自定义方法,供unity调用
    public String getPath() {
        return Environment.getExternalStorageDirectory().getAbsolutePath();
    }
}
5、修改库的清单文件AndroidManifest.xml

我这里就是直接把app的清单文件直接复制过来,然后删除报错的代码,然后把新建的activity给引进来就可以了

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

    <application
        android:allowBackup="true"
        android:supportsRtl="true">
        <activity
            android:name=".TestActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
6、打aar包

请参考android使用maven-publish打jar包和aar包并上传到本地maven仓库 这篇文章

Unity端
1、新建文件夹,引入aar包

在这里插入图片描述

2、引入清单文件

在这里插入图片描述

注意1

在这里要注意复制出来的清单文件和aar包里面清单文件的不同之处

在这里插入图片描述

  • 包名不同,unity的清单文件里面的包名要和一会后面设置的包名保持一致,但是不能和aar里面的包名一样
  • 新增app_name在unity的清单文件的application标签上新增label
  • 删除启动项,unity的清单文件里删除启动项,因为aar的包里已经有了,所以删除
3、写方法调用
	public void test1() {
		AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
		AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
		string str = jo.Call<string>("getPath");
		Text.text = "方式一:" + str;
	}
4、修改unity的包名

在这里插入图片描述

5、 打包

在这里插入图片描述

方式二
android端
1、新建library库
2、写方法
public class Utils {
	// 该方法供unity调用
    public int add(int a, int b) {
        return a + b;
    }
}
3、打aar包

步骤同方法一

Unity端
1、引入aar包
2、写代码引用
public void test2()
{
	// 通过包名+类名来获取
	AndroidJavaObject jo = new AndroidJavaObject("com.test.testlib.Utils");
	int str = jo.Call<int>("add",2,3);
	Text.text = "2 + 3 = " + str;
}

剩下其余的步骤跟 方法一 相同,这里不需要引用清单文件

参考文献

[1] Unity使用aar打出apk过程一览
[2] Unity和Android通信

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐