APP下载

基于Leap Motion 和Unity3D 的体感游戏开发与集成

2015-07-13袁田琛胡新荣赵俭辉

电脑知识与技术 2015年13期
关键词:人机交互

袁田琛 胡新荣 赵俭辉

摘要:随着人机交互技术的发展,体感技术是当今游戏开发领域中的一个重要研究方向。Leap Motion是带有两个摄像头和其他传感器的体感控制器,能高精度实时检测手掌、手指的位置和速度等信息,为体感游戏应用开发提供了一种有效途径。本文以Unity3D游戏引擎开发第三人称射击游戏为例,采用Leap Motion控制器对游戏中的角色进行操作控制,包括用手势控制游戏角色的行走、瞄准、射击以及摄像机镜头的全方位移动等动作控制,摆脱了传统的键盘和鼠标操作,实现了Leap Motion控制器和Unity3D游戏引擎的交互式体感游戏的开发与集成。

关键词: 人机交互;Leap Motion控制器;Unity3D;体感游戏

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2015)13-0201-04

游戏和电脑动画是多媒体和虚拟现实技术中一个迅速发展的领域。市场调查发现,近年来,游戏在大众娱乐中所占的比例越来越大,其中手机游戏占有很大部分,其次是电脑中的网络游戏和单机游戏。然而,这些游戏在创造了很多经济价值和社会价值的同时也出现很多不利的一面,在这些游戏中,多数的设计需要游戏者沉溺其中,并投入很多时间和金钱,这在很大程度上影响了游戏者的正常生活和身体健康,因此利弊掺半的手机游戏设计和开发是许多人不赞成的。随着人机交互技术的发展,人机交互向着多元化、多功能的方向迈进,如语音识别、手势识别等更加接近人的自然行为将成为未来游戏发展的方向[1]。

作为一种新颖的交互式设备,Leap公司于2013年推出了Leap Motion双目体感摄像机,它依赖于内置双目相机和红外LED高精度地捕获、跟踪和分析手指和手的运动,再通过软件处理图像数据,将其转化为手势和触摸事件。目前国内展开的Leap Motion相关应用研究及开发的数量较少。在应用研究方面,陈童等人实现基于Leap Motion的中国古琴声画结合的交互设计,通过基于虚拟现实设备与手势识别技术的古琴音乐的虚拟演奏,真实表现了中国传统音画的意蕴与气韵,提供了更具视觉震撼力的古琴互动体验[2]。Leap Motion的功能有点类似Kinect,它能在PC及Mac上通过手势控制电脑,只需挥动手指即可浏览网页、阅读文章、翻看照片及播放音乐。Leap Motion在体感游戏领域有着自身的独特优势就是其高精度的手势识别。人与电脑间的开阔空间,现已成为双手和手指的舞台。不论他们的每一次移动多么细微,又或是多么大幅度,Leap Motion 控制器都能精确地追踪,从技术上说,这就是一个 8 立方英尺的可交互式 3D 空间,深度体现了人机交互的理念。 正因为Leap Motion能高精度实时检测、手掌、手指的位置和速度等信息,它为体感游戏应用开发提供了一种有效的技术途径[3]。

Unity3D不仅是一款单纯的游戏引擎,而且是涉及多种不同领域的一个跨平台的三维游戏与虚拟现实开发工具,该工具从一开始就被设计成易于使用的产品,包括用户界面、支持多脚本语言以及强大的物理引擎等特点,这些让Unity3D成为深受广大虚拟现实工程师欢迎的开发平台。Unity3D 支持众多领域的3D交互开发,主要包括游戏开发、增强现实、3D Web、建筑、时装、商品宣传等,所有领域的开发都支持跨平台发布,能在很短时间内开发出需要的产品,并且是最好的开发工具之一[4-5]。

