AR/VR实训:使用Unity3D进行HTC Vive游戏开发|附视频_Steam

本实训介绍如何使用Unity3D进行HTC Vive游戏开发。
01
HTC Vive简介
Vive是首款由HTC和Valve合作共同开发的虚拟现实系统,结合了最先进的影音与动作捕捉技术。Vive最初就以房间规模的虚拟现实为目标,给用户带来最完整的虚拟现实体验。
Vive头戴式显示器上共有32个定位感应器,其准确定位所带来的临场感,能使用户沉浸在110°视场中,体会精彩绝伦的视觉内容。精细的图像在2160×1200的分辨率及90Hz 刷新率的推送下,带来了流畅的游戏体验和逼真的感受与动作。2个握在手中的无线控制器各有24个定位感应器,提供了360°一比一的精密动作捕捉。控制器上搭载二段式扳机、多功能触摸板和HD触感反馈;有了它们就能行云流水、随心所欲地与游戏内容交互。而房间规模的动作捕捉则是透过2个定位器来完成;定位器能直接无线同步,如此一来就无须需使用到额外的电线。
为了能让体验不中断,Vive也内置了便利与安全功能。Chaperone系统将在用户接近游戏空间边缘时做出提醒,而显示器上的前置摄像镜头也能将现实中的物体融入虚拟世界。这些特点使得Vive能将体验者感受到一个超乎想象的世界。
02
HTC Vive主机配置
HTC Vive的主机配置如图1所示,包括:
GPU: NVIDIA® GeForce® GTX 1060 / AMD Radeon™ RX 480 同等或更高配置;
CPU: Intel® i8-4890 / AMD FX 8380 同等或更高配置;
RAM: 4GB+;
Video 视频输出: HDMI 1.4 or DisplayPort 1.2 或更高版本;
USB 端口: 1×USB 2.0 或更高版本的端口;
操作系統: Windows 7 SP1、Windows 8.1 或更高版本、Windows 10。

▍图1 主机、CPU、显卡
03
HTC Vive软件配置
当所有的硬件设备都准备好并搭建成功后,就可以开始着手配置HTC Vive软件设置。 从Steam的官方网站上下载Steam平台安装在本地,如图2所示。

▍图2 Steam安装界面
打开安装好的Steam平台,在“库”→“工具”里面搜索SteamVR并下载,如图3所示。

▍图3 库中搜索SteamVR
启动SteamVR之后,系统会自动检测当前所连接的设备,如果所有设备都正常连接,则显示如图4所示界面。

▍图4 Steam VR显示界面
单击SteamVR下拉菜单,选择房间设置,如图5所示。

▍图5 房间设置界面
如果当前环境有足够的空间,则选择房间模式进行设置,如果空间太狭窄,则选择站立模式。这里选择房间规模进行调试,如图6所示。

▍图6 按照指令操作
根据提示进行操作,如图7所示。

▍图7 定位显示器
在这些步骤都完成之后,最后一步进行范围划定,Vive最远范围要求不超过8m,如图8所示。

▍图8 设置游玩范围
当这一步完成之后,就可以进行Vive体验了。
04
HTC Vive案例开发
配置好HTC Vive的软硬件,就可以开始结合Unity3D进行项目的开发了。
1. 导入开发工具包
在unity Asset Store资源商店搜索SteamVR Plugin,下载后导入Unity。
导入成功后会在Project窗口中出现一个SteamVR文件夹和SteamVR_Input文件夹。
2. 导入资源素材
在资源商店3D资源中搜索环境类的免费资源,这里以Dark Fantasy Kit为例,选择下载并导入到项目中,如图9所示。

▍图9 下载并导入Dark Fantasy Kit
3. 添加VR摄像机
在Project窗口搜索框搜索Player,将Player拖拽到场景中的地板上,这个Player就是场景中的摄像机。在Hierarchy窗口中将原来的Camera删除,如图10所示。保存场景,并运行查看摄像机是否能正常启用。

▍图10 删除原有的Camera
这时如果可在头盔中看到房屋中的情况,代表摄像机启动正常。
4. 添加移动功能
选择其中一块地面dfk_floor_01(1),在Hierarchy窗口中复制该地面文件得到dfk_floor_01(4),将该文件拖拽到FLOOR文件夹外。在Inspector面板中将该地面的高度提高0.02,使其避免与地面重合。
为了使整个地面都能移动,对该地面进行扩充,使其填满整个房屋。单击Scenes窗口右上角的方向标记,选择以顶视图的方式进行添加。沿选中地面的边框将其拖拽到最大,这里只能到床边位置,如图11所示。

▍图11 拖拽地面边框到最大化
复制地面文件dfk_floor_01(4)得到dfk_floor_01(8)。将dfk_floor_01(8)移动到床和柜子中间部分,使其与dfk_floor_01(4)对应的地板地面边缘刚好完全接缝,如图12所示。dfk_floor_01(4)和 dfk_floor_01(8)就作为房屋场景中可以移动的区域。

▍图12 复制地面文件并调整地面边框
更换地面材质,使其与原来的地面有所区别。在Inspector面板中Materials参数下单击Element选择右侧的扩展按钮,然后在弹出的材质选择框内搜索area,选择可移动区域地面为蓝色的材质。Scene窗口中运行场景查看可移动地面变成蓝色的方格,如图13所示。

