美文网首页Unity技术VR/AR分享@IT·互联网程序员
VRTK使用心得(六):优化用户体验——防穿墙及自动坠落

VRTK使用心得(六):优化用户体验——防穿墙及自动坠落

作者: XR技术研习社 | 来源:发表于2017-09-20 17:18 被阅读677次

    我们知道在VR中,尤其是像HTC VIVE或Oculus这样的设备,体验者除了能够使用瞬移来移动自身位置,还可以在空间小范围地自主移动,当距离一面墙或者障碍物比较近的时候,体验者的头部可以穿过墙面或障碍物的模型,看到里面的内容(CS穿墙既视感),比如在VR房产项目中,用户会看到隔壁房间的内容,个别会有闪躲的动作,这种体验显然与现实不符,从而影响到沉浸感;另外,同样是由于自由移动引起的问题,当体验者瞬移到一个有高度的地方以后,比如高塔、楼梯等,当走出这个高度的范围,并没有因为重力而下落,而是悬停在了空中,这也是影响用户体验的地方。

    VRTK对于这两方面都有对应的优化措施,首先,对于穿墙,使用VRTK_HeadsetCollisionFade组件,能够在检测到用户与物体发生碰撞以后做一个黑屏效果,这样体验者就会本能地退出这个区域(如下图),在PlayArea(见VRTK的基本配置,PlayArea用来挂载瞬移相关组件)上添加脚本以后,用户头盔与碰撞体发生碰撞,场景会有一个逐渐变黑的过程。


    需要说明的是:当添加VRTK_HeadsetCollisionFade以后,会自动挂载另外两个组件:
    1.VRTK_HeadsetCollision:用来检测头盔与碰撞体的碰撞,当单独挂载这个脚本的时候,可以获取到这个脚本,使用HeadsetCollisionDetect事件来检测碰撞发生,然后撰写自己的碰撞检测逻辑,比如除了黑屏,还可以播放提示音,显示提示UI等。

        void Start () {
            GetComponent<VRTK_HeadsetCollision>().HeadsetCollisionDetect += CollisionDetect_HeadsetCollisionDetect;
        }
    
        private void CollisionDetect_HeadsetCollisionDetect(object sender, HeadsetCollisionEventArgs e)
        {
          //你的处理逻辑
        }
    

    2. VRTK_HeadsetFade:用来实现黑屏。当单独挂载时,可以在除了头盔碰撞之外,调用其Fade()函数来实现黑屏效果,传递颜色及持续时间参数。

    对于自动坠落,VRTK提供了VRTK_BodyPhysics这个组件,同样是挂载到PlayArea上,当体验者移出高度范围的区域,会因为重力自动坠落到能够承载其的下一个高度。调节参数Gravity Fall Y Threshold,设定引起坠落的值,如下图,如果设置为1,则距离下一个高度大于1米时下落。


    其原理是,VRTK在运行时,会在CameraRig上添加两个Collider,一个“代表”Body,一个“代表”Foot,如下图:

    FootCollider通过检测碰撞,当没有碰撞时,则认为悬空,继而实现下落。

    以上是VRTK中对于因为用户自由移动引起的用户体验的优化,希望对你有帮助,欢迎指正。

    相关文章

      网友评论

        本文标题:VRTK使用心得(六):优化用户体验——防穿墙及自动坠落

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