我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Unity与Android交互通信

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Unity与Android交互通信

前言

最近在研究Unity与Android通信的方法,网上也看了很多相关帖子,记录一下自己的研习所得,如有所言不到之处欢迎指正。

软件版本

1.Android Studio 3.4.1

2.Unity 2018.4.0f1

流程

1.打开Android Studio,创建一个新项目。

2.选择Empty Activity,点击Next

3.项目配置界面:

Name:项目名称

Package name:包名

Save location:项目路径(注意不要有中文)

Minimum API level:支持最低Android 版本(根据自己项目需求定)

点击Finish

 4.项目结构目录如图所示:

5.创建一个新的模块:右键app -> New -> Module(弹出Create New Module界面)

6.选择Android Library,点击Next

7.修改模块的名字:MyFirstLibrary,包名可以不用修改,点击Finish

8.完成之后出现如下新的模块:myfirstlibrary

9.双击打开app目录下的manifests文件夹下的AndroidManifest.xml文件,并把内容复制到myfirstlibrary目录下的manifests文件夹下的AndroidMainfest.xml文件中,如下图会有一些错误,先不用管。

10.右键com.shuo.myfirstlibrary -> New -> Java Class,创建新的类

11.Name:CustomActivity(任意名字),点击OK

12.左侧目录结构会出现一个CustomActivity文件,同时右侧会自动打开此文件

13.接下来导入Unity的Class.jar包,找到Unity版本的安装路径,打开到如下文件夹(可能Unity安装的版本/位置不一样,路径会有差异)

14.这里有两个文件夹,我们打开Unity,打开Player Setting界面,如下ScriptingBackend选项:Mono/IL2CPP两个选项,设置自己需要的,这里我用默认的Mono

15.我们再回到刚才的路径下面,根据自己的设置选择正确的路径,我选择mono下的classes.jar,复制

16.回到Android Studio 项目,点击Android -> Project,切换到Project目录

17.在myfirstlibrary下面有一个libs文件夹,右键Paste,把刚刚的classes.jar复制过来,弹出一个Copy视图框,点击OK

18.在刚刚导入的classes.jar文件右键Add As Library...,在弹出的Create Library视图框选择myfirstlibrary,点击OK

19.打开CustomActivity,做如下修改:


package com.shuo.myfirstlibrary;
import android.os.Bundle;
import android.widget.Toast;
import com.unity3d.player.UnityPlayerActivity;
import com.unity3d.player.UnityPlayer;
public class CustomActivity extends UnityPlayerActivity {
    
    private final static String UNITY_GAMEOBJECT = "AndroidPlugin";
    
    private final static String UNITY_FUNCTION = "GetMessageFromAndroid";
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
    }
    
    private void ReceiveMessageFromUnity(String message){
        //一个信息提示框
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
        SendMessageToUnity("这是一个Android返回的信息内容!");
    }
    
    private void SendMessageToUnity(String message){
        UnityPlayer.UnitySendMessage(UNITY_GAMEOBJECT,UNITY_FUNCTION,message);
    }
}

20.打开myfirstlibrary目录下的manifests文件夹下的AndroidMainfest.xml文件,做如下修改:

21.选择myfirstlibrary文件夹,菜单栏Build -> Make Module 'myfirstlibrary',等待build完成

22.按照如下目录,找到myfirstlibrary-debug.aar文件,右键Show in Explorer

23.打开文件夹,找到myfirstlibrary-debug.aar文件,修改后缀名为myfirstlibrary-debug.rar,并解压缩出来

24.打开myfirstlibrary-debug文件夹,里面的目录结构如下,我们只需要classes.jar和AndroidManifest.xml文件

25.打开Unity,创建Plugins文件夹,并创建Android子文件夹,在Android文件夹里面创建libs文件夹,并分别把AndroidManifest.xml文件拖入Android,把classes.jar拖入libs文件夹

26.在Unity中创建如下:

AndroidPlugin:空Game Object就行,用来接收从Android返回过来的消息,名字必须与AndroidStudio项目中的名字一致。

