APP下载

基于Leap Motion 的Unity3D 游戏操控

2022-07-08叶招娣陈海祺尹娅琳余小希郑誉煌

电子技术与软件工程 2022年8期
关键词:手部轮胎物品

叶招娣 陈海祺 尹娅琳 余小希 郑誉煌

(1.广东第二师范学院物理与信息工程学院 广东省广州市 510303)

(2.广东第二师范学院教务处 广东省广州市 510303)

随着近年来虚拟现实技术的迅猛发展,特别是与现实世界产生了越来越多的结合技术,它可以建立人工构造的三维虚拟环境,用户可以以自然地方式与虚拟环境中的物体进行交互作用、相互影响,帮助人类不断增强认识世界和适应世界的能力,尤其是当今疫情时代,虚拟现实技术的开发和利用帮助人们解决了教育、金融、医疗等各方面的问题。此外,游戏产业作为娱乐产业中的一员,在全世界得到飞速发展,而玩家在游戏过程中,对于游戏的操控性和游戏的代入感的需求也在不断地增加。其中,体感游戏是一种新颖的游戏类型,凭借它的可操控、可玩性和体验感越来越受许多玩家的喜爱。不论是国内还是国外,对于体感游戏的开发尚处于一个研究探索的阶段,还没有完整地开发技术。

基于上述研究背景,本文主要利用Unity3D 强大的游戏引擎和Leap Motion 体感控制的技术,研究从科普的视角建立一个基础修车过程游戏,利用3Dmax 三维建模软件,建立一个自行车维修的场景,构建自行车模型和工具模型并导入unity3D的游戏引擎中,在Leap Motion的手势识别功能下,共同打造基于体感交互技术的三维车辆维修的基础游戏,实现用户手部虚拟抓取物体等人机交互功能,推动体感游戏在国内的发展。

1 游戏整体设计

为了增进人们对车辆结构的了解,本游戏系统设计了一个基于Leap Motion 的Unity3D 的三维车辆维修游戏,该游戏的整体设计共由四部分组成。第一个是游戏的UI 设计,在游戏中添加UI 设计增加趣味交互性, UI 界面和游戏的交互模式是整个游戏系统的基础,游戏中的菜单需要用到UI界面进行实现。

第二个是本游戏的三维模型模块,本游戏利用Unity3D平台搭建一个车辆维修虚拟场景,利用unity 的Hierarchy 组件调节灯光的明暗以适应不同的玩家视角角度。我们使用3dmax 建构游戏核心模型自行车,自行车三维模型由导向系统、驱动系统、制动系统所组成。导向系统包括车把、前轴、前轮等,主要用来保持平衡和改变行驶方向;而驱动系统包括脚蹬、链条、飞轮、后轴等,主要用来驱动前进;制动系统主要有车闸,方便操纵车闸减速、停驶。 在场景的另外一个位置上,我们还设计了维修自行车所需要使用的一些工具,例如扳手、钳子、螺丝等等。

第三个模块就是利用Leap Motion 控制器的手势识别技术实现用户抓取物体的交互功能,Leap Motion 的抓取交互功能主要是在实时捕获的人手运动数据的基础上,驱动虚拟手部的变换动作,并根据虚拟手的动作状态与环境中待抓取对象的联系,判断是否满足抓取条件,进而实现对现实抓取动作的数字化仿真。在游戏中通过手势识别技术达到抓取、放置、放大等操作,摆脱传统鼠标和键盘的约束,运用肢体动作将现实和虚拟相结合,使得用户更有代入感与更好的体验感,真正实现unity3D 引擎与Leap Motion 控制器相结合的交互式游戏。在虚拟自行车游戏中无法使用单一手势来进行识别交互,所以利用动态识别抓捕来实现操作,所以用户在不同的操作中需用到不同的动作来进行交互。例如我们要完成抓取自行车轮胎的动作,首先将手部放置在Leap Motion 正上方距离大概30cm 至50cm,手掌向着Leap Motion 所在的一面上,确保每个手指都被识取到传感器中,手势输出后屏幕内就会出现一个虚拟手部,这个虚拟手部会随着用户手部的移动而移动,当移动至轮胎处,轮胎会出现光圈状态,此刻做出手掌紧握即五指需保持弯曲的状态即可抓取轮胎。另外放大车辆某个部分的动态动作是拳头变手掌即五指保持伸直的状态,缩小即是五指合并即是五指伸直合并在一起的状态。利用抓获这些特定的动作来用于控制游戏。在能直接在车辆进行的交互动作外,还可以使用维修工具来进行操作,在墙面会有常见的维修器件,可通过Leap Motion 的交互模式来抓取并移动至车辆来达到拆装的效果,在这里能实现的动作是用户在Leap Motion 上首先用手抓取想要的零件,并将它移至到自行车可拆卸处即会自动拆分,等拆分完成后会有复原的按键,这就能使用户在了解车辆组成的基础上更有趣味性的学习。