▍图13 查看可移动地面材质
5. 添加脚本
同时选中dfk_floor_01(4)和 dfk_floor_01(8)两个脚本,在Inspector面板中单击Add Component,添加名字为Teleport Area的脚本。该脚本代表在VR中可行走的区域。
单击dfk_floor_01(8)脚本,在Inspector面板的Teleport Area脚本下勾选Locked,使该区域被锁定,成为无法行走的区域。dfk_floor_01(4)脚本不变,即对应的区域没有被锁定,可以行走。
6. 添加预制体
Project窗口搜索预制体Teleporting,将该预制体拖拽到Hierarchy窗口中,如图14所示。

▍图14 添加预制体
7. 保存场景
保存场景并运行,可看到场景中有一个手柄。当没有按手柄时,手柄上会有一个黄色的高亮提示和一个信息提示标签Teleport,表示可以通过手柄进行移动。
当在可行走区域内按下手柄,会有一个绿色的抛物线和圆环出现,松开手柄可以移动到圆环所在位置。当抛物线出现在锁定区域时,圆环会变成一个红色的禁止符号,如图15所示,表示无法进入到该区域。这样就实现了在房间场景中的移动功能。

▍图15 锁定区域
8. 添加拾取功能
在Project窗口中找到Lightsources文件夹,将该文件夹下的蓝水晶文件dfk_crystal_01_blue拖拽到场景桌面上,该水晶作为场景中的可拾取物体。Inspector窗口中可以看到,水晶的Static参数默认被勾选,说明水晶属于静态类型,不参与场景中的逻辑运算。这里需要把Static参数的勾选去除。
SteamVR本身已经提供了一些完整的可拾取物体的功能,用户可以直接使用。在Project窗口中搜索ThrowableCube,将其拖拽到Scene窗口的桌面上。 运行查看效果,可看到当手柄靠近立方体时,立方体会变成蓝色,当按下手柄时可拾取该立方体,这时物体颜色变成白色,如图16所示。

▍图16手柄靠近拾取物体时可拾取物体颜色的变化
接下来就可以根据该立方体的可拾取功能对水晶进行改写。Hierarchy窗口中单击选择ThrowableCube,右键选择Unpack Prefab(解包打开该预制体),如图17所示。

▍图17 解压立方体预制体文件
Hierarchy窗口中单击Cube,在Inspector窗口最上方Cube前方框中的勾选去除,在场景窗口中就看不到立方体了,如图18所示。这样就完成了两个模型之间的替换。

▍图18 模型替换
9. 添加交互功能
给一个物体,或者UI添加Interactbale组件后,这个物体就可以通过手柄进行交互了。由于Cube被添加了Interactable组件,当手柄接触到Cube时,手柄会高亮,并震动一下。
要想通过手柄拾取或放下物体时,需对物体进行响应Hand交互事件设置。Hierarchy窗口中单击ThrowableCube,将滚动条滑到Inspector窗口下部可看到一个交互组件Interactable Hover Events(悬停事件),下面对应有4个事件:On Hand Hover Begin 代表手柄碰到物体的开始事件;On Hand Hover End 代表手柄离开物体的结束事件;On Attached To Hand 代表手柄可响应抓取物体的事件;On Detached From Hand 代表手柄响应放下物体的事件。
找到水晶原有的材质球,单击Element0后的dfk_crystal_01_blue,找到Project窗口中对应的材质球,以这个材质球为默认的颜色,在手柄退出时会采用这个默认的蓝色。
将其拖拽到On Hand Hover End 事件后的方框内,再找到文件名为dfk_candles_01的材质球,将其拖拽到On Hand Hover Begin 事件后的方框内,将该黄色材质球作为手柄进入时使用的默认颜色。
至此对蓝色水晶的状态、响应等进行了替换,在Hierarchy窗口将蓝色水晶的名字由ThrowableCube修改为ThrowableWapan。运行查看效果,当手柄进入交互区可拾取物体交互区域时,可拾取物体变为黄色;当手柄离开时,可拾取物体变为蓝色;当使用手柄拾取物体时,物体也是蓝色,如图8.49所示。

▍图8. 49 查看交互效果
10. 导出场景
单击File菜单,选择Build Settings选项。然后在弹出窗口中单击选择PC,Mac & Linux Standalone平台,在单击右侧的Add Open Scenes按钮,将刚才创建的场景勾选上。最后单击窗口左下角的Player Settings按钮。在Inspector窗口的Other Setting中将Bundle Identifier修改为com.think.VIVEDemo,然后再单击Build按钮,完成场景的导出。
05
视频讲解
讲解视频如下:
06
参考书籍
《AR/VR技术与应用——基于Unity 3D/ARKit/ARCore(微课视频版)》
ISBN:978-7-302-55526-1
范丽亚 张克发 马介渊 赵兴 谢有龙 编著
定价:89元

07
精彩文章回顾
Python模拟浏览器实训:自动登陆邮箱|附视频
Python爬虫实训:实现图书信息采集|附源码+视频
Spark基本统计--基于DataFrame的API|附视频
Spark算法实例:词频统计
大数据集群的部署实例|附视频
用Excel制作工资条实例|附素材+视频
真题解析│2017年蓝桥杯软件类省赛传统“送分题”
Java 15新增类Record的工作实例|附代码
Dart应用Bloc设计模式实例|附代码
逻辑回归的MATLAB实践|附代码
Python爬虫实例:采集微博博文|附视频
MySQL利用E-R模型的数据库概念设计|附视频
- HTML5 实现黑白棋游戏 附代码