美文网首页AR/VR/MR征服Unity3d程序员
VRTK使用心得(二):配置VRTK(基于最新3.2.1版)

VRTK使用心得(二):配置VRTK(基于最新3.2.1版)

作者: XR技术研习社 | 来源:发表于2017-08-19 15:39 被阅读758次

    本文是我的视频教程《HTC VIVE交互开发实例教程》的节选文字版,更多VRTK实例教程可参见蛮牛教育首页

    VRTK的配置是使用该套工具集进行开发的第一步,本文以Asset Store版VRTK作为演示,最新版本为3.2.1,配置过程如下:

    1. 新建一个unity项目。

    2. 导入SteamVR Plugin,在弹出的SteamVR Setting对话框中选择"Accept All"。


      图1
      图2
    3. 导入VRTK。


      图3
    4. 在层级面板(Hierarchy)中,首先删除场景自带的MainCamera,这是因为后续导入的SteamVR预制体会自带一个Camera,为了保证场景中有且只有一个摄像机,故删除,然后保存场景。

    5. 新建一个空的GameObject(快捷键为Ctrl+Shift+N),挂载VRTK_SDK_MANAGER脚本,属性配置暂且不管。(建议此物体亦命名为VRTK_SDK_MANAGER)。


      图4
    6. 在其下新建一个空GameObject(快捷键为Alt+Shift+N),作为VRTK_SDK_MANAGER的子物体,同样建议命名为VRTK_SDK_SETUP,在其上挂载VRTK_SDK_SETUP脚本。


      图5
    7. 在Project面板中展开SteamVR文件夹,在Prefab文件夹下找到预制体[CameraRig],将其拖到VRTK_SDK_SETUP下,作为其子物体。


      图6
    8. 向上选中VRTK_SDK_SETUP,在检视面板中,找到"SDK Selection"下的"Quick Select"属性旁边有一个SDK列表,这里列出了VRTK所能支持的VR SDK种类,包括Daydream、Oculus等,值得注意的是列表中会有一个"Simulator"元素,因为VRTK提供了模拟器调试支持,所以如果选中此元素,则可以开启模拟器调试模式,开发者可以使用键盘鼠标配合进行一些简单的VR交互调试。此项目中我们使用的是SteamVR,故选择对应元素。选中以后,Actual Objects栏下的相关属性随即被自动填充,这是VRTK与SteamVR交互用到的相关组件引用。


      图7
    9. 再次向上,选择VRTK_SDK_MANAGER,在检视面板中,找到Setups栏,这是SDK的配置列表,点击底部的加号,会为配置列表添加元素,将刚才我们配置好的VRTK_SDK_SETUP拖到刚添加的卡槽里,即完成了关于使用SteamVR作为SDK被VRTK调用的配置过程,此时可以进行简单的测试查看。


      图8
    10. 进行左右控制器的配置。在VRTK_SDK_MANAGER下,添加两个空物体,分别命名为LeftController和RightController。同时将两个物体选中,为他们添加VRTK_ControllerEvents组件,用来向系统发送手柄控制事件,你可以在相关的属性下面设置某个特定按键触发所要使用的动作,比如抓取动作触发的按键,如果不想使用默认的Grip Button按下时触发,可以将Grab Toggle Button对应的动作改为Trigger Press。


      图9
    11. 实现让手柄发射指针。这里我们以为左手手柄添加直线型指针为例,选择要发射指针的Controller,为其添加VRTK_Pointer组件,此时还需要借助指针渲染器来定义指针的外观,如果需要直线型射线指针,则添加VRTK_StraightPointerRenderer组件,如果需要曲线型指针,则添加VRTK_BezierPointerRenderer组件。在相关组件添加完毕之后,将VRTK_StraightPointerRenderer拖到其上的VRTK_Pointer下的Pointer Renderer属性中。


      图10
    12. 重新选中VRTK_SDK_MANAGER,在检视面板中有Left Controller和Right Controller两个属性,这时将配置好的LeftController和RightController两个物体分别拖到对应的属性中。


      图11
    13. 实现瞬移。在VRTK_SDK_MANAGER下添加子物体,命名为PlayArea,在其上添加VRTK_BasicTeleport脚本即可实现瞬移(如图12),此时需保证实现瞬移的Controller上的VRTK_POINTER脚本的Enable Telepot属性被勾选(如图13)。在场景中添加一个Plane进行测试,由于瞬移基于射线碰撞检测,故需保证实现瞬移的区域有Collider,如BoxCollider等。


      图12
      图13
      图14

    点击Play进行测试,至此我们就实现了配置VRTK的全过程。


    总结:

    • 不同版本的VRTK,其配置过程会有所区别,对于具体版本的设置,可以在每个版本自带文档中找到,例如此版本的配置介绍可在VRTK文件夹下的README.pdf文档中的“Using VRTK in your own project
      小节中找到。

    • 关于如何查看VRTK版本,可以通过Window->VRTK->Surpport Info进行查看,如图13。


      图15
    • 由以上步骤可见,VRTK的配置过程简单却繁琐,在日常开发中,开启一个VRTK项目,总是要重新配置这个过程,希望VRTK在以后的新版本中能够提供类似SteamVR中的CameraRig这样的prefab,开发者通过简单的属性修改即可完成VRTK的配置最好。

    相关文章

      网友评论

      • e581514abdf6:为什么照做了之后 还是不出现手柄和射线
        e581514abdf6:@累成皮卡丘 不知道是不是跟unity5.6版本有问题 一运行的时候 两个controller就变灰色消失了,导致既看不见手柄也看不见射线, 看到别人说 5.6版本需要加一个steam的update,但是加回了也没用, 改用5.5版本的unity 就会秒退报错 ,很崩溃啊
      • 白若玉:看了好几个新版配置教程,只有这个写的最清楚、最简单且是最新版本,老师依然是那个简单直接的风格,辛苦了。以后的VRTK恐怕是回不到早期不用配置,仅拖拽2、3个脚本就能实现射线、瞬移等功能的那个VRTK了,新版本野心越来越大,SDK包容的越来越多,从最早的HTC VIVE到现在的DayDream,这已经不再是HTC VIVE专用的插件了,是好事也是不方便的事。
        XR技术研习社:@白若玉 谢谢!关于配置,的确是个问题。:anger:
        白若玉:还有一件事我不太理解,为什么不在[CameraRig]下的Controller (left)和Controller (right)中+射线脚本,而是新建空物体添加,我测试了一下都能实现效果。
      • Superocean:如果用手柄发射的射线来拾取物体,该怎么办呢?
        XR技术研习社:@Superocean http://edu.manew.com/course/344
        Superocean: @伟大的伟 那您的视频教程在哪个网站呢
        XR技术研习社:@Superocean 这个在我的视频教程中有演示,在后续的文章中也会有涉及到:blush:
      • GtoDair:老师,怎么vrtk使用心得只有 2和7章,其他的还有吗?
        GtoDair:@伟大的伟 哦哦,好的,等待更新!:+1:
        XR技术研习社:你好,第七篇是临时穿插进来的,后面会准备写第三篇。
      • Superocean:您知道如果用touchpad移动怎么调整速度吗,在面板上有这个参数吗,还是必须要用代码调整
        GtoDair:touchpad 可以再面板上调整速度的
      • Superocean:我这里总有一个报错,Assertion failed on expression: 'IsMatrixValid(matrix)',并且也不能看见手柄了,您直达什么情况吗
        XR技术研习社:@Superocean 从更多搜索的结果来看,这个更像是一个bug,我这边没遇到过这个情况,不好下结论,我用的是unity5.5.3,SteamVR SDK和SteamVR运行时都是最新版本,根据其它人的描述,这个应该不影响运行。
        Superocean:@伟大的伟 谢谢您了,但是我英文太渣了,按照您的步骤做了一遍,但是没出来效果,手柄还不见了,您知道这是怎么回事吗
        XR技术研习社:你好,这种错误我没遇到过,不过我帮你搜索了一下,在unity的论坛里有这方面的讨论,引用其中一个解决方案,不知道能否解决你的问题:I'm encountering this "IsMatrixValid(matrix)" error. I'm still trying to figure it out but it seems like in my case it's because I'm instantiating the SteamVR camera before setting "VRSettings.enabled = true;". Instantiating the camera after setting it to true seems to make the error go away for me.

      本文标题:VRTK使用心得(二):配置VRTK(基于最新3.2.1版)

      本文链接:https://www.haomeiwen.com/subject/jfrmrxtx.html