前言
Unity与Android交互之✨| 使用AndroidJavaProxy代理方式,让Android与Unity通讯
Android Studio端操作- 第一步:打开AS,新建一个工程
- 第二步:修改AndroidManifest.xml
- 第三步:导入Unity的classes.jar文件
- 第四步:添加回调的接口类
- 第五步:编写通讯入口方法
- 第六步:打包AS成aar包给Unity调用
Unity端操作
总结
前言
Unity与Android进行交互
一直都是Unity开发Android的一个常用手段- 其中的交互方式也有很多种,常用的就是
UnitySendMessage
和AndroidJavaProxy
- 那本篇文章来详细的介绍一下怎样在Android和Unity端使用
AndroidJavaProxy代理方式
进行交互调用 - 结合一个简单的完整通讯实例来学习,通俗易懂更好理解!看完记得点赞收藏哦~
Unity与Android交互之✨| 使用AndroidJavaProxy代理方式,让Android与Unity通讯
下面我们就先从Android Studio
端开始一步一步做起,Android Studio
下面统称AS
第一步:打开AS,新建一个工程
打开AS 之后新建一个项目,如下图几个步骤很简单
然后就是等它把工程新建完打开工程后
File->New->New Module
,选中Android Library
,新建一个Module。
我这里新建的Module
名字是MyunityLibrary
。
在这里创建一个AndroidLibrary
,起名为MainActivity
,创建好后是这个样子
简单修改了名字和路径之后,我们就进入这个AS工程了
第二步:修改AndroidManifest.xml
现在这里有两个AndroidManifest
,一个是本工程的,还有一个就是新建的unityLibrary
的。
这里把app的AndroidManifest
中背景的部分全部复制到我们新建的那个Library的AndroidManifest
中。
然后记得把我们创建的Library的 package
改为com.example.myunitylibrary
,然后报红的全删掉.
并且加上下面这一段代码,这段代码必须加上才能与Unity交互!
代码语言:javascript复制<meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
改好了如下所示
这个时候还报红是因为我们的Library中没有这个类,给他创建一个即可
这个时候AndroidManifest
就算暂时的改好了!
第三步:导入Unity的classes.jar文件
Unity的classes.jar
文件,这个目录在安装Unity的路径下
我的路径是在D:Program FilesUnityEditorDataPlaybackEnginesAndroidPlayerVariationsmonoReleaseClasses
下。
复制,粘贴到AS的 libs目录下,如下所示
选中class.jar->右键->AddAsLibrary->选中unitylibrary->Ok
。
第四步:添加回调的接口类
在我们的Library下新建一个接口
然后简单写几个方法用于测试交互,如下所示:
第五步:编写通讯入口方法
在我们的MainActivity中写代码,示例如下:
写了一个Unity调用Android的入口函数setCallback,然后再通过Unity传过来的值调用AS端的接口给Unity发送数据
具体Unity端怎样操作的还需要往下看!
第六步:打包AS成aar包给Unity调用
选中Library然后 Build -> Make Module ‘ ’
等待编译
然后AS会多出来一个build文件夹,我们找到outputs -> aar 下的aar包,这个就是我们需要在Unity中导入的文件,保存好就行
然后打开这个aar包,把lib文件夹下的class包给删掉,如下所示
如果不能直接打开,把aar修改为zip格式,删掉class后再改回aar格式即可!
然后AS端的操作就算完成了,接下来Unity中的就简单了,一起来看一下!
Unity端操作
首先我们打开Unity新建一个项目
然后新建一个Plugins文件夹,把我们的aar包放进去,如下所示:
然后新建一个场景写一个脚本UnityAndroidDemo
代码内容如下:
代码语言:javascript复制using UnityEngine;
using UnityEngine.UI;
public class setAndroidTest : MonoBehaviour
{
public Text Stringtext;
public Text Inttext;
public Button button;
public static setAndroidTest instance;
void Start()
{
instance = this;
//创建安卓端入口
AndroidJavaObject jo = new AndroidJavaObject("com.example.myunitylibrary.MainActivity");
setAndrodCallback _setAndrodCallback = new setAndrodCallback();
button.onClick.AddListener(()=>
{
// 设置回调函数接口,Unity端向安卓端发消息
jo.Call("setCallback", _setAndrodCallback);
});
}
public class setAndrodCallback : AndroidJavaProxy
{
public setAndrodCallback() : base("com.example.myunitylibrary.UnityCallBackTest") { }
public void IntCallBack(int content) { setAndroidTest.instance.Stringtext.text = content.ToString(); }
public void StringCallback(string msg) { setAndroidTest.instance.Inttext.text= msg; }
}
}
脚本中写了一个setAndrodCallback 类,在这个类中有一个跟安卓端中的接口一模一眼
其中下面这行代码中的字符串一定要跟我们AS端的包名 类名一致
代码语言:javascript复制 public setAndrodCallback() : base("com.example.myunitylibrary.UnityCallBackTest") { }
然后调用AS端的入口函数setCallback
启动交互
再把从安卓端传过来的值赋给Unity中的Text文本即可
最后就是打包成APK进行测试啦
File -> Build Setting -> Playrt Setting
然后点击Build进行打包即可
测试结果如下:
点击Button按钮之后,Android端的值就传给Unity并显示到UI上面了!
总结
本篇文章结合示例完整的演示了Unity端使用AndroidJavaProxy
的方式与Android
端进行交互的方法
过程看起来很繁琐,其实都是很简单的操作,Unity与Android进行交互也没那么难嘛!
那本篇文章就到这里啦,下次再见!