安卓与Unity通信(1)

简介: 通过导入Unity的classes.jar,继承unity的UnityPlayerActivity实现unity与安卓的交互

安卓与Unity通信(1)

通过导入Unity的classes.jar,继承unity的UnityPlayerActivity实现unity与安卓的交互

安卓

1.创建一个安卓空项目

我将其更名为unitytoandroid

记住选择的API等级,在unity中会用到,如图我用的是API21,Android5.0

网络异常,图片无法展示
|

创建好后,as默认打开是在Android结构下

网络异常,图片无法展示
|

我们将其切换到Project结构目录下

网络异常,图片无法展示
|

2.导入classes.jar

  1. 导入unity的jar包
    在unity的安装目录下找到classes.jar文件,并将其复制到as的libs文件下D:\Unity\UntiyDownLoad\2020.3.26f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
    网络异常,图片无法展示
    |

    网络异常,图片无法展示
    |

  2. 右键classes.jar,选择add as library,点击ok,完成classes.jar文件的导入
    网络异常,图片无法展示
    |

3、编写MainActivity

在MainActivity中编写通信代码,如果显示没有UnityPlayerActivity,则在unity的安装目录下D:\Unity\UntiyDownLoad\2020.3.26f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player找到UnityPlayerActivity.java这个类,这是因为在2019版以后的unity中UnityPlayerActivity.java不再放在classes.jar中

网络异常,图片无法展示
|

网络异常,图片无法展示
|

找到这个类之后将其放在com.example.unitytoandroid包目录下,与MainActivity同级

网络异常,图片无法展示
|

这样就不会再出现报错

网络异常,图片无法展示
|

然后在MainActivity中编写通信代码,

packagecom.example.unitytoandroid;

 

importandroidx.appcompat.app.AppCompatActivity;

 

importandroid.os.Bundle;

importandroid.util.Log;

 

publicclassMainActivityextendsUnityPlayerActivity {

 

   @Override

   protectedvoidonCreate(BundlesavedInstanceState) {

       super.onCreate(savedInstanceState);

 

   }

   

   //在unity中调用的测试方法,负责打印从unity中传来的字符串

   publicvoidTestAndroid(Stringval){

       Log.i("unity",val);

   }

}

4、src文件

把src文件下的所有文件删除,打开AndroidManifest.xml文件,删除当中的报错代码,有时也不会报错但也要删除否则在unity中运行时也会报错,删除后AndroidManifest.xml文件代码应如下

网络异常,图片无法展示
|

删除后AndroidManifest.xml文件<application>中应该只有两行代码

网络异常,图片无法展示
|

5、build.gradle文件

有三处要改

1、 将plugins {    id 'com.android.application'}更改为

plugins {

   id'com.android.library'

}

2、 并且删除applicationId "com.example.unitytoandroid"

3、 修改implementation files('libs\classes.jar')为compileOnly files('libs\classes.jar')

compileOnlyfiles('libs\\classes.jar')

6、Rebuild Project

在上方工具栏找到Build->Rebuild project,成功运行出来,我们便得到了aar文件

网络异常,图片无法展示
|

Unity

1、创建一个unity项目

创建一个Unity项目将其切换到安卓平台

网络异常,图片无法展示
|

2、添加app-debug.aar文件

把app-debug.aar文件添加到unity中,并将其解压获取AndroidManifest.xml文件,同样放在同级文件下

如果电脑没有解压aar格式的软件,可以复制一份aar文件,更改后缀名为zip然后解压,取出AndroidManifest.xml文件,双击打开可以查看AndroidManifest.xml文件里的内容

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

3、创建一个UI按钮

在unity中创建一个UI按钮,并编写一个脚本

网络异常,图片无法展示
|

网络异常,图片无法展示
|

usingSystem.Collections;

usingSystem.Collections.Generic;

usingUnityEngine;

 

publicclassTest : MonoBehaviour

{

   // Start is called before the first frame update

   voidStart()

   {

       

   }

 

   // Update is called once per frame

   voidUpdate()

   {

       

   }

 

   publicvoidTestAndroid()

   {

       AndroidJavaClassjc=newAndroidJavaClass("com.unity3d.player.UnityPlayer");

       AndroidJavaObjectjo=jc.GetStatic<AndroidJavaObject>("currentActivity");

       jo.Call("TestAndroid", "this is unity");

   }

}

 

将脚本挂在Button上

网络异常,图片无法展示
|

4、在unity里build

build之前要确保unity中API的等级设置要与AS中的一样

网络异常,图片无法展示
|

运行

在手机上点击按钮,as中弹出提示,标识通信成功

网络异常,图片无法展示
|


相关文章
|
6月前
|
Android开发
Android JNI与CAN通信遇到的问题总结
Android JNI与CAN通信遇到的问题总结
227 1
|
存储 网络协议 物联网
Android集成MQTT教程:实现高效通信和实时消息传输
Android集成MQTT教程:实现高效通信和实时消息传输
1870 0
|
6月前
|
Android开发
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
1230 0
|
数据采集 开发工具 图形学
Android平台实现Unity3D下RTMP推送
像Unity3D下的RTMP或RTSP播放器一样,好多开发者苦于在Unity环境下,如何高效率低延迟的把数据采集并编码实时推送到流媒体服务器,实现Unity场景下的低延迟推拉流方案。
162 0
|
2月前
|
Java Android开发 数据安全/隐私保护
Android中多进程通信有几种方式?需要注意哪些问题?
本文介绍了Android中的多进程通信(IPC),探讨了IPC的重要性及其实现方式,如Intent、Binder、AIDL等,并通过一个使用Binder机制的示例详细说明了其实现过程。
314 4
|
4月前
|
Java Android开发 Spring
Android Spingboot 实现SSE通信案例
【7月更文挑战第14天】以下是使用Android和Spring Boot实现SSE(Server-Sent Events)通信的案例摘要: 在`MainActivity`中: - 初始化界面元素并设置按钮点击事件。 - `startSseRequest`方法创建`WebClient`对象,设置请求头,发送请求,并处理响应和错误。 请确保将`your-server-url`替换为实际的服务器地址。
116 14
|
3月前
|
Android开发
Android项目架构设计问题之C与B通信如何解决
Android项目架构设计问题之C与B通信如何解决
17 0
|
3月前
|
移动开发 前端开发 weex
Android项目架构设计问题之模块化后调用式通信如何解决
Android项目架构设计问题之模块化后调用式通信如何解决
16 0
|
4月前
|
Dart Android开发 Windows
Flutter和Native 通信 android端
Flutter和Native 通信 android端
|
6月前
|
Java 物联网 Linux
Android硬件通信之 串口通信
Android硬件通信之 串口通信
109 0