在VR开发中,用户将以第一人称的视角进入虚拟世界,即用户同时身处两个坐标系:1. 现实世界坐标系(如房间的坐标系),用户的身体处于这个坐标系 2. VR世界坐标系,用户的感官处于这个坐标系,即用户觉得我处于这里。

  而如何同步这两个坐标系HTC VIVE已经帮我们解决了。由HTC VIVE开发的应用,在应用刚初始运行阶段,将用户所处的现实世界的位置和VR世界里的位置进行一次匹配,然后以此为基准来同步两者的关系,将现实中的移动通过空间定位映射到VR空间里的移动。

  但是这也产生了一个问题。在传统的二维屏幕的游戏中,一旦游戏角色走到墙体,可以用碰撞体挡住,不让其继续穿墙运动。而VR应用却不能阻挡用户的穿墙行动,原因是VR空间里的移动是根据人在现实世界里的走动来同步,只要我的房间够大,我就可以一直朝着一个方向走下去,而VR世界里的摄像机也将一直朝一个方向运动,这样势不可免将造成穿墙等问题,这并不是我们想要的结果。

那么要如何解决这个问题呢?

这里有两个想法:

一、软硬件结合。现实也造一堵和虚拟世界对应的墙,但这基本不符合实际(Haha~),Pass掉。

二、强行阻止VR虚拟角色继续前行。

而第二种方法又有两种解决方式:

1. 位移补偿: 虚拟角色在碰撞到墙时还继续往前走时控制其进行反向位移补偿或者将整个场景都往其运动方向进行移动补偿。

2. 碰撞体。和传统的游戏一样采用碰撞体阻止其继续前行,但碰撞体的强行插入将可能造成抖动。

这两个办法其实就是强行让两个世界坐标的位移映射失效。虽然可以达到不穿墙的效果,但是又会带来新的问题。

1. 用户的感受:什么鬼?为什么我在原地踏步?周围的东西为什么有种轻飘飘的感觉?看来我一定是要升天了~

2. 两个世界坐标系的原点产生偏移。

那么为什么会产生偏移呢?

下面用一张图来解释:

关于VR开发中的穿墙问题随想-LMLPHP

  这个问题在一般情况下可能不大,但当处于一个较小的房间而又频繁撞墙时,由于误差的积累,问题就产生了。我人已经在墙边了,需要交互的物体却还在离墙更远的地方,这可叫我如何是好?

综上:如何不让用户穿墙又可以规避缺陷:

1. 在有穿墙限制的同时提供手柄的瞬移功能,就不存在坐标系偏移造成的无法交互的后果。但仍然难以解决用户原地踏步感觉不良的问题。

2. 没有穿墙限制,在接近墙继续向前走时,通过UI或其他方式对用户进行提示:禁止继续往前走。在墙外布置一些空的场景,若用户执意要穿墙,走出去看不到什么新鲜的东西,也不会再尝试了,应该不会有人这么无聊吧,haha~

其实我是比较倾向使用第二种的,毕竟用户体验更自然、连贯性更好!具体采用哪种就要根据实际项目需求了。

  换个思路想,阻止不了穿墙也未必是件坏事,因为我们可以利用它来放置一些彩蛋,比如在一个无法打开的木桶里放置一些意外的惊喜,说不定用户感觉会更好~如果我把头探出墙外突然看到一个鬼脸对我说:"Catch you!"”那我一定会很“惊喜”的。

            

05-06 09:47