Android与Unity的交互方式

  1. Unity做好功能之后提供classes.jar文件,导入到Android Studio中进行之后的功能开发。最后由Android Studio打包APK。

  2. Android Sutido做好项目导出jar或aar包,导入到Unity中作为Unity的插件使用,最后由Unity打包APK

    Android开发主要采用第一种方式,由Android方来打包apk

使用方法

简单来说,跟Android与js交互很像,都是定义好相同名字的方法互相调用

  • 约定好相互调用的方法之后,由Unity编写代码,并导为出Android Library

  • 这个Library中会包含所需的so库,assets,最主要的是lib下的class.jar,与Android交互主要就是使用这个类中的方法

  • Android方面直接引用这个Library库即可

  • Android调用Unity,拿到类UnityPlayer(Library库中自动生成的方法位于class.jar中),调用约定要好的方法

mUnityPlayer.UnitySendMessage("Manager", "Manager", str); 三个参数依次是 Unity中交互脚本所挂的对象、需要调用的方法、方法里需要传递的参数

Unity调用Android,约定好调用那个类中的什么方法,以及方法的参数,是否有返回值等

如下示例,就是调用com.unity3d.player.UnityPlayer类中的ShowRedPacket方法(无参数,无返回值)

AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("ShowRedPacket"); Android中定义相应的方法,执行操作:public void ShowRedPacket() {Log.e(TAG,"ShowRedPacket所在线程:"+Thread.currentThread().getName());//这里的线程是Unity main线程,需要转换到android的主线程中操作自己的业务逻辑runOnUiThread(new Runnable() {@Overridepublic void run() {showMyDialog();}});}

注:

  • AndroidJavaClass 代表一个Java类, 例如 com.nobo.unity包下有个Util类 有一个静态方法 checkPermission()

    可以这样调用new AndroidJavaClass(“com.nobo.unity.Util”).callstatic(“checkPermission”);就相当于Util.checkPermission()


  • AndroidJavaObject 代表一个java对象, 例如com.nobo.unity.Util, 有一个构造函数Util(String name, int age), 有一个方法checkPermission()

    可以new AndroidJavaObject(“com.nobo.unity.Util”,“wilfried”,18).call(“checkPermission”), 就相当于 new Util(“wilfried”,18).checkPermission();

缺点

  • 启动unity动画时可能会很耗时,但是Unity在导出的时候可以设置启动unity时的loading动画,应该可以规避此问题
  • 对手机性能影响比较大
  • UnityPlayer.quit()调用的时候会杀死当前进程,所以我们需要为界面创建新的进程
  • android为Unity定义的方法,被调用的线程不是android的主线程,如果需要操作UI需切换到主线中进行操作

参考文献

android与Unity3d交互
关于Unity和Android交互的那些坑
Unity3D研究院之与Android相互传递消息(十九)
Android与Unity交互以及各种踩的坑
bilibili视频讲解

Demo示例

UnityDemo

Android与Unity的交互相关推荐

  1. Android 与 Unity(随笔录)

    前言 最近换了工作,公司是做康复领域的,由于项目需求需要,Android产品中必须加入VR元素,将虚拟场景与Android融合,打造一个用户满意的产品. 本人是做Android开发的,思考的是把Uni ...

  2. Android与Unity交互及手机震动控制

    背景 Unity开发过程中,自身提供的API或方案无法满足需求时,就需要Android工程交互通信.网络上交互方案很多,通常为jar包和aar包,经过对比本人采用aar包来实现,过程相对简单. Uni ...

  3. Unity Android 之 Unity Android 交互(aar形式)动态申请权限功能实现(权限可人为怎加删减,并含代码工程)

    Unity Android 之 Unity Android 交互(aar形式)动态申请权限功能实现(权限可人为怎加删减,并含代码工程) 目录

  4. 【Unity3D学习记录#2】Android调用Unity界面 与 信息交互

    [Unity3D学习记录#2]Android调用Unity界面 与 信息交互 Android 调用 Unity Unity项目构建 Android项目构建 Android 与 Unity 的信息交互 ...

  5. 客户端相关知识学习(三)之Android原生与H5交互的实现

    Android原生与H5交互的实现 H5调用原生的方式 方式可能有多种,根据开发经验,接触过两种方式. 方法一:Android向H5注入全局js对象,也就是H5调Android 1.首先对WebVie ...

  6. Android与Js进行交互

    Android与JS进行交互主要依靠WebView,webView相当于一个桥梁来沟通两者. Android调用Js: 1.webView的loadurl()方法 互联网页面用:loadUrl(htt ...

  7. unity vr 交互_基于手动的VR / MR交互,用于删除实体

    unity vr 交互 Deleting an entity or closing an application is one of the most ubiquitous operations pe ...

  8. unity 全息交互ui_UI向3D投影全息界面的连续发展

    unity 全息交互ui The user interface has been natural in its evolution and strategically heading towards ...

  9. android 折叠式布局,Android卡片式折叠交互效果

    原标题:Android卡片式折叠交互效果 近日有报道称:在互联网共享单车最早起步的上海,目前有150万辆共享单车.迅猛的增速之下,上海市交通委紧急叫停,成为继杭州.广州等城市之后,国内又一个暂停新增投 ...

最新文章

  1. Compressive sensing
  2. 《Raspberry Pi用户指南》——导读
  3. SpringMVC 、Struts的区别
  4. 两种列式存储格式:Parquet和ORC
  5. 编程体系结构(01):Java编程基础
  6. 橱窗布置(信息学奥赛一本通-T1279)
  7. JAVA程序设计:接受数字并求和
  8. Kubernetes架构及相关服务详解
  9. Java基础学习总结(142)——以正确的姿势使用Java 8 Optional
  10. Python gmpy2 mpz Methods
  11. error LNK2005:错误改正方法
  12. 移动设备数据丢失恢复办法
  13. 云计算是用来做什么的
  14. 双线跟BGP线路区别
  15. 二次开发Spark实现JDBC读取远程租户集群Hive数据并落地到本集群Hive的Hive2Hive数据集成【Java】
  16. 基于百度AI平台Python实现人像动漫画
  17. python ppt 图片_python ppt 转 pdf 图片
  18. Mac ps 2021 3D功能无法使用问题,怎么办?
  19. CH9101芯片应用—硬件设计指南
  20. Nginx学习 ---- js胖笔记

热门文章

  1. 阿尔法蛋机器人tf卡_阿尔法蛋机器人哪款好适合几岁孩子,超能蛋早教机真实效果评测(价格309元)...
  2. 西游记中孙悟空的两位师父
  3. Android studio编译跑步运动app一个安卓的跑步软件实时记录速度,画出跑步路径, 管理跑步数据履历,查看数据详细等
  4. IE网页出现js错误修复方法_离水的鱼_新浪博客
  5. Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识
  6. 【PHP版】顺丰下单API 、查询订单API、取消订单API
  7. 学习笔记-应用编程与网络编程-2(文件属性+附代码)
  8. 我英语不好,能学会编程吗?你觉得呢 ?
  9. 乐乐音乐H5网页版-支持krc歌词(动感歌词、翻译和音译歌词)
  10. gitlab本地创建空文件,之后关联仓库提交文件,提交成功,但是gitlab网页中不会显示提交的文件