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

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

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

c# 复制代码
public TextMeshProUGUI text1 = null;

然后把这个Text拖动到Main CameraCamera Controller脚本的text1变量上,让TextCamera Controller关联起来

2.4 在Unity中调用Android方法

Camera Controller脚本的Start方法中,我们增加如下代码

c# 复制代码
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的方法

C# 复制代码
AndroidJavaClass javaclass = new AndroidJavaClass("com.heiko.mylibrary.MyTest");
AndroidJavaObject javaObject = new AndroidJavaObject("com.heiko.mylibrary.MyTest");
  • javaclass.CallStatic : 调用静态方法
C# 复制代码
string log = javaclass.CallStatic<string>("getLog");
javaclass.CallStatic("setLog", "NewLog");
  • javaclass.SetStatic: 设置静态变量
C# 复制代码
javaclass.SetStatic("LOG", "FiledLog");
  • javaObject.Call:调用方法
C# 复制代码
string name = javaObject.Call<string>("getName");
javaObject.Call("setName", "zhk");
  • javaObject.Set:设置变量
C# 复制代码
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

相关推荐
似霰20 分钟前
安卓adb shell串口基础指令
android·adb
Quz1 小时前
使用Qt Quick Controls创建自定义日历组件
qt·ui·交互
fatiaozhang95272 小时前
中兴云电脑W102D_晶晨S905X2_2+16G_mt7661无线_安卓9.0_线刷固件包
android·adb·电视盒子·魔百盒刷机·魔百盒固件
CYRUS_STUDIO4 小时前
Android APP 热修复原理
android·app·hotfix
鸿蒙布道师4 小时前
鸿蒙NEXT开发通知工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
鸿蒙布道师4 小时前
鸿蒙NEXT开发网络相关工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
大耳猫4 小时前
【解决】Android Gradle Sync 报错 Could not read workspace metadata
android·gradle·android studio
ta叫我小白4 小时前
实现 Android 图片信息获取和 EXIF 坐标解析
android·exif·经纬度
dpxiaolong6 小时前
RK3588平台用v4l工具调试USB摄像头实践(亮度,饱和度,对比度,色相等)
android·windows
是阿根6 小时前
unity使用iTextSharp生成PDF文件
unity·c#·游戏引擎