1. 前言
上篇文章,我们讲了如何通过Android调用Unity3D。这篇文章,我们来讲一下Unity3D怎么调用Android。
1.1 unity和Android的三种通信方式
- Unity官方提供的接口 : 有一个弊端,它有一个传输内容量的一个限制,传输内容过大或过快的时候,会出现丢东西或崩溃的情况。
- tcp / udp 通信: 通过socket发送和接收,通过本机地址127.0.0.1进行通讯。
- jni : 用C++写一个中转站,生成so库,Android和Unity C#脚本分别调用这个so库。
这里我们只具体介绍一下Unity官方提供的接口,其他方式感兴趣的童鞋可以自行去了解。
2. Unity调用Android
Unity
中调用
Android
,需要
Android
新建一个
Module
,相关的
java
类放到这个
Module
中,然后打包生成
aar
或
jar
包,再放到
Unity
项目下。
Unity
中通过
AndroidJavaClass
和
AndroidJavaObject
这两个类来调用
Java
方法。
2.1 Android打包生成aar/jar
新建一个Android项目,并新建一个
module
,在这个
module
中新建一个类
MyTest.java
packagecom.heiko.mylibrary;importandroid.util.Log;publicclassMyTest{publicstaticString LOG ="MY-LOG3";publicString name="Heiko3";publicstaticvoidsetLog(String log){
LOG = log;Log.d(LOG,"SetLog:"+ log);}publicstaticStringgetLog(){Log.d(LOG,"GetLog:"+ LOG);return LOG;}publicvoidsetName(String name){this.name = name;Log.d(LOG,"setName:"+ name);}publicStringgetName(){Log.d(LOG,"getName:"+ name);returnthis.name;}}
然后Android打包生成aar或jar包
jar包位于这个路径
aar位于这个路径
如果要用到resources资源文件,那就用aar包。如果只用到java代码,就用jar包。
2.2 将aar/jar复制到Unity项目中
这里以aar包为例,事实上aar和jar包的操作是一样的。
Unity中,Android aar/jar包的存放位置是有要求的,我们需要在Assets目录下,新建
Plugins/Android
目录,存在在这个目录下
2.3 Unity中新增一个Text
在Unity中,我们创建一个Text文本,用来展示从Android上获取的内容。
调整文本的颜色和位置,改成红色并改变x和y坐标,效果如下
在
Camera Controller
中定义这个Text
public TextMeshProUGUI text1 = null;
然后把这个
Text
拖动到
Main Camera
的
Camera Controller
脚本的
text1
变量上,让
Text
和
Camera Controller
关联起来
2.4 在Unity中调用Android方法
在
Camera Controller
脚本的
Start
方法中,我们增加如下代码
AndroidJavaObject javaObject = new AndroidJavaObject("com.heiko.mylibrary.MyTest");
//调用MyTest的getName方法
string name = javaObject.Call<string>("getName");
//将字符串复制给text1
text1.text = name;
运行Unity项目 (注意 : 这里需要将Unity项目打包成apk,然后运行在Android上,因为调用Android方法必须要在Android上调用,如果在电脑上运行是不会有效果的)
可以看到有个红色的文本,显示出来了
Heiko3
2.5 其他Unity调用Android的方法
AndroidJavaClass javaclass = new AndroidJavaClass("com.heiko.mylibrary.MyTest");
AndroidJavaObject javaObject = new AndroidJavaObject("com.heiko.mylibrary.MyTest");
javaclass.CallStatic
: 调用静态方法
string log = javaclass.CallStatic<string>("getLog");
javaclass.CallStatic("setLog", "NewLog");
javaclass.SetStatic
: 设置静态变量
javaclass.SetStatic("LOG", "FiledLog");
javaObject.Call
:调用方法
string name = javaObject.Call<string>("getName");
javaObject.Call("setName", "zhk");
javaObject.Set
:设置变量
javaObject.Set("name", "kai");
3. Unity3D入门系列文章
Unity3D入门(一) : 第一个Unity3D项目,实现矩形自动旋转,并导出到Android运行
Unity3D入门(二) :Unity3D过渡切换视角
Unity3D入门(三) : Android和Unity3D交互 - Android调用Unity
Unity3D入门(四) : Android和Unity3D交互 - Unity调用Android
参考
将Unity用作Android应用中的库_哔哩哔哩_bilibili
【Unity安卓】使用AndroidStudio与Unity进行简单通讯_哔哩哔哩_bilibili
Unity和Android通信_哔哩哔哩_bilibili
Unity与Android之间的通信交互_哔哩哔哩_bilibili
如何使用AndroidStudio和Untiy3D交互?_哔哩哔哩_bilibili
版权归原作者 氦客 所有, 如有侵权,请联系我们删除。