APP下载

AR开发中的Unity 3D与原生代码交互技术

2017-12-06魏三强

重庆理工大学学报(自然科学) 2017年11期
关键词:交互技术调用引擎

魏三强

(1.宿州职业技术学院 计算机信息系, 安徽 宿州 234101;2.中国矿业大学 信息与控制工程学院, 江苏 徐州 221116)

AR开发中的Unity3D与原生代码交互技术

魏三强1,2

(1.宿州职业技术学院 计算机信息系, 安徽 宿州 234101;2.中国矿业大学 信息与控制工程学院, 江苏 徐州 221116)

为了解决AR产品开发过程中Unity 3D与原生代码之间的交互问题,分别介绍了Unity 3D与Android原生代码、Unity 3D与iOS原生代码之间的交互技术。通过一个AR系统实例开发,应用图像识别、匹配和交互等技术实现了虚实结合的视觉体验效果。实验测试结果表明:系统运行稳定,效果逼真。说明运用Unity 3D与原生代码之间的交互技术,能够合理解决AR产品开发过程中Unity 3D与原生代码之间的交互问题。

AR; Unity 3D; Android原生代码; iOS原生代码; 交互

在AR(augmented reality,增强现实)产品的开发过程中,经常需要与系统原生代码进行相互调用。由于目前很多AR应用都是使用C#、JavaScript配合Unity 3D进行开发,而大部分传统应用都是使用原生语言开发,比如Android系统使用Java语言开发,而iOS系统使用Objective-C或Swift进行开发[1]。在国内一些AR产品开发实例中,林一[2]等提出了一套基于心智模型VR与AR混合式移动导览系统;上官大堰[3]等进行了基于Android平台的Unity 3D网络功能的开发;于意[4]设计与实现了一个基于iOS移动平台的Unity 3D幼儿认知游戏;李智鹏[5]设计并实现了一个基于Unity 3D引擎的空中战机游戏;邓增强[6]等使用Unity 3D引擎开发了一款 3D街机游戏,实现了Unity 3D与Android之间的数据交互。在以上AR系统开发实践中,不可避免地需要在Unity 3D中调用Android原生接口,或从Objective-C给Unity 3D接口发送消息。鉴于此,本文拟对AR产品开发中的Unity 3D与Android、iOS原生代码之间的交互技术进行研究,以期合理解决AR产品开发过程中Unity 3D与原生代码之间的交互问题。

1 预备知识

1.1 AR增强现实

增强现实简称AR,是一种实时计算摄像机捕捉到的现实影像的位置及角度并加上相应虚拟信息的技术。它不仅能够展现真实世界的信息,还能够通过增加虚拟信息而对现实世界进行增强,AR系统结构图如图1所示。AR系统中的交互方式主要有基本命令式交互、双手交互、多通道交互、特殊工具的交互等方式[7]。AR可应用于游戏、军事、医疗、教育、文物古迹保护、旅游、工业等众多领域[8],随着硬件性能的不断提升和软件解决方案的日趋成熟,AR产品将越来越多地走入人们的视线。

1.2 Unity 3D游戏引擎

Unity 3D是由Unity Technologies公司开发的一个专业游戏引擎,它让玩家能够轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具如图2所示[9]。

图1 AR系统结构图

图2 Unity 3D开发环境

使用Unity 3D开发的游戏不计其数,其中比较经典的网页游戏如坦克英雄、魔晶星球、木乃伊和极限摩托车等,手机游戏如失落帝国、战舰少女、全民炫舞和出租车司机等,单机游戏如轩辕剑六、御天降魔传和金庸群侠传等。目前,Unity 3D已经成为开发AR项目的主流引擎[9-10]。

2 Unity 3D与原生代码之间的交互

2.1 Unity 3D与Android原生代码之间的交互

Android开发环境主要是Eclipse和Android Studio,本小节内容主要是在Eclipse下配置好Android开发环境(包括下载和安装JDK并配置环境变量,下载和安装Android SDK并在Eclipse中配置并指定Android SDK)。在开发环境配置完成后,新建一个Android工程,将Unity 3D工程导出为Android工程,用Eclipse打开从Unity 3D导出的工程,该工程中有UnityPlayerActivity.java这个文件,它是进行Unity 3D与Android互通的关键所在。接着,在Unity的3D界面前添加一个Android原生界面,主要包括以下几个步骤[11]。

1) 创建新的文件Activity,核心代码如下:

public class MainMenuActivity extends Activity

{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

this.setContentView(R.layout.mainmenu);

Button btn=(Button)this.findViewById(R.id.startButton);

//用该语句为按钮添加一个点击事件,并且将它切换至Unity 3D的Activity

btn.setOnClickListener(new OnClickListener( ) {

@Override

Public void onClick(View v) {

Intent it=new Intent( );

it.setClass(MainMenuActivity.this,UnityPlayerActivity.class);

MainMenuActivity.this.StartActivity(it);

}

});

}

}

2) 创建原生界面布局文件mainmenu.xml,核心代码如下:

android:layout_wideth=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”

猜你喜欢

交互技术调用引擎
体感交互技术在脑卒中康复中的应用
虚拟交互技术系统的优势与应用分析
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
智能语音交互技术在媒体的应用和前景
VR交互技术在中小学拓展课程中的应用
蓝谷: “涉蓝”新引擎
基于系统调用的恶意软件检测技术研究
无形的引擎
基于Cocos2d引擎的PuzzleGame开发