第四个模块是游戏的动画设计,我们选用的是unity中的animation 组件,主要用于展示轮胎维修的过程。在windows—animator 打开动画制作界面。首先锁定游戏对象的移动主体(即轮胎),确认轮胎的移动轨迹、距离和时间后,进行animator 录制,添加游戏对象初始位置作为第一帧,然后选中轮胎,拖动其缓缓向既定位置移动,添加新的一帧,结束录制,一个动画就即可完成。

2 游戏开发环境

2.1 Unity3D概述

Unity3D 是一款国际领先的跨平台的专业游戏引擎,Unity 平台提供了一套完善的游戏软件设计到开发的完整解决方案,可用于设计、创作、运营任何一款2D 或3D 游戏,而且还跨平台支持各种平台,包括iOS、Android、Windows、Mac 等各类硬件平台,充分体现了Unity 强大功能,在使用过程中,它的跨平台游戏开发的特性为开发者解决了大量移植过程中的不必要的麻烦,并且相较于其他游戏的开发平台,Unity3D 的基于脚本的监听机制使得开发者仅仅需要编写相应的游戏脚本即可,由游戏脚本响应unity 系统平台上的各个模块的组件,以此实现相应的功能。作为一款商业游戏引擎,Unity 可支持更高级别的引擎功能,在游戏制作后期可以移植和打包,大大便利了开发者进行使用。

2.2 Leap Motion

Leap Motion 是一款面向PC 以及Mac 平台的体感控制器。Leap Motion 具有很好地软硬件结合能力,Leap Motion控制器可追踪全部10 只手指,精度高达 1/100 毫米。它远比现有的运动跟踪控制技术更为精确,同时,它可以实现用手指浏览网页、阅读、弹钢琴或者其他小游戏,基于此功能,本游戏采用Unity3D 和Leap Motion 相结合的游戏操控方式,增加游戏过程中的体验感和趣味性。

2.3 C#语言

C#是微软公司发布的一种由C 和C++衍生出来的面向对象的编程语言、运行于.NET Framework 和.NET Core(完全开源,跨平台)之上的高级程序设计语言,它是一种安全的、稳定的、简单的、优雅的面向对象编程语言,它在继承C 和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB 简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET 开发的首选语言。目前,大多数unity 开发游戏所使用的语言是C#,它比较普及并且所具有的参考资料较丰富。

3 抓取物体交互功能的实现

3.1 Unity资源包

要实现从Leap Motion 设备捕捉手部动作到Unity 中手模型的绑定,最后再实现与游戏中物品的交互,整个过程需要使用许多的Unity 数据包。首先,我们需要将Leap Motion 核心驱动导入Unity 平台,并采用Leap Motion 的核心core 文件来实现,本游戏使用的是核心组件的4.6 版本,如图1 所示。

图1: 核心组件

将Leap Motion 连接电脑之后,通过Leap Motion 的摄像头以及自带的内部代码,玩家的手在Leap Motion 的内置监视器中将被套上默认的球棍模型骨架如图2 所示,这为开发者在unity 中代入模型提供了极大的便利。

图2: 内置摄像头默认球棍模型

打开Unity 软件,需要在平台中创建一些组件(即Unity 平台中的create empty 创建的一个GameObject)来配合Leap Motion 进行工作,本文以最简单的抓握这一交互动作为例子,描述利用四个主要组件组成完成交互动作所需的流程,四个组件分别为Leap Motion 支持组件、手模型管理组件、交互管理组件、物品交互组件。

