1、AR 开发中的 Unity 3D 与原生代码交互技术 魏三强 宿州职业技术学院计算机信息系 中国矿业大学信息与控制工程学院 摘 要: 为了解决 AR 产品开发过程中 Unity 3D 与原生代码之间的交互问题, 分别介绍了 Unity 3D 与 Android 原生代码、Unity 3D 与 i OS 原生代码之间的交互技术。通过一个 AR 系统实例开发, 应用图像识别、匹配和交互等技术实现了虚实结合的视觉体验效果。实验测试结果表明:系统运行稳定, 效果逼真。说明运用Unity 3D 与原生代码之间的交互技术, 能够合理解决 AR 产品开发过程中 Unity 3D 与原生代码之间的交互问题。关
2、键词: AR; Unity 3D; Android 原生代码; iOS 原生代码; 交互; 作者简介:魏三强 (1980) , 男, 安徽宿州人, 博士研究生, 副教授, 主要从事云计算、动漫制作技术、VR 与 AR 技术研究, E-mail:。收稿日期:2017-06-08基金:国家自然科学基金资助项目 (61572036) Interaction Techniques Between Unity 3D and Native Code in AR DevelopmentWEI Sanqiang Department of Computer and Information, Suzhou Vo
3、cational and Technological College; Abstract: In order to solve the interaction between Unity 3D and native code in the process of AR product development, the interaction between Unity 3D and Android native code, Unity 3D and iOS native code is introduced. The application of image recognition, match
4、ing and interaction techniques to achieve the visual experience effect of combination of virtuality and reality through an example of AR system development. The experimental results show that the system runs stably and the effect is vivid.Explains the interaction between Unity 3D and native code, wh
5、ich can reasonably solve the interaction between Unity 3D and native code in the process of AR product development.Keyword: AR; Unity 3D; Android native code; iOS native code; interaction; Received: 2017-06-08在 AR (augmented reality, 增强现实) 产品的开发过程中, 经常需要与系统原生代码进行相互调用。由于目前很多 AR 应用都是使用 C#、Java S-cript
6、 配合 Unity 3D 进行开发, 而大部分传统应用都是使用原生语言开发, 比如Android 系统使用 Java 语言开发, 而 i OS 系统使用 Objective-C 或 Swift 进行开发1。在国内一些 AR 产品开发实例中, 林一2等提出了一套基于心智模型 VR 与 AR 混合式移动导览系统;上官大堰3等进行了基于 Android 平台的Unity 3D 网络功能的开发;于意4设计与实现了一个基于 i OS 移动平台的Unity 3D 幼儿认知游戏;李智鹏5设计并实现了一个基于 Unity 3D 引擎的空中战机游戏;邓增强6等使用 Unity 3D 引擎开发了一款 3D 街机游
7、戏, 实现了Unity 3D 与 Android 之间的数据交互。在以上 AR 系统开发实践中, 不可避免地需要在 Unity 3D 中调用 Android 原生接口, 或从 Objective-C 给 Unity3D 接口发送消息。鉴于此, 本文拟对 AR 产品开发中的 Unity 3D 与 Android、i OS原生代码之间的交互技术进行研究, 以期合理解决 AR 产品开发过程中 Unity 3D 与原生代码之间的交互问题。1 预备知识1.1 AR 增强现实增强现实简称 AR, 是一种实时计算摄像机捕捉到的现实影像的位置及角度并加上相应虚拟信息的技术。它不仅能够展现真实世界的信息, 还能
8、够通过增加虚拟信息而对现实世界进行增强, AR 系统结构图如图 1 所示。AR 系统中的交互方式主要有基本命令式交互、双手交互、多通道交互、特殊工具的交互等方式7。AR 可应用于游戏、军事、医疗、教育、文物古迹保护、旅游、工业等众多领域8, 随着硬件性能的不断提升和软件解决方案的日趋成熟, AR 产品将越来越多地走入人们的视线。1.2 Unity 3D 游戏引擎Unity 3D 是由 Unity Technologies 公司开发的一个专业游戏引擎, 它让玩家能够轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具如图 2 所示9。图 1 AR 系统结构
9、图 下载原图图 2 Unity 3D 开发环境 下载原图使用 Unity 3D 开发的游戏不计其数, 其中比较经典的网页游戏如坦克英雄、魔晶星球、木乃伊和极限摩托车等, 手机游戏如失落帝国、战舰少女、全民炫舞和出租车司机等, 单机游戏如轩辕剑六、御天降魔传和金庸群侠传等。目前, Unity 3D 已经成为开发 AR 项目的主流引擎9-10。2 Unity 3D 与原生代码之间的交互2.1 Unity 3D 与 Android 原生代码之间的交互Android 开发环境主要是 Eclipse 和 Android Studio, 本小节内容主要是在Eclipse 下配置好 Android 开发环境
10、 (包括下载和安装 JDK 并配置环境变量, 下载和安装 Android SDK 并在 Eclipse 中配置并指定 Android SDK) 。在开发环境配置完成后, 新建一个 Android 工程, 将 Unity 3D 工程导出为 Android 工程, 用 Eclipse 打开从 Unity 3D 导出的工程, 该工程中有 Unity Player Activity.java 这个文件, 它是进行 Unity 3D 与 Android 互通的关键所在。接着, 在 Unity 的 3D 界面前添加一个 Android 原生界面, 主要包括以下几个步骤11。1) 创建新的文件 Activi
11、ty, 核心代码如下:2) 创建原生界面布局文件 mainmenu.xml, 核心代码如下:3) 在 Android Manifest 文件中设置原生 Activity 为启动界面。让 App 的启动界面为 Android 原生界面, 然后跳转到 Unity 3D 界面。接下来, 实现从 Unity 3D 界面跳转到 Android 原生界面的功能。4) 在 Unity 3D 中创建场景, 并添加一个“Back”按钮, 如图 3 所示。图 3 添加“Back”按钮 下载原图5) 创建 Game.cs 脚本, 并添加以下代码:6) 在 Unity Player Activity 中添加 Back
12、 To Menu 函数, 在该函数中调用切换界面功能 (核心代码如下) 。至此, 实现了 Unity 3D 代码与 Android 原生代码之间的交互功能。2.2 Unity 3D 与 i OS 原生代码之间的交互在软件开发实践中, 经常会遇到此类问题:在一个使用源生代码开发的 i OS 应用中需要加入 AR 的场景功能。不可能在 Unity 3D 中重新做一遍, 这既没有必要也不容易实现, 因此需要在 i OS 原生代码开发的工程中调用 Unity 3D 中制作好的 AR 场景, 即实现 Unity 3D 与 i OS 原生代码之间的相互调用。实现 Unity 3D 与 i OS 原生代码之
13、间的交互功能, 需要在 i OS 原生的工程中加入一个 Unity 3D 的 Vuforia 工程, 主要的技术流程是:首先在导出 Unity 3D 工程中设置 I12cpp, 支持 Target i OS Version 8.0, 然后根据从 Unity 3D 导出的 Xcode 工程, 设置 Native Xcode 工程, 接着将 Unity 3D 的工程代码导入Native, 最后在 main.mm 方法中改变程序入口, 来回切换 Unity 3D 视图和原生视图11。相对于 i OS 而言, Android 在我国占有更大的市场份额, 故本文的研究以Android 为主, Unity
14、 3D 与 i OS 原生代码之间具体的交互方法和调用技术不再详述, 下一小节将通过一个具体的 AR 开发实例, 论述 Unity 3D 与 Android 原生代码之间的交互技术及应用。3 基于 Unity 3D 与 Android 原生代码交互技术的 AR 开发实例3.1 系统总体设计本开发实例为基于 Unity 3D 与 Android 原生代码交互技术的 AR 系统。其开发思路是通过图像识别、匹配和 Unity 3D 交互等技术的应用, 处理用户移动设备 (如智能手机、平板电脑等) 的摄像头所捕捉的真实图像, 使其和虚拟的 3D 物体相结合, 最终实现虚实结合的视觉体验效果。本系统的结
15、构见图 412。图 4 系统结构 下载原图本系统的主要功能通过 Unity 3D 实现, 系统之间的调用即按照 2.1 小节所阐述的 Unity 3D 与 Android 原生代码之间的交互方法来实现。使用调用函数能够在Unity 3D 中直接获取智能手机等移动设备的摄像头实例, 并获取摄像头拍摄到的图像数据 (如图 5 所示) 。图 5 获取图像 下载原图3.2 系统开发与实现本系统采用 C#和 Java 语言为开发语言, 基于 Android 平台, 采用 Windows XP (或 Windows7) 操作系统, 以 C/S 作为软件架构, 使用的插件有 Tool Kit2D、NGUI
16、和 Vuforia QCAR, 使用的主要开发工具有 Unity 3D、Eclipse、JDK 和 Android SDK 等。在开发环境和项目搭建完成后, 在本系统的项目中导入待检测的目标对象包, 并在.xml 文件中保存这些目标图像的信息, 核心代码如下12-14:对 ARCamera 进行设定后, 需匹配的目标图像和检测到目标图像后执行的操作通过 Image Target 设置。最后, 用户智能手机终端能显示经过目标的检测、图像匹配与虚实融合的图像数据12, 如图 6 所示。通过多角度观测虚实结合效果的实验测试, 结果表明:本系统可以成功识别目标图片, 并将 3D 虚拟信息叠加到图片上,
17、 当目标图片的位置、角度发生变化时12, 能很好地识别并将虚拟信息融合到真实场景中, 且系统运行稳定, 效果逼真 (如图 7 所示) 。图 6 AR 系统场景 下载原图图 7 AR 系统实验测试 下载原图4 结束语当下 AR 技术还处于发展的起步阶段, 大多数 AR 应用都在智能手机上运行, 通过图像识别、匹配及处理等技术实现简单的增强现实效果, 其采用的解决方案多是利用 Unity 3D 等游戏引擎配合 AR SDK 进行开发, 且不可避免地需要灵活应用 Unity 3D 与 Android、i OS 原生代码之间的交互技术。下一步工作将深入探讨和实践使用 Hi AR SDK 开发 AR 应
18、用, 使得在 Unity 3D 引擎中开发的 AR 应用很容易地移植到 Android 和 i OS 平台上。参考文献1黄薇.Unity 引擎方式下 3D 对战型游戏的网络设计与开发J.现代电子技术, 2015, 38 (23) :118-121. 2林一, 陈靖, 刘越, 等.基于心智模型的虚拟现实与增强现实混合式移动导览系统的用户体验设计J.计算机学报, 2015, 38 (2) :408-422. 3上官大堰, 黄心渊, 孙望舒, 等.基于 Android 平台的 Unity 3D 网络功能的开发J.计算机应用与软件, 2015, 32 (8) :72-75. 4于意.基于 i OS 移
19、动平台的 Unity 3D 幼儿认知游戏的设计与实现D.北京:北京工业大学, 2015. 5李智鹏.基于 Unity 3D 引擎的空中战机游戏设计与实现D.长春:吉林大学, 2016. 6邓增强, 朱铮涛, 龙诗军.3D 街机游戏系统研究与应用J.电脑知识与技术, 2017, 13 (3) :202-205. 7王涌天, 陈靖, 程德文.增强现实技术导论M.北京:科学出版社, 2015. 8魏三强, 王兵.AR 技术在非物质文化遗产及文化旅游业中的应用J.江汉大学学报 (自然科学版) , 2016, 44 (4) :364-368. 9黄静.虚拟现实技术及其实践教程M.北京:机械工业出版社,
20、2016. 10HU H X, LU L U.Automatic functional testing of Unity3D game on Android platformC/Proceedings of 20163rd International Conference on Materials Engineering, Manufacturing Technology and Control (ICMEMTC2016) .Taiyuan, China, s.n., 2016:1136-1140. 11张克发, 赵兴, 谢有龙, 等.AR 与 VR 开发实战M.北京:机械工业出版社, 2016. 12李洁.基于 Android 平台的增强现实系统研究与应用D.保定:河北农业大学, 2015. 13魏琴芳, 李林乐, 张峰, 等.一种安卓系统手机恶意软件链接串行联合检测方法J.重庆邮电大学学报 (自然科学版) , 2017, 29 (2) :251-256. 14马卫.基于 Android 移动平台的研究J.计算机仿真, 2016, 33 (1) :218-222.