修改了标题编号、缩进。

原链接:

https://www.htcvive.com/cn/forum/chat.php?mod=viewthread&tid=1641&extra=page%3D1

在过去,3D程序多数是游戏,非游戏的应用一般设计成2D程序。而在VR中几乎所有程序都是3D的(左右眼需要看到的不一样画面),所以开发VR程序和开发3D游戏很像,也可以使用Unity, Unreal等引擎。而VR开发的独特之处在于UI设计,如果还用之前的方案,用户使用的时候可能会觉得非常困惑甚至头晕。这篇文章会给大家介绍设计VR中UI的一些常用做法。

1.  HUD?

1.1 什么是HUD 
    HUD (head-up display)是非VR游戏中最常见的UI类型。它的用处是实时显示状态和提供按钮、输入框等控件。比如在游戏中显示生命值、弹药数、分数、小地图,以及技能按钮、菜单按钮等,都会用到HUD。

1.2 为什么不能在VR中使用HUD 
    HUD的实现方式是在游戏画面之上覆盖一层专用的HUD画面(overlay)。它有两个特点: 
   (1) HUD画面是离摄像机镜头最近的物体,其他物体都会被HUD挡住   
   (2) HUD在屏幕中位置是不变的,且很多组件在屏幕的边缘   
而这两点在VR中都是很难被接受的。首先,如果距离太近,会让用户的眼睛无法聚焦。其次,VR中的屏幕不是矩形的,边缘一般比较模糊,所以把UI放在边缘会看不清楚;而且如果位置还是固定的,不受视野控制,那就更不自然了 ———— 用户会因为看不清楚而本能地转头去看,而即使转头,它的位置还是在边缘。

1.3 用什么替代HUD

答案是立体UI。也就是说UI不再集中于一个平面。比如用户在观察一件展品时,展品的上方漂浮着一段文字描述(也可以是图片、视频),这种UI和虚拟世界中物体联系很紧密,用户能很直观地感受到它在描述哪件物品;还有种做法是在不遮挡视野的地方显示信息。比如在远方的天空放置一个平板,用户一抬头就能从上面看到当前场景的信息以及得分情况。这种UI适合展示不需要经常查看的信息。 
    如果要显示和场景中物体无关而且需要经常查看的UI,就需要用到Vive手柄了。举几个例子,Tilt Brush中右手是画笔,而左手是调色板(一共有4个功能不同的面板,比如调色、更换画笔和场景、存储照片等等,通过旋转左手可以看到不同的面板);Raw Data中手枪上有个数字显示剩余弹药(漂浮的3D文字);在Budget Cuts中,点击菜单键后手柄上会出现一个物体栏(物品栏中会出现现有物品的模型,可以用另一只手把它们拿出来)。注意,这些UI元素的形状也是立体的,它们有的是3D文字,有的是模型。

2. 与场景互动

2.1 Vive手柄介绍 
    除了视野和位置的控制是由头盔完成,Vive的主要输入方式是通过手柄。手柄在输入方面一是提供手的定位和定向,使得玩家的双手的位置、手柄的方向、手心的朝向都可以体现在VR中;二是提供了这几个按键:

(1)扳机键(trigger):最重要的按键,相当于键盘上的回车键。一般单击用于确认选择、开枪;按住不动用来拖拽、给气球打气,持续地开枪等等。

(2)侧键(grip): 用得频率较少,可以用来实现紧握,比如紧握一根树枝。也可以用来激活物品或者触发事件。

(3)菜单键(application menu):最好用来弹出菜单。比如程序或者游戏的设置菜单、物品栏。

(4)触摸板(touchpad):最灵活的按键。硬件上它支持的功能有两个:获得触摸点的坐标以及响应按键消息。这个键很重要,因为: 
   a. 相比其他的按键,它不但能知道用户何时按下了按键,还能知道手指在什么位置按下的(通过一个二维坐标,x,y的取值范围都是[-1, 1]) ;
   b. 即使不按下这个键,也能获得触摸点坐标,因此可以用于做简单的手势识别(比如上划、右划) ;
   c. 这个键用拇指按很轻松。 
   在现有的应用中,触摸板被用来换子弹、选择技能、更换工具、调节音量、瞬移(teleport)。

(5)系统键(system button): 这个键是用来开启手柄电源以及呼叫系统菜单的,设计程序时一般情况下不要用到它。

2.2 选择物体

(1)激光选择。从手柄(或者其他自定义的手的模型)处射出一道激光,被激光指到的物体放大并高亮,然后按trigger键确认选择。举个例子,按下菜单键后在用户现在的视野正前方产生一个设置窗口,手柄此时射出一道绿色激光,被激光射中的控件会放大并高亮,此时按trigger,效果就像是用鼠标点击了一下此处(适用于按钮、进度条、文本框等控件)。

(2)触碰选择。如果物体距离用户比较近,也可以使用触碰选择,当手柄接触到某个物体后,让这个物体高亮,等待用户按trigger键确认。

3. VR应用的UI

VR中工具类的应用可以用到平面UI。

3.1 平面UI示例

下图是Steam Dashboard在VR中的效果: 

可以看到如同非VR的应用一样,SteamVR的主要UI都放在一个panel中。不同之处在于,这个panel现在搁置在一个3D世界里,有透视效果;另外输入方式改成了用手柄上射出的激光去指。

之所以用平面UI,是因为这种方式早已经被人们所习惯,而且已经积累了很多经验。另外一个好处是它能在小面积内放下大量同类型的UI元素,比较适合做视频列表、游戏列表、主菜单之类的界面。

3.2 浸入式体验