本游戏的抓取交互主要有四个步骤,也就是布置四个组件:Leap service provider 组件负责连接Leap Motion 硬件与Unity 平台;Hand model manager 给Unity 导入绑定好手部模型;Interaction manager 负责给交互的主体以及受体赋予交互方式以及主体的接触点;最后是给交互物体设置好碰撞体以及物理逻辑。完成这样一套流程之后,基本的抓取交互就完成了,下面本文将详细介绍这一过程。

3.2 导入实时捕获的手动作

要完成在游戏中实时捕捉玩家的手部动作,需要在unity 中加入的第一个组件是Leap Motion 的服务支持组件,该组件是由脚本leap service provider 构成,如图3 所示。

图3: leap service provider 组件界面

它能够将Leap Motion 摄像头实时捕捉的动作输入到unity 平台之中,同时该组件中的脚本编写中还具有改变Leap Motion 摄像头监视模式的功能edit time pose(监视模式包括桌面模式desktop mode 以及头盔式Head mounted),根据Leap Motion 的放置方式可以选择不同的监视模式。该组件同样包括交互体可视化Interaction volume visualization选项,可以适配Leap Motion 公司其他产品,剩余是有关交互时物理方面的反馈和表现等选项。

3.3 对Unity内手模型的转化和控制

在将leap service provide 导入后,需要我们建立的Unity组件是手模型管理组件,将Leap Motion 内置摄像头捕捉的手部图像转换为Unity 内对虚拟手模型的控制。这一组件是由脚本hand model manager 构成,如图4 所示,该组件的主要功能是将与之前设置的leap service provide 绑定起来,把摄像头捕捉的图像导入进来;其次是创建一个model pool(模型池)用来放置虚拟手模型,同时可以设置手模型的有关参数。

图4: hand model manager 组件界面

在该组件中的模型池里放置了一双手模型后,该组件拥有两个子组件rigged hand,分为左手和右手。由图4 和图5也可以看出两者均是由脚本rigged hand 构成的组件,该组件的主要功能有:分别设定单独手模型的左右;设定手模型的大小,该功能用于协调好手模型与其他模型的比例关系;设置一个列表用于放置手指模型,可以把五个手指的模型绑定好;设定手掌坐标,用于确定整个手的位置;设定前臂、腕关节、肘关节的位置,该功能在运用更加详尽的手部模型的时候能够增加控制坐标,调整位置,增加真实感;最后一个功能是设定手模型的初始待机动作。

图5: rigged hand(左手)组件界面

简单版本的手模型仅有手掌和五个手指(thumb 拇指、index 食指、middle 中指、ring 无名指、pinky 小指),其中手指部分又被分为三个更小的单元(A、B、C),如图6 所示的L_Finger_Thumb_A 是大拇指,就被分为了三个GameObject,分别对应了手指指尖部分,手指中间部分以及手指末端关节凸起处;这样可以灵活调单独每根手指的长度,协调手部比例,看起来更加真实自然。

图6: 完整的简单版本手模型目录

3.4 设定交互对象和动作

在完成了以leap service provide 为脚本的Leap Motion支持组件和以hand model manager 为脚本的手模型管理组件之后,最后需要创建的就是交互管理组件,如图7 和图8 所示,该组件的脚本为Interaction Manager。组件的主要功能是:设定需要进行交互的对象,即虚拟手模型;设定交互设置,包括悬停触发半径以及触碰触发半径;交互层级设置。

图7: Interaction Manager 组件界面

图8: Interaction hand(左手)组件界面

所谓的悬停(hover)是指当虚拟手模型接近交互物品时的反馈,通过悬停我们可以判断手距离交互物品的距离,官方组件中给出的反馈方式是给交互物品上色,通过设置可以使物品从原本的浅色变为深色,手的距离越近则颜色越深,反过来设置也同样可以实现。所以说,悬停触发半径就是指虚拟手模型以及交互物品之间的反馈半径。触碰触发半径则是虚拟手模型和交互物品发生碰撞,抓取等物理动作的发生半径。