Button_SendMessage:点击发送消息到Android的按钮。

Text_ReceiveMessage:接收Android返回过来的消息并显示。

27.新建脚本Game Manager,并挂到AndroidPlugin上面,代码如下


using UnityEngine;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
    public Text Text_ShowMessage;
    /// 
    /// 外部按钮调用
    /// 
    public void SendMessageToAndroid()
    {
        AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject javaObject = javaClass.GetStatic("currentActivity");
        //此处"ReceiveMessageFromUnity"必须与AndroidStudio项目中的方法名字一致
        javaObject.Call("ReceiveMessageFromUnity", "这是一个从Unity发送的消息内容!");
    }
    /// 
    /// 接收Android返回的消息方法,必须与AndroidStudio项目中的名字一致
    /// 
    /// 
    public void GetMessageFromAndroid(string message)
    {
        Text_ShowMessage.text = message;
    }
}

28.Button_SendMessage按钮添加点击事件(GameManager.SendMessageToAndroid),把Text_ReceiveMessage拖入GameManager中,如下图

29.打包apk,包名/项目名自己按规定设置,最后进行真机测试,如下发送和接收消息都正常

项目链接

https://github.com/YangGuangShuo/MyFirstUnity2Android

结语

此篇文章只是个人见解,如有任何问题,可在下方留言。


作者:朔__朔


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Unity与Android交互通信

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Unity与Android交互通信

前言 最近在研究Unity与Android通信的方法,网上也看了很多相关帖子,记录一下自己的研习所得,如有所言不到之处欢迎指正。 软件版本 1.Android Studio 3.4.1 2.Unity 2018.4.0f1 流程 1.打开A
2022-06-06

Android Studio 与 Unity 的交互——加载 Unity 导出的工程到 Android Studio 中

版本信息 Android Studio:(Android Studio-Help-About)ok啦! 测试一下效果:主要参考: 在android原生项目中嵌入unity项目的方法(AndroidStudio3)作者:Explorerli
2022-06-06

android与H5交互

今天来记录一下关于android与h5交互的内容 满足日常需求,带参数传值的,我也是业务中的需求,解决了问题决定记录一下~ 声明:都可以复制直接拿来用的~ public class MainActivity extends AppCompa
2022-06-06

iOS与Unity交互笔记之参数传递

1. 调用方法一 Unity调方法传参,有返回值// Unity代码 [DllImport("__Internal")] // 给iOS传string参数,有返回值,返回值通过iOS的return方法返回给Unity private sta
2022-05-22

Android webview与js的数据交互

项目要用到Webview和js交互,查了查以前的项目感觉还是有必要整理下的。 简单描述下项目中用到的地方,比如说在web页需要用到登录的地方点击登录跳转到APP原生登录界面去登录,点击web页的拨打电话弹出原生dialog询问是否拨打,点击
2022-06-06

Android总结之WebView与Javascript交互(互相调用)

前言:最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App、Web App、Hybrid App三种方式,个人觉得目前以Hybrid App居多,单纯的数据展示我们直接采用
2022-06-06

Android WebView上实现JavaScript与Java交互

其实webview加载资源的速度并不慢,但是如果资源多了,当然就很慢。图片、css 、js 、html这些资源每个大概需要10-200ms ,一般都是30ms就ok了。不过webview是必须等到全部资源都完成加载,才会进行渲染的,所以加载
2022-06-06

Android Fragment与Activity之间的相互通信实例代码

Android Fragment与Activity之间的相互通信 前言自从Android3.0引入Fragment之后,主要是为了支持动态灵活的界面设计和屏幕的适配问题。Fragmenty不能单独存在,必须依赖Activity作为视图展示的
2022-06-06

android与js交互的方法是什么

Android与JS交互的方法有多种,以下是其中一些常用的方法:1. 使用WebView:Android中的WebView组件可以加载显示网页,并且提供了与JS交互的方法。通过WebView的addJavascriptInterface()
2023-09-21

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录