在开始浸入式的体验之后(比如切入到一个纯3D的场景、游戏、或者全景视频),就不能把平面UI放在用户的视野正前方了。这时可以参考上面"用什么替代HUD"一节所讲到的立体UI。还有一个方法是当用户按下某个键时弹出一个平面菜单,这需要适当的引导————可以在应用开始时告诉用户怎么操作;也可以加上文字解释,让用户看向自己的手的时候,会发现手柄的按键旁边都有一行小字解释这个键的作用。

在Vive Cinema中,应用开始时是一个平面的视频列表,用户可以选择播放哪个视频、用什么方式播放(平面、360度还是180度?是否是立体视频?),选择完视频后,UI都会隐藏起来,开始浸入式播放。这个时候如果按菜单键,会在视野正前方生成一个平面的窗口,在上面可以调整进度,或者选择退出视频。

4. 参考资料 
[uxofvr.com](http://uxofvr.com)

[教程资源] HTC Vive UI Guideline相关推荐

  1. unity 开发HTC vive UI的交互

    在HTC的VRTK插件里UI的交互最常见的就是依靠手柄发出一条射线然后和界面进行交互. 在VRTK里发出射线的脚本有两个VRTK_SimplePointer脚本和VRTK_BezierPointer脚 ...

  2. Htc Vive VR 手势识别插件教程 1.1 版本(附1.0版本教程PDF)

    VR手势识别插件教程1.1.1版本 VR手势识别插件教程1.1.1版本内容提纲 Htc Vive VR手势识别插件教程1.1.1版本.................................. ...

  3. HTC Vive unity 教程【转载】

    原文:HTC Vive Tutorial for Unity 作者: Eric Van de Kerckhove 译者:kmyhy HTC Vive 是一个虚拟现实头盔,由 HTC 和 Valve 公 ...

  4. Unity3D 开发 HTC Vive安装及如何连接电脑详细教程(全程图解)

    HTC Vive安装及如何连接电脑详细教程: 在市场上的诸多VR产品当中,htc Vive无疑是体验最佳的设备之一,不过在享受高端硬件带来美妙沉浸感之前,必须要经过一段略微复杂的"手续&qu ...

  5. HTC VIVE开发实例教程-邵伟-专题视频课程

    HTC VIVE开发实例教程-1971人已学习 课程介绍         HTC VIVE开发实例视频培训教程,我们相信学习VR技术与学习任何其它技术具有相通性,通过一定的刻意练习,后发现一个方法论和 ...

  6. 如视VR显示连不上服务器,HTC Vive播放本地视频图文教程(附常见问题解决办法)...

    由于需要连接电脑设备,因而部分新手用户不懂如何使用HTC Vive播放本地视频.实际上整个操作并不复杂,只需要用到Vive Cinema播放器即可.Vive Cinema是HTC VR New Tec ...

  7. Htc vive Unity 新教程

    Htc vive Unity 新教程 晋中职业技术学院 智祥明 我使用的Unity版本为Unity 2017.4.40c1:SteamVR版本为1.15.12 :SteamVR Plugin 为2.6 ...

  8. HTC VIVE开发教程(一)

    在这一节,我介绍的主要内容有 HTC VIVE的安装与入门 VIVE插件的结构目录 学习VR有一段时间了,在这段时间里我对HTC的vive还有Oculcus都进行过一定的研究,也开发出了几款VR项目, ...

  9. HTC VIVE开发教程(五)

    前面几节我们了解了SteamVR的基本原理,现在可以进行实战开发了.但在进行VR开发前,我还要先介绍一套强大的VR开发工具--VRTK 在进行VIVE开发时,我们经常要用手柄进行一些操作,比如监听按键 ...

最新文章

  1. 高德亿级流量接入层服务的演化之路
  2. 解决IDEA中进行maven install报:系统资源不足的问题
  3. synchronized底层是怎么实现的?年薪超过80万!
  4. JS组件系列——开源免费图表组件:Chart.js
  5. ASP.NET MVC区域
  6. HALCON示例程序rim.hdev轮圈孔检测提取字符
  7. .net core redis 驱动推荐,为什么不使用 StackExchange.Redis
  8. python自动化办公模块有哪些-Python自动化办公知识点整理汇总
  9. 安卓开发应该知道的Drawable、Bitmap、Canvas和Paint的关系
  10. matlab|已知多点坐标,求两两之间的距离
  11. 渗透测试工具——BurpSuite
  12. 咪咕音乐客户端免费版
  13. ftp下载工具 免费,7大值得推荐的免费版ftp下载工具
  14. centos 7.5 安装ruby -bash: ruby: command not found
  15. websocket断开重连解决方案,基于子慕大诗人博客修改 健壮强化版
  16. 软件日企工作感想,目前刚到账两周
  17. 动态域名解析服务(花生壳)
  18. 被裁掉的大龄程序员,为什么不联合起来成立一个专收大龄程序员的公司?
  19. 生产注意事项(分片集群)
  20. Spring5 里边的新玩法!这种 URL 请求让我涨见识了!

热门文章

  1. 2021软件测试面试题大全(78题含答案解析)
  2. 使用Apriori算法寻找频繁样式(Frequent Patterns)
  3. 风险评估等级计算机化系统分类,计算机化系统风险评估报告
  4. 嵌入式Linux:安装Ubuntu系统环境
  5. 混战多年,K12在线教育的故事讲到哪了?
  6. LWIP源码分析——ip4.c
  7. 2019数据安装勾选_如何安装勾选认证平台安全控件,以及如何勾选认证发票
  8. 【视频开发】ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)
  9. 百度地图离线开发demo(热力图)
  10. 计算机考研怎么计划,计算机考研复习计划怎么制定