与手模型管理组件类似,该组件下有两个子组件:Interaction Hand。该组件的功能是要绑定好Leap Motion 摄像头(leap service provider),同时也将交互主体绑定为之前导入的虚拟手模型;设定手的交互模式,包括悬停、接触和抓取三种;分别设定单独手模型的左右;设定主悬停的指尖,可以理解为之前提到的悬停触发半径计算的出发点。

3.5 设置物品的交互属性

在设置完虚拟手模型以及交互管理之后,下一步需要对要交互的物体进行设置。这里可以使用Unity 平台中自带的脚本rigid body 对物品设置物理规则(界面如图9 所示),让物品能够像现实生活中一样遵循常识的运动和互动。组件的主要功能是:设置该物品的质量;设定拖动时会产生的各种阻力,角阻力系数;设定是否应用重力,是否符合运动学逻辑;设定插入,冲突检测,最终也可以让物品冻结在某一地点。

图9: rigid body 组件界面

首先对游戏中的轮胎进行交互设置,rigid body 组件赋予了轮胎重力,以及和物体接触时的力,我们需要给轮胎设计一个碰撞体积,在unity 中自带了许多碰撞体构建组件包括box(方盒形),capsule(胶囊型),sphere(椭球型),mesh(网格)。

由于轮胎属于不太规则的几何体,这里采用的是mesh collider,在轮胎的外部构建一层网格覆盖,这样可以最大限度的确保轮胎的碰撞体积接近现实,具体效果如图10 所示。

图10: 碰撞体类型及轮胎的网格碰撞效果图

这样,虚拟手就可以与轮胎进行最简单的交互了,包括用手推动轮胎,双指捏合拿取轮胎等等。

本游戏demo 中第二交互物品是工具,原理和轮胎的交互过程是相似的。同样的,在之前的三个组件搭建完成以后,可以通过给工具加入rigid body 以及碰撞体使得工具符合真实的物理规则进行手与物体的交互或是物体与物体的交互,如图11 所示。

图11: 部分工具的网格碰撞效果图

4 游戏效果展示

打开游戏,选择进入游戏,可以看见游戏主场景,在空旷的修车房中央,摆放着一辆破旧的自行车,这辆自行车,就是我们游戏的主要游戏对象,在场景后方摆放着修理车辆所需要的相关工具。

将Leap Motion 连接至设备,在场景中会出现手部模型,如图12 所示。我们可以通过将手放在Leap Motion 摄像头前面的动作变化来控制场景内手部建模的同步变化。同时,我们也可以通过手指捏合、张开等方式来做到游戏场景内物体的拿取或者放下。

图12: Leap Motion 接入设备

以修理自行车轮胎为例,将Leap Motion 接入主机,移动手以控制游戏画面中的手部建模移动至自行车破损的前轮胎处,双指捏合,拆下破损的轮胎,如图13 所示。

图13: 卸下破损轮胎

等破损轮胎被拆下后,重新控制建模移动到后面的新轮胎处,通过双指捏合,将新轮胎安装在车上。具体效果请看图14、15 和图16。

图14: 场景内新轮胎的放置

图15: 安装新轮胎

图16: 总效果图

5 结语

随着科技的不断发展,虚拟现实技术在近几年的发展中愈发迅速,手势识别技术作为人机交互的方向尤为重要。本文以基于Leap Motion 的Unity3D 的三维车辆维修游戏为例,详细地介绍了游戏的整体设计模块,以及如何利用Leap Motion 实现抓取物体时的交互功能,还利用Unity3D 中的animation 组件实现物体交互的动画过程,极大的提高了用户在游戏过程中的可玩性和操控性。

猜你喜欢

手部轮胎物品
手部皮肤软组织缺损修复的皮瓣选择
称物品
“双十一”,你抢到了想要的物品吗?
胖瘦自如的轮胎
谁动了凡·高的物品
大轮胎,玩起来
两种皮瓣修复手部软组织缺损的比较
轮胎业未来数年将现并购潮
固特异Fuel Max系列新增LHS轮胎
找物品