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