Unity3D入门(四) : Android和Unity3D交互 - Unity调用Android

devtools/2024/12/31 1:58:37/

1. 前言

上篇文章,我们讲了如何通过Android调用Unity3D。这篇文章,我们来讲一下Unity3D怎么调用Android。

unityAndroid_3">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中,然后打包生成aarjar包,再放到Unity项目下。

Unity中通过AndroidJavaClassAndroidJavaObject这两个类来调用Java方法。

2.1 Android打包生成aar/jar

新建一个Android项目,并新建一个module,在这个module中新建一个类MyTest.java

package com.heiko.mylibrary;import android.util.Log;public class MyTest {public static String LOG = "MY-LOG3";public String name= "Heiko3";public static void setLog(String log) {LOG = log;Log.d(LOG, "SetLog:" + log);}public static String getLog() {Log.d(LOG, "GetLog:" + LOG);return LOG;}public void setName(String name) {this.name = name;Log.d(LOG, "setName:" + name);}public String getName() {Log.d(LOG, "getName:" + name);return this.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 CameraCamera Controller脚本的text1变量上,让TextCamera 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");
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


http://www.ppmy.cn/devtools/120466.html

相关文章

建投数据自主研发相关系统获得欧拉操作系统及华为鲲鹏技术认证书

近日&#xff0c;经欧拉生态创新中心和华为技术有限公司测评&#xff0c;建投数据自主研发的投资项目管理系统、全面风险管理信息系统、商业不动产业务系统&#xff0c;完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920&#xff08;Taisha 200&#xff09;的兼容性…

Python in Excel作图分析实战!

Excel 中的 Python 现已正式发布&#xff0c;适用于 Microsoft 365 商业版和企业版的 Windows 用户。去年 8 月&#xff0c;微软与 Anaconda 合作&#xff0c;通过集成 Python 为 Excel 引入了一个令人兴奋的新增功能&#xff0c;从而可以将 Python 和 Excel 分析无缝结合到同一…

ubuntu 安装kvm 创建windos虚拟机

查看主机服务器是否能虚拟化 egrep -c (vmx|svm) /proc/cpuinfo 如果输出的数字大于 0&#xff0c;则表示系统支持硬件虚拟化 配置网络&#xff08;这里要新建一个网桥&#xff0c;与本机的物理网卡enp5s0f0绑定&#xff0c;通过这个网桥连接创建的虚拟机&#xff09; netwo…

单片机的原理及应用

单片机的原理及应用 1. 单片机的基本原理 1.1. 组成部分 单片机主要由以下几个部分组成&#xff1a; 中央处理器&#xff08;CPU&#xff09;&#xff1a;执行指令并控制整个系统的操作。 存储器&#xff1a; 程序存储器&#xff08;Flash&#xff09;&#xff1a;存储用户…

cGANs with Projection Discriminator

基于映射鉴别器的CGAN 模型中&#xff0c;判别器&#xff08;Discriminator&#xff09;不是通过将条件信息简单地与特征向量拼接&#xff08;concatenate&#xff09;来使用条件信息&#xff0c;而是采用一种基于投影的方式&#xff0c;这种方式更加尊重条件信息在底层概率模…

.Net 6.0 监听Windows网络状态切换

上次发了一个文章获取windows网络状态&#xff0c;判断是否可以访问互联网。传送门&#xff1a;获取本机网络状态 这次我们监听网络状态切换&#xff0c;具体代码如下&#xff1a; public class WindowsNetworkHelper {private static Action<bool>? _NetworkStatusCh…

深入浅出MongoDB(三)

深入浅出MongoDB&#xff08;三&#xff09; 文章目录 深入浅出MongoDB&#xff08;三&#xff09;复制副本集设置分片分片实例备份与恢复监控ObjectId 复制 复制时将数据同步在多个服务器的过程&#xff0c;提供了数据的冗余备份&#xff0c;在多个服务器上存储数据副本&#…

【DAY20240927】经典深度学习模型对比:LeNet5、CNN、ResNet20、AlexNet、TextCNN 与 VGG-11

文章目录 前言一、LeNet5二、CNN三、AlexNet四、ResNet20五、TextCNN六、VGG-11 前言 We leverage 6 models to deal with the data, i.e., LeNet5 (LeNet) (LeCun et al. 1989), a synthetic CNN network (CNN), ResNet20 (ResNet) (He et al.2016), AlexNet (Krizhevsky, Su…