新闻动态

使用Unity3D进行HTC Vive VR游戏开发

配置好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