Unity发布安卓应用时,难免会与安卓端进行通信,如调用qq微信登录,调用其他应用等,博主在实现时,很多教程都是老旧的无法使用,弄的自己焦头烂额,为了让后人少走弯路,我把的实现方法分享出来,方法有很多不足请见谅:)。

1.将Unity工程导入安卓

(Unity版本2019.4.7f1, AndroidStudio版本4.2.1)

之前尝试过制作jar插件导入unity使用,不知为何导出一直失败,所以我们反过来把Unity导入AndroidStudio里打包。

1.将你的Unity安卓工程导出为安卓工程(勾选Export Project),导出来是一个文件夹,我命名为Unity

2.记住你的包名,包名可以在Player Sitting->Player->Other Setting里查看

3.用AndroidStudio打开你导出的文件夹,打时项目结构如下

4.我们主要对UnityLibrary进行修改,在修改前还要进行一些环境适配工作,首先确保你的Android SDK包含了Unity项目里指定的版本

然后确保安装了Gradle,我使用的是6.7.1版本,(可以去官网手动下载,然后在设置里手动指定路径,官网地址

确认后点击同步一下,看看还有没有报错,不报错就能继续下一步了(一般同步时会出现一些小错误,多数为环境配置问题)

5.Unity默认调用Unitylibrary里的UnityPlayerAcitity启动,我们要加入自己的代码的话,就得自己创建一个类继承UnityPlayerAcitity,并且让游戏启动时调用我们自己写的类

在UnityPlayerAcitity同目录下新建一个类,我起名为UnityToAndroid(如上图),并继承UnityPlayerAcitity

打开UnityLibrary的AndroidManifest.xml,将activity调用的类替换为我们自己创建的类名(原来是UnityPlayerAcitity)

同步一下代码,不报错的话将unity工程导入安卓就成功了

2.Unity与安卓通信

接下来了解Unity和安卓之间如何通信

1.首先是Unity调用安卓方法

在你要调用安卓类的C#类上创建一个AndroidJavaObject实例,并调用call方法,其中构建时填入的就是你的类的位置

AndroidJavaObject jo;
jo = new AndroidJavaObject("com.croakstudio.mylibrary.UnityToAndroid");
//填入你自己创建的类路径
jo.Call("showToast", "hello");                                         //调用安卓类里面的方法,前面传入方法名,后面传入参数
int temp = jo.Call<int>("showToast", "hello");                         //如果是带返回的函数记得加上返回类型

然后在你安卓端创建的类里实现你调用的方法

我这里是弹出安卓消息窗口
这样当你在Unity里Call这个方法时,该方法就会调用

2.安卓调用Unity方法
在安卓代码里调用Unity方法,可以用UnityPlayer类里的UnitySendMessage方法实现
UnityPlayer.UnitySendMessage("mainCamera","Test",“hello”);

其中,第一个参数是你在Unity里的一个gameobject的名称,请确保在调用方法时,Unity当前场景里有这个物体,第二个参数是这个物体上挂载的某个脚本的某个方法名,也就是说调用的方法,其所在的脚本需要挂载到第一个参数里的物体上,第三个参数就是调用的方法里需要传入的参数。

我这里就是调用了游戏场景里名为mainCamera物体,上面挂载的某个脚本里的Test方法。

最后导出安装包进行测试,我这里测试了Unity调用安卓弹出消息

至此,安卓与Unity通信就完成了

这篇教程并不是很详细,而且有很多不足之处,如有疑问欢迎私信我的b站账号 CroakFang