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

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

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

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

这里有两个想法:

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

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

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

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

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

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

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

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

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

下面用一张图来解释:

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

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

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

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

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

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

            

关于VR开发中的穿墙问题随想的更多相关文章

  1. VR开发中性能问题—OculusWaitForGPU

    http://blog.csdn.net/cartzhang/article/details/50788894 VR开发中性能问题-OculusWaitForGPU 本文章由cartzhang编写,转 ...

  2. VR开发的烦恼——范围限制

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/52230865 作者:car ...

  3. UE4关于Oculus Rift (VR)开发忠告

    转自:http://blog.csdn.net/cartzhang/article/details/42493843 UE4虚拟现实 实现的注意事项 https://docs.unrealengine ...

  4. 使用Unity5.1进行VR开发的配置(最新的未必是最好的!!!)

    随着Unity5.1的发布,之前的Oculus Rift和Gear VR 开发流程发生了巨大的变化,这也算是小白鼠们必须付出的代价了~ 那么Unity5.1和Oculus的整合究竟发生了哪些变化,对开 ...

  5. VR开发2015年终总结

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50617605 作者:car ...

  6. TDD在Unity3D游戏项目开发中的实践

    0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...

  7. React在开发中的常用结构以及功能详解

    一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...

  8. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  9. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

随机推荐

  1. 【mongodb系统学习之四】查看mongodb进程

    四.查看mongodb进程(可以配合启动和关闭使用): 1).方法一:直接查看mongodb进程是否已经存在(用上面的方式启动后,需要另开一个窗口操作):ps –ef|grep mongodb, 如图 ...

  2. freemarker自定义标签(一)

    freemarker自定义标签 1.自定义标签说明 宏变量存储模板片段可以被用作自定义指令macro 2.示例说明 <html> <head> <meta http-eq ...

  3. 芝麻HTTP:在无GUI的CentOS上使用Selenium+Chrome

    各位小伙伴儿的采集日常是不是被JavaScript的各种点击事件折腾的欲仙欲死啊?好不容易找到个Selenium+Chrome可以解决问题! 但是另一个▄█▀█●的事实摆在面前,服务器都特么没有GUI ...

  4. ASP.Net Core的Code Fist代码先行操作方法

    Asp.Net  core的Code Fist(代码先行)主要有以下几步: 1.创建实体类 2.创建数据库上下文 3.填加连接字符串 4.依赖注入 5.添加基架工具并执行初始迁移 6搭建模型的基本架构 ...

  5. Defeat the Enemy UVALive - 7146

      Long long ago there is a strong tribe living on the earth. They always have wars and eonquer other ...

  6. jQuery.proxy()的用法

    一:参考范文一 第一次接触jQuery.proxy()时感觉这个方法不实用,不明白它到底是个什么意思.今天来将jQuery官网上的解释进行一下翻译,顺便添加自己的理解和一些示例.proxy也可称为代理 ...

  7. java自带的类压缩和下载,以及递归删除动态的文件(shiro项目中来的十)

    详见项目,不用借助于任何外在的jar包,通过jre自带的实现.

  8. Excel2010 日文显示乱码

  9. springboot--如何优雅的使用mybatis

    这两天启动了一个新项目因为项目组成员一直都使用的是mybatis,虽然个人比较喜欢jpa这种极简的模式,但是为了项目保持统一性技术选型还是定了 mybatis.到网上找了一下关于spring boot ...

  10. [BZOJ2743] [HEOI2012] 采花 (树状数组)

    Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一 ...