截止目前,国内还未见将Leap Motion和Unity3D结合起来进行应用研究与开发方面的报道。本文以Unity3D游戏引擎开发第三人称射击游戏为例,采用Leap Motion控制器对游戏中的角色进行操作控制,包括用手势控制游戏角色的行走、瞄准、射击以及摄像机镜头的全方位移动等操控,从而摆脱键盘和鼠标操作,实现Unity3D游戏引擎和Leap Motion控制器的一种交互式游戏应用开发。首先介绍Leap Motion与Unity3D游戏引擎集成方法和Unity3D游戏场景、游戏角色的建模过程;然后,阐述Leap Motion与Unity3D体感游戏开发与集成步骤,最后给出相关的实验结果。

1 Leap Motion与Unity3D集成方法

Leap Motion系统是可以检测并跟踪手掌、手指和类似手指的物体,而且该控制器能在高精确度和高跟踪帧率下工作。这与Kinect将整个人视为控制器的设计理念有着本质上的区别。

不论是精确地模拟隔空取物,还是实现科幻电影中用手势去控制智能电脑、机器人的操作,无一不展现其强大。从Leap Motion设备中展现出的体感控制技术更为精准、稳定,基于Leap Motion的新应用和游戏在App Home上动态更新发布。

随着电脑的普及,人们对娱乐休闲的需求一直在增加,PC游戏的发展速度也不断加快,不少游戏开发平台应运而生。开发者渴望一款高效便捷的游戏引擎,Unity3D的及时出现满足了他们的期盼。功能完备的编辑器,更安全的编程方式,可实时编辑查看效果的功能,代码驱动的开发模式,良好的生态圈等使它成为了游戏开发平台中的佼佼者。

关于应用程序编程接口(API: Application Program Interface),Leap Motion提供良好的开发环境和Unity3D游戏引擎进行集成。Unity3D游戏引擎能通过Leap开发包(SDK: Software Development Kit)中提供的API与Leap Motion集成,Leap SDK支持 C++、C#、JavaScript 等程序设计语言,用Leap Motion控制器代替原有的鼠标和键盘,从而实现对Unity3D第三人称射击游戏的体感控制。Leap SDK提供两种API从Leap Motion服务中获取追踪数据,第一种是原生接口(Native Interface),第二种是网页套接字(Web Socket)。原生接口能让开发者创建新的Leap应用程序动态链接库(DLL: Dynamic Link Library)。网页套接字接口和JavaScript客户端库能方便便开发者创建基于Leap的应用程序[6]。

本文采用的是原生接口,其API由动态链接库(DLL)提供。该库能连接到Leap Motion服务,并为应用程序提供追踪数据,这里使用C#和Java绑定链接。

2 Unity3D游戏场景、游戏角色建模

Unity3D游戏场景、游戏角色建模主要内容如下:(1)将Maya中设计好的3D模型以FBX格式导出,3D模型具体制作过程此略,FBX格式文件导出时需检查法线是否正确、贴图是否完整等。(2)在Unity3D中建立地形、导入模型并将其摆放到合适的位置,布置好灯光、阴影以及天空盒。(3) 添加游戏角色、游戏管理模块、武器系统,进行相关设置。(4)添加第三人称摄像机,以便对游戏角色进行跟随。(5)所有参与运动的模型需添加各自的脚本代码并完成碰撞器的设置。具体建模过程见图1-图3所示。

这里以Unity3D游戏引擎开发一种第三人称射击游戏为例,采用Unity3D游戏引擎对游戏场景及游戏角色建模后,得到游戏场景全局视图如图4所示,游戏角色近景图如图5所示。

3 Leap Motion与Unity3D体感游戏开发与集成

当Leap Motion接入电脑的USB后,若采用Leap Motion作为人机交互设备,需要设置Leap Motion设备、修改游戏角色脚本代码、修改第三人称摄像机脚本以及Leap Motion操作可视化等,这样Leap Motion设备便可取代鼠标或键盘操作,从而借助Leap Motion体感设备用手势实现游戏角色的操控功能。为了实验Leap Motion与Unity3D的融合,需要将Leap Motion与Unity3D进行集成并添加相应的脚本代码。Leap Motion与Unity3D体感游戏脚本开发与集成步骤阐述如下。

步骤1:下载安装Leap SDK

