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

news2024/11/17 21:35:48

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中,然后打包生成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");
  • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2174120.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解JavaScript中的数组

第7章 数组 JavaScript数组索引基于32位数值&#xff0c;以0开头&#xff0c;最大索引2^32-2&#xff0c;最大容纳4294967295&#xff0c;大约42亿个。 JavaScript数组是动态的&#xff0c;根据需要增长或缩减&#xff0c;可能是稀疏的&#xff0c;有length属性。 用数字索引…

Linux下的驱动开发一

设备驱动 设备驱动程序&#xff08;Device Driver&#xff09;是操作系统中的一种软件组件&#xff0c;负责管理和控制计算机硬件设备的工作。驱动程序通过提供操作系统和硬件设备之间的接口&#xff0c;使得操作系统和应用程序能够与硬件设备进行交互&#xff0c;而无需了解硬…

【智能大数据分析 | 实验二】Spark实验:部署Spark集群

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

网易云多久更新一次ip属地

‌在数字化时代&#xff0c;网络成为了我们日常生活中不可或缺的一部分。无论是社交娱乐还是工作学习&#xff0c;IP地址作为网络身份的象征&#xff0c;都扮演着重要的角色。对于网易云音乐这样的热门应用来说&#xff0c;IP属地的显示不仅关乎用户体验&#xff0c;也涉及用户…

Supervisor进程管理工具安装

Supervisor进程管理工具安装 一、Supervisor概况及作用1.概况2.主要作用1&#xff09;、进程管理(1). 启动与停止进程(2). 自动重启进程(3). 进程状态监控 2&#xff09;、日志管理(1).集中化日志记录 3&#xff09;、资源管理与优化(1). 控制进程资源使用 二.安装 Supervisor1…

小白学大模型RAG:十大步骤分析GraphRAG的工作原理

对于普通的RAG&#xff0c;也就是前面课程讲的RAG&#xff0c;它的原理是通过将文本进行切分和向量化&#xff0c;通过计算文本之间的向量相似度&#xff0c;从而得到两个文本之间的语义相似度&#xff0c;从知识库中找出跟问题语义相似的知识点&#xff0c;再送给LLM得出最终答…

学习Java (五)

1.学习封装 package com.msb.test07; //封装 public class Girl {private int age; // 赋值public void setAge(int age){if(age > 30){this.age 18;}else{this.age age;}} // 读取public int getAge(){return age;} }package com.msb.test07;public class Test {p…

【Linux 报错】“make: ‘xxxx‘ is up to date.” 解决办法

一、报错原因 我们使用 make 命令&#xff0c;想要将 text.c 文件编译形成 可执行文件 text 时&#xff0c;报错如下 make: test is up to date. 中文含义&#xff1a;test 文件已经达到最新状态 意思是&#xff1a; test.c 文件里面的 所有源代码都没有修改过&#xff0c;你…

c++11~c++20 numeric_limits

在c中应该尽量少使用宏&#xff0c;用模板取而代之是明知的选择。我们可以使用numeric_limits来获取最大值和最小值&#xff0c;例如 #include <iostream> #include <limits> #include <iostream> using namespace std;int main() {cout << "int…

Go基础学习04-变量重声明;类型转换;类型断言;Unicode代码点;类型别名;潜在类型

目录 变量重声明 类型断言 类型转换 类型转换注意事项 Unicode代码点 类型别名、潜在类型 类型别名的意义 变量重声明 编写代码&#xff1a; package mainimport "fmt"var container []string{"Beijing", "Shanghai"}func main() {fmt.Pr…

Qt开发技巧(八)自带对话框的美化,内置快捷代码段,巧用匿名槽函数,另类动态换肤,资源动态加载

继续讲一些Qt开发中的技巧操作&#xff1a; 1.自带对话框的美化 Qt中有一些自带的对话框&#xff0c;比如文件选择对话框&#xff0c;颜色选择对话框等等&#xff0c;这些对话框看着跟系统的对话框没太大差别&#xff0c;实际这是Qt有意为之&#xff0c;为的是跟系统保持一致。…

欺诈文本分类检测(十七):支持分类原因训练

1. 引言 前文数据校正与增强进行了数据增强&#xff0c;本文将使用增强后的数据对模型进行进一步训练&#xff0c;以便得到能同时预测出分类标签、欺诈者、分类原因多个信息的模型。 为此&#xff0c;我们需要对整个训练过程进行调整&#xff0c;包括&#xff1a; 交叉训练逻…

苹果端侧AI布局深度分析

苹果 - 国际巨头的端侧 AI布局 深度分析 1.1.1 苹果AI&#xff1a;模型侧&#xff1a;MM1 3月&#xff0c;苹果发布多模态大模型MM1&#xff0c;拥有高达300亿参数。MM1融合密集模型与MoE变体&#xff0c;涵盖300亿、70亿、30亿参数版。MM1预训练指标领先&#xff0c;在多个多…

ubuntu 安装k8s

#关闭 Swap 内存&#xff0c;配置完成建议重启一下 nano /etc/fstab #注释下面相似的一行 #/swapfile none swap sw 0 0 #重启 reboot#部属k8s apt update && apt install -y apt-transport-https 下载 gpg 密钥 curl https://mi…

基于SpringBoot+Vue的高校实习管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

一次眼睛受损然后恢复的过程

由于多年没有社交比较宅,多年长期盯着电脑和手机,没有保护好眼睛 之前早上醒来有一段时间我眼睛老是分泌各种乱起八遭的东西,导致我眼睛看不清, 2023年3月有天的早上,我又不小心眼睛揉出血了,出门上班路上的时候才知道有这个问题,第二天早上就挂了去了眼科,医生给我开了如下的药…

单细胞转录组|scATAC-seq 数据整合

引言 本文在此展示了如何将多个源自人类外周血单核细胞的单细胞染色质数据集进行整合。其中一个数据集是通过10x Genomics的多组学技术获得的&#xff0c;它涵盖了每个细胞的DNA可及性和基因表达数据。另一个数据集则是通过10x Genomics的单细胞ATAC测序(scATAC-seq)技术得到的…

Mybatis-Plus自动填充时间的配置类

引言&#xff1a;在现代软件开发中&#xff0c;数据库操作是不可或缺的一部分。为了确保数据的准确性和完整性&#xff0c;我们常常需要在数据库记录中添加时间戳&#xff0c;例如创建时间和更新时间。MyBatis-Plus作为一个流行的持久层框架&#xff0c;提供了灵活的机制来实现…

官方权威解读|CNAS-CL01计量溯源性部分解读,供CNAS软件测试实验室参考

CNAS-CL01《检测和校准实验室能力认可准则》是软件测试实验室申请CNAS资质&#xff0c;建设符合CNAS要求的实验室质量管理体系时必须要参考的一部强制性准则。CNAS-CL01一共分为五大核心部分&#xff1a;通用要求、结构要求、资源要求、过程要求和管理体系要求。前面的文章中我…

【零散技术】微信支付保姆教程(一)

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 微信支付十余年&#xff0c;早已成为国内必不可少的支付工具。但是开发对接中 繁杂的各类参数与文档&#xff0c;以及各种证书的申请&#xff0c;着实也成了不少开发者的噩梦&#xff0c;那么今天我们来看看&#xff0c;如何申…