安卓与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中弹出提示,标识通信成功

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


相关文章
|
1月前
|
Android开发
Android JNI与CAN通信遇到的问题总结
Android JNI与CAN通信遇到的问题总结
51 1
|
1月前
|
Android开发
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
216 0
|
9月前
|
存储 网络协议 物联网
Android集成MQTT教程:实现高效通信和实时消息传输
Android集成MQTT教程:实现高效通信和实时消息传输
1049 0
|
9月前
|
数据采集 开发工具 图形学
Android平台实现Unity3D下RTMP推送
像Unity3D下的RTMP或RTSP播放器一样,好多开发者苦于在Unity环境下,如何高效率低延迟的把数据采集并编码实时推送到流媒体服务器,实现Unity场景下的低延迟推拉流方案。
117 0
|
1月前
|
Java 物联网 Linux
Android硬件通信之 串口通信
Android硬件通信之 串口通信
21 0
|
1月前
|
数据采集 编解码 图形学
Android平台Unity下如何通过WebCamTexture采集摄像头数据并推送至RTMP服务器或轻量级RTSP服务
Android平台Unity下如何通过WebCamTexture采集摄像头数据并推送至RTMP服务器或轻量级RTSP服务
155 0
|
9月前
|
监控 网络协议 Java
Android中使用JT808协议进行车载终端通信的实现
Android中使用JT808协议进行车载终端通信的实现
106 0
|
9月前
|
图形学 Android开发
Unity打包安卓报http请求错误
Unity打包安卓报http请求错误
95 1
|
8月前
|
设计模式 网络协议 Java
《移动互联网技术》 第十章 系统与通信: 掌握Android系统的分层架构设计思想和基于组件的设计模式
《移动互联网技术》 第十章 系统与通信: 掌握Android系统的分层架构设计思想和基于组件的设计模式
77 0
|
9月前
|
开发工具 图形学 Android开发
Windows/Android/IOS平台如何在Unity3d播放RTSP/RTMP流
如果基于Unity3d完全重新开发一个播放器,代价大,周期长,不适合快速出产品,最好的方式就是集成现有Native平台上成熟稳定播放器.
121 1