Leap Motion提供了用于Unity3D的SDK,能使开发人员便捷地将Leap Motion设备集成到要开发的游戏应用程序中。Leap SDK下载安装成功后,需要检测其是否连接有效,可在Leap Motion App Home中运行一个简单的应用程序以检测Leap Motion设备是否连接至电脑。

步骤2:添加支持Leap Motion的DLL文件

在此步骤中,先查找SDK安装目录中关于Unity3D的examples文件夹,复制其assets目录中的plugins文件夹,plugins文件夹中包含了Leap Motion设备接口的三个DLL文件,它们分别是leap.dll、leapCSharp.dll和leapCSharp.net3.5.dll,将plugins文件夹粘贴到Unity3D游戏工程的assets文件夹中;再查找script文件夹中的leap文件夹,复制LeapUnityExtensions.cs并将其粘贴到plugins文件夹中。

步骤3:编写LeapInput.cs C#脚本代码

为了编制LeapInput.cs C#脚本代码,这里给出了图6所示的Leap Motion三维XYZ坐标系和鼠标在屏幕中的XY坐标系。借助该图中的两个坐标系,可帮助我们理解作为主控制器的Leap Motion所实现的主要功能:

(1) Leap Motion体感交互中的归一化

Leap Motion控制游戏角色行走动作引入了交互盒类(Interaction Box),该类支持Leap Motion体感交互中的归一化操作,即将手掌原始空间坐标转换为游戏角色中的相对位置等效值。从编程角度而言,就是用交互盒类描述Leap Motion视野中的物体运动,将Leap Motion体感交互范围中的坐标归一化到[0,1]区间范围。具体来讲,在LeapInput.cs C#脚本代码中,若所设置的手掌消失范围在[-0.5,+0.5]区间外,返回值需进行换算,当返回值小于-0.5时返回-1 ,大于+0.5返回+1,其余情况返回0。

图7是图6中Leap Motion控制器X、Z轴所围成的平面XZ直角坐标系示意图。在该图XZ坐标系中,若坐标返回值valX=0、valZ=-1,那么游戏角色就向前移动(即向Z轴负方向移动);若坐标返回值valX=+1、valZ=-1,则游戏角色向右前方移动。这样,Leap Motion就可代替键盘的输入行为,从而用Leap Motion控制游戏角色的行走。

(2) Leap Motion对屏幕XY坐标系中鼠标移动的支持

为了控制第三人称摄像机,需要添加Leap Motion对屏幕XY坐标系中鼠标移动的支持功能(鼠标在屏幕中的XY坐标系见图6所示),它用于获取手掌的位置、方向,因此游戏玩家观察视角并非固定。移动手掌游戏玩家便能观察游戏场景中的上下左右四个方向。

(3) Leap Motion手势操控游戏角色

借助Leap Motion设备手势操控游戏角色中的瞄准、射击动作。当Leap Motion设备识别的手指数超过两只时(如手指叉开),脚本代码表示执行开火动作,当然也可设计为其他手势动作。当鼠标X轴正偏移值大于0.5、负偏移值小于0.25时,则开启持续瞄准模式,即表示枪的准心缩小、摄像机观察镜头放大一定倍数。

若手离开Leap Motion设备识别范围,则Leap Motion返回默认轴信息,游戏角色返回初始设定的Idle动画状态。

步骤4:修改游戏角色控制Java脚本代码

Leap Motion捕捉手的位置如图7所示X、Z轴的对应表示。在此步骤中,将游戏角色与Leap Motion绑定以实现角色移动,将所规定的手势(如瞄准、开火等手势动作)与Leap Motion绑定。

步骤5:添加Leap Motion关于第三人称摄像机的Java脚本代码

此步若设置了Leap Motion开关,则可用Leap Motion控制第三称摄像机。当游戏玩家处于无操作状态时,游戏角色将重置idle动画动作行为。

步骤6:Leap Motion操作可视化

这是Leap Motion集成及程序开发的最后步骤,此步中需添加可视化虚拟面板及其脚本代码,其主要目的是将Leap Motion操作可视化,操作游戏角色的各动作都将显示在可视化虚拟面板中。

