本文是我的视频教程《HTC VIVE交互开发实例教程》的节选文字版,更多VRTK实例教程可参见蛮牛教育首页
一、什么是VRTK
VRTK全称是Virtual Reality Toolkit,前身是SteamVR Toolkit,由于后续版本开始支持其他VR平台的SDK,如Oculus、Daydream、GearVR等,故改名为VRTK,它是使用Unity进行VR交互开发的利器,以二八原则来看,开发者可以使用20%的时间完成80%的VR交互开发内容。这一点从这个工具的Github简介上就能印证:
A productive VR Toolkit for rapidly building VR solutions in Unity3d.
下图是VRTK的作者在Twitter上分享的一张图片,我在这里中将它做了翻译。作者使用了黄金思考圈的方式告诉大家:为什么开发VRTK,采用什么方式,以及VRTK是什么。
![1199677-4258abac14b49605.jpg](https://i-blog.csdnimg.cn/blog_migrate/b05f349d199b360578cb13fa1ed19d37.webp?x-image-process=image/format,png)
二、VRTK能做什么
VRTK能实现VR开发中大部分交互效果,开发者只需要挂载几个脚本,然后设置相关的属性,就能实现我们想要的功能,下面列出我总结的一部分能实现的VR功能:
- 支持SteamVR、Oculus、Daydream等SDK
- VR模拟器,不需要VR硬件即可调试
- 基于头盔和手柄的激光指针
- 基于头盔和手柄的曲线指针
- 游玩区域光标
- 指针交互
- 可以为物体设置拖放区域
- 多种移动方式:瞬移、Dash Movement、Touchpad Movement、Move in place/Run in place Movement
- 攀登
- 物体交互:Touching、Grabbing 、Using
- 双手联动操作物体:缩放、冲锋枪等需要双手持握的物体
- 物体高亮
- 手柄震动反馈
- 手柄效果: 高亮, 透明, 隐藏
- 预制常见物体的交互方式:按钮、杠杆、 门、抽屉、 滑动条、把手
- 面板菜单、环形菜单
- 使用指针与UGUI进行交互
- 对UI元素进行拖拽
- ...
VRTK通过事件驱动进行相应的交互开发,对于手柄发送的各种事件,使用VRTK_Controller_Event脚本,这是在配置过程中首先要挂载到手柄控制器上的脚本。另外,对于其它的交互事件,也会提供相应的unity事件处理,比如VRTK_BasicTeleport_UnityEvents(瞬移事件处理)、VRTK_InteractGrab_UnityEvents(抓取事件处理)、VRTK_InteractTouch_UnityEvents(触摸事件处理),对于各事件发生的不同阶段,都会有对应的处理接口,类似于uGUI中Button的OnClick事件处理形式。当然,你也可以通过代码进行手动添加事件处理函数。
三、为什么选择VRTK?
1. 免费开源
由于VRTK的开源性质,一方面,开发者可以深入到代码中去,查看它如何与原生SDK进行交互,是一个很好的学习工具;另一方面,开发者可以根据自己的项目需求,修改其中的代码,快速开发符合自己需要的功能。
VRTK源代码托管于Github,在Unity Asset Store上以插件包的形式提供免费下载,对应地址分别为:
Github:https://github.com/thestonefox/VRTK
Asset Store:https://www.assetstore.unity3d.com/en/#!/content/64131
使用两种版本的优缺点:
Github版:优点是能够比较早的接触到新版本的新功能;缺点是,新功能由于缺少足够的测试,会存在不稳定的问题。
Asset Store版:优点是稳定,经过了足够的测试才会上架;缺点是由于商店审核周期的原因,版本更新会有一定的滞后性,多数情况下是有了大版本更新以后才会考虑上架。
2. 丰富的文档支持
相对于SteamVR少得可怜的说明文档,VRTK的文档多达二百多页,细化到每个函数和参数的作用及使用方法。并且,在挂载了脚本的属性面板中,鼠标悬停即可显示当前属性的说明,通过这些文档的支持,使得开发者能够在开发过程中比较顺利地使用这个工具集合提供的各项功能。
![1199677-11bd1b68cdd866b3.png](https://i-blog.csdnimg.cn/blog_migrate/7b41c755ec6d61b28e51ae71b803dd81.webp?x-image-process=image/format,png)
![1199677-8aedd447791ef615.png](https://i-blog.csdnimg.cn/blog_migrate/d88c69cc6f9592638d0fa62d87b7be70.webp?x-image-process=image/format,png)
3. 40+个示例场景
作者在文件包中提供了40多个示例场景,针对不同的功能分别作为展示,保证开发者在极短时间内上手使用这套工具集。其中比较基础的场景有:
- 001_CameraRig_VR_PlayArea:关于如何配置VRTK,如果对于刚上手还不知道如何开始的朋友,可以参考这个场景,这是最基础且必要的一步。(注:由于VRTK在每个比较大的版本升级以后,配置过程相较之前的版本会有比较明显的改变,所以建议大家在升级以后参考一下每个版本下的这个场景)
- 003_Controller_SimplePointer: 如何设置手柄发送射线功能
- 004_CameraRig_BasicTeleport: 关于瞬移的基本配置
- 034_Controls_InteractingWithUnityUI:关于VRTK如何与UGUI进行交互。
其它场景同样比较有用,限于篇幅,不再一一介绍,大家可以根据自己的需求进行相应的查看,场景名称通过字面意思也会知其一二。
VRTK示例场景
4.活跃的社区
截止此文时间,VRTK在Github上的Star(类似于赞)数为1772个,最近的更新是在两天前,保持了一个非常活跃的状态。同时还有Slack小组方便开发者进行交流,社交媒体的支持也是该有的都有。
![1199677-56c26fcff372e027.jpg](https://i-blog.csdnimg.cn/blog_migrate/342befb8dc97ae6117fa65f12ddee4db.webp?x-image-process=image/format,png)
5.VRTK油管频道支持
作者会不定期更新自己的youtube频道,解答在社区中提出的问题,以LiveStream的形式。同时也会分享一些VRTK的小技巧,比如怎样和NewtonVR集成,怎样将Survival Shooter这种PC端的项目移植为以VRTK为交互的VR平台,等等。在我们的《VR共同成长群》里我也搬运了一些作者分享的视频。
总之,VRTK为了让开发者快速顺利地上手使用这套工具集,在各个方面都做得非常友好。我也将会在接下来的文章中分享使用VRTK过程中的一些心得体会,希望对你有所帮助。