可视化虚拟面板见图8所示。在图9中,(a)图是鼠标X、Y轴可视化虚拟面板,该面板中央的手掌图标用于显示第三人称摄像机的上下左右摆动;(b)图从左到右是Leap Motion键盘虚拟面板,分别表示游戏角色9个方向的运动(其中第五个为静止状态或者手离开状态)。

4 实验结果

本文硬件实验环境为:Intel第三代酷睿i7-3612@2.1GHZ四核CPU,4GB内存,NVIDIA GeForce 740M 2GB显卡,Leap Motion体感控制器。本文使用的软件开发工具为Unity3D 4.10,Autodesk Maya 2012, Adobe Photoshop CS6,MonoDevelp。软件开发工具中,MonoDevelp是一种开源代码开发环境,利用它可开发跨平台的应用程序。

软件硬件平台搭建成功后,便可按前面所述开发与集成方案设计并实现Leap Motion与Unity3D融合的体感游戏,我们设计实现的一种Leap Motion融合Unity3D操控第三人称射击游戏的典型实验过程截图见图9所示。

在图9中,(a)图表示手向前移动、游戏角色前进;(b)图表示手向后移动、游戏角色后退;(c) 图表示手向左和向右摆动,游戏角色执行向左和向右移动动作,第三人称摄像机随之转动;(d) 图表示手压低和抬高,第三人称摄像机向下和向上摆动;(e) 图表示手指叉开,Leap Mtion检测到手指数大于2时,执行开火动作;(f) 图表示手离开Leap Motion设备,Leap Motion返回默认轴信息,游戏角色返回初始设定的Idle动画状态并循环。

设备启动无异常,游戏场景数据读取调用正常,游戏视角可以通过手部动作来控制,游戏角色能正确执行行走、瞄准、开枪这些基本动作。从图9可以看出开发者借助Leap Motion能实现稳定地控制Unity3D第三人称射击游戏,表明Leap Motion与Unity3D游戏的结合从技术上是可行的。

在实验过程中,我们发现用手完成复杂的动作并不是一件容易的事情,毕竟只有一只手在完成原来两只手的键鼠操作。虽然Leap Motion能过滤细微的晃动,但是较久的保持手的悬空状态难免会发生少量的操作失误。

5结束语

本文完整阐述了融合Leap Motion体感控制器和Unity3D游戏引擎进行体感游戏的开发与集成技术。Leap SDK能使开发者方便地建立游戏的实时手势交互、创建出更多不同种类的游戏应用程序或其他应用程序。结果表明,采用Leap Motion与Unity3D游戏引擎相结合的方法进行游戏集成与软件应用开发具有较高的应用价值,对下一代体感游戏及其他虚拟现实应用软件开发提供了新的思路。

参考文献:

[1] 刘晋钢, 刘卫斌, 刘晋霞. Kinect与Unity3D数据整合技术在体感游戏中的应用研究[J]. 电脑开发与应用,2014, 27(11): 7-11.

[2] 陈童, 王妍, 赵琦. 基于LeapMotion的中国古琴声画结合交互设计研究[J]. 文艺评论, 2014(9): 77-81.

[3] 徐崇斌, 周明全, 沈俊辰,等. 一种基于Leap Motion的直观体交互技术[J]. 电子与信息学报, 2015, 37(2): 354-359.

[4] 郭海新. Unity3D与HTML交互机理研究[J]. 煤炭技术, 2011, 30(9): 228-229.

[5] 曾勇. 基于Unity3D的挖掘机模拟训练系统研究[D]. 长安大学, 2013.

[6] Mischa Spiegelmock. Leap Motion Development Essentials. Published Packt Publishing Ltd., UK., 2013.

猜你喜欢

人机交互
某型柴油机虚拟维修系统研究
基于虚拟现实技术的九江城市交通事故模拟系统设计
人机交互课程创新实验
基于任务规划的家庭仿真服务机器人的研究
多点噪声远程自动采集系统设计
基于智能手机的盲人语言应用软件的设计与开发
基于Intel Realsense技术的感知展示系统的设计与开发
图像处理耦合模板定位的答题卡识别研究与应用
数字化控制系统人机交互的特征及预防人因失误策略
基于物联网家居安防系统的设计