Unity VR游戏开发干货教程:VR中的用户界面

在设计VR应用的用户界面时要考虑很多因素,而这些因素对于传统应用或游戏的界面设计可能都不是事儿。下面我们会看看作为一个VR开发者在设计用户界面时可能会遇到的一些问题,以及跟硬件相关的一些东西。

UI分辨率和画质

目前DK2的分辨率是1920*1080(单目是960*1080),而Gear VR是2560*1440(单目是1280*1440),因此对任何在宽度或高度上要占据几个像素的物体,都会出现比较明显的像素化现象。

其实特别要注意的是UI元素,记住它们在屏幕上要显示的大小。一个简单的原则是尽量使用大一点字体或粗体字,另外就是尽量不要使用在VR场景中容易变得像素化的细纹。

UI的类型

Non-diegetic(非剧情型UI)

在传统的非VR项目中,UI通常显示在界面的顶部,用来显示生命值、得分之类的信息,通常被称为HUD。这就是所谓的非剧情型UI-用户界面跟游戏世界没有什么关联度,但是对玩游戏的玩家有一定的作用。

在电影中也有所谓的“画外音”,比如电影或电视中的背景音乐。与此不同的是,剧情音通常跟故事紧密相连-比如角色之间的对话,或是实际发生的自然音效。

在Unity中,添加HUD样式的非剧情型UI相对简单,只需要在UI Canvas的Render Mode中选择使用Screen Space- Overlay或是Screen Space- Camera。
 


但这种UI界面对VR基本不适用,我们的眼镜无法聚焦在如此近的物体上,而Unity VR中根本就不支持Screen Space-Overlay。

Spatial UI(空间UI)

和前一种UI不同的是,我们需要将UI放置到环境之中,并在Canvas的Render Mode中选择使用World Space模式。通过这种方式,就可以让用户的眼镜聚焦到UI上。这就是所谓的Spatial UI(空间UI)。
 


将UI元素放在世界的哪个位置也需要认真考虑。太靠近用户会导致眼部疲劳,离得太远会感觉聚焦在地平线上-这种情况可能发生在室外环境,而不是在小屋子里。此外我们还需要对UI的比例进行适当调整,具体要根据产品的实际需求来定。

我们最好把UI放在一个舒适的可读距离,并进行相应的缩放。关于这一点可以参考Main Menu场景中的UI:它被放置在几米远的位置,因此图片和文字都比较大,看起来很舒服。

当我们把UI放在离用户有一定距离的时候,可能会发现UI重叠到其它物体上。关于这一点可以查看上一篇教程,看看如何修改shader让其绘制在其它对象上,或者直接使用VR Samples项目中的shader。这个shader也适用于文本。

很多开发者想要把UI关联到摄像机上,这样当玩家移动的时候,UI会保持在一个固定的位置。这样做对十字准星或其它小物体可能会比较合适,不过对于比较大的UI元素,就好比把一张报纸放到你的脸上,很容易让用户感到不舒服,甚至是眩晕。我们可以看一看Shooter 360(Target Arena)场景中的UI,其中UI会在一个较短的延迟后移动到视野中,从而可以让用户四处查看进而熟悉身边的环境,而不是直接把UI固定到他们的视野中,导致视觉模糊。
 


虽然VR可以让用户探索360度沉浸式环境,不过有时候我们需要提醒用户关注某个特定的方向。在某些场景中,我们使用世界中的箭头来帮助引导用户的注意力。这些箭头会根据用户的朝向来淡入淡出。

这些功能可以在GUIArrows 预设中找到,而且很容易重用。其工作原理是比较用户头部和目标方向之间的角度。如果头部在预设角度之外(参考下面GUIArrows组件的Show Angle),箭头就会淡入。当用户向目标的方向注视时,箭头就会开始淡出。
 


Diegetic UI(剧情型UI)

Spatial UI的替代方案是让环境中的物体自行向用户展示信息。具体的形式可能是墙上的闹钟,电视、计算机屏幕、移动手机,或是未来枪械的全息展示。手游转让平台这就是所谓的剧情型UI。

下图展示了Flyer场景中的太空飞船,以及Shooter(Target)场景中的枪支。


虽然这种交互不算严格意义上的剧情型UI,但是将用户界面跟游戏对象关联在一起,可以让我们大概了解Unity的剧情型UI是如何工作的。

UI交互

通过使用Interaction in VR一文中所提到的VREyeRaycaster, VRInput和VRInteractiveItem,我们可以创建基本的UI交互元素,具体方法是创建一个订阅VRInteractiveItem事件的类。

关于这一点的更多信息,可以参考上一篇教程,特别是Maze场景中的switch。此外,在VRSamples中每个游戏的开始,我们都使用了UI交互指导用户。

VR Samples场景中的UI

接下来让我们看看以上所提到的概念在VR Samples场景中的具体实现:

Menu(菜单)场景
 


Menu场景中的UI使用了定制的纹理来创造一个弯曲的密封环境。可以使用Interaction in VR一文中的相同方法跟这些纹理进行交互。

Flyer场景

游戏简介和游戏结束的UI使用静态的方式放置在世界空间中。
 


不过为了呈现跟游戏相关的信息,我们可以使用跟太空飞船关联的世界空间UI,也就是剧情型UI。

考虑到飞船必须时刻出现在用户的视野中,因此在飞船四周显示相关信息是靠谱的。
 


与此同时,UI元素会旋转以面向摄像机,这样就会避免倾斜,同时确保UI的显示对用户友好。

Maze场景

在Maze 场景中,我们使用Spatial UI来提供游戏引导和结束。
 


Spatial UI还可以用来提示用户进行交互:
 


Shooter 180(Target Gallery)场景

在游戏引导和结束部分,我们再次使用了静态的Spatial UI.
 


正如上面所提到的,我们在枪支上使用剧情型UI来显示倒计时和得分。
 


Shooter 360(Target Arena)场景

在这个场景中依然使用了Spatial UI,不过做了一些小的调整:当360度竞技场中发生了某个动作,比如当用户四处查看环境时,我们会让UI元素在经过一个短时间的延迟后移动到视野中间。通过这种方式可以让用户知道四处探查所处的环境。
 


在枪支上我们再次使用了剧情型UI。
 


VR中的文本抗锯齿

为了在VR世界中实现免费的文本抗锯齿效果,这里有一个小技巧,在Worldspace Canva中使用Canvas Scaler。在相关设置中,我们需要将”Reference Pixels Per Unit”设置为1,然后调整”Dynamic Pixels Per Unit”,直到文本的边缘柔化。在下图中,我们可以看到不同设置的实际显示效果。
 


看完本教程,我们对不同的用户界面应该有了基本的概念,也知道在VR中应该使用哪种UI。当然,我们还可以使用VREyeRaycaster,VRInput和VRInteractiveItem来创建基本的UI交互。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29000.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SR Works】使用HTC Vive Pro结合SteamVR在Unity中制作MR内容

HTC Vive Pro有两个前置RGB摄像头,官方出了一套SR Works SDK来借助这两个摄像头实现MR功能。 本篇的目标是,成功运行官方的MR示例,并结合SteamVR和SR Works SDK在Unity中实现MR项目的开发准备 1.下载SRWorks插件 下载地址: Late…

公司普通启动VR/AR软件开发虚拟场景游戏

随着元宇宙技术的不断革新,VR作为一种新兴技术,正在迅速普及。VR软件开发技术将用户沉浸到虚拟世界中,让人们可以身临其境地体验一些事物,如元宇宙游戏、商圈、展会、旅游等。而VR虚拟场景的开发,则是实现这一目标的重…

《SteamVR2.2.0交互系统(Interaction System)》(Yanlz+Unity+XR+VR+AR+MR+Valve+Teleport+Skeleton+立钻哥哥++ok++)

《SteamVR2.2.0快速入门》 《SteamVR2.2.0快速入门》 版本 作者 参与者 完成日期 备注 SteamVR2.2.0_Interaction_V01_1.0 严立钻 2019.04.11 ##《SteamVR2.2.0快速入门》发布说明: “SteamVR2.2.0快速入门”:是对“Stea…

怎么才能把短视频中文配音变成英文配音?

中文视频的类型 首先,将中文视频翻译成改为英文的视频,这是一个比较复杂的过程, 这里面还涉及到几种情况,下面简单罗列下: 第一种:带中文解说和中文字幕的视频; 第二种:只有中文解说…

Go Web下gin框架的模板渲染

〇、前言 Gin框架是一个用于构建Web应用程序的轻量级Web框架,使用Go语言开发。它具有高性能、低内存占用和快速路由匹配的特点,旨在提供简单、快速的方式来开发可扩展的Web应用程序。 Gin框架的设计目标是保持简单和易于使用,同时提供足够的…

【VINS-Fusion】学习笔记

配置文件-config\euroc\euroc_stereo_imu_config.yaml %YAML:1.0#common parameters #support: 1 imu 1 cam; 1 imu 2 cam: 2 cam; #1个mui,双目相机 imu: 1 num_of_cam: 2 imu_topic: "/imu0" image0_topic: "/cam0/image_raw" im…

Qt6教程之三(3) QtWedget自定义控件

在之前的博客中,我们使用的控件都是Qt官方提供的,对于控件的特性也只能被动地接受,为了打破这种束缚,可以按照自己的想法来定义控件。 不过自定义控件必须遵守Qt官方的一套自定义控件规则,在规则之下我们就可以定义属…

基于TextRank+Seq2Seq+Pyqt5文章摘要标题关键词辅助生成系统(含全部python工程源码)+训练数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境TextRank环境TensorFlow环境PyQt5及Qt Designer运行环境 模块实现1. 数据预处理2. 抽取摘要3. 模型搭建与编译4. 模型训练与保存5. 图形化界面的开发6. 应用封装 系统测试1. 训练困惑度2. 测试效果3. 模型应用 工…

基于langchain-chatglm本地知识库得部署

项目的技术组成 LLM模型 大型语言模型(LLM,是large language model)是一种人工智能模型,旨在理解和生成人类语言。它们通过在大量文本数据上进行训练,能够执行多种任务,包括文本总结、翻译、情感分析等。L…

电信卡流量套餐超40G后,该如何解除网速限制?

在和朋友开视频的时候,朋友那边忽然网络中断了,过了会他给我发了一张图片过来,图片如下: 朋友的手机是电信的, 然后我们就在网上查各种解除限制的信息,首先我们按照短信上的提示发送SWFJ到10001&#xff0c…

流量控制与RateLimiter

一背景 如何提高系统的稳定性,简单来说除了加机器外就是服务降级、限流。加机器就是常说的分布式,从整个架构的稳定性角度看,一般SOA每个接口的所能提供的单位时间服务能力是有上限。假如超过服务能力,一般会造成整个接口服务停顿…

异常流量检测

项目目标是为了检测网络异常流量,防止网络攻击行为,本人参与了初期的工作,进行了文献阅读-数据处理-模型构建-参数优化工作。 网络攻击行为主要分为Dos、U2R、Probe等,其对应的流量异常特征为集合异常、点异常、上下文异常。 点异…

网络流量监控分析工具ntopng的安装与使用

我写这篇文章的起因:网上介绍ntopng这款工具的博客不算很多,而且安装方法基本没一个行得通(可能是版本更新太快了),我在安装过程中遇到了一些问题,想跟大家分享下;其次,在讲使用方法…

流量异常检测

https://mp.weixin.qq.com/s/9h-hOt630W6k077Rupc9CA 流量异常检测主要有以下三个难点: 流量的大小会随着用户行为发生变化。对于大部分百度云上的业务,白天的访问流量较高,深夜的访问流量较低。这使得流量水位值存在上下文相关性&#xff0…

Android应用流量统计——NetworkStatsManager使用

在没有Root的情况下,Android应用流量统计在6.0之前一直没有太好的办法,官方虽然提供了TrafficStats,但其主要功能是设备启动以来流量的统计信息,和时间信息无法很好的配合。最近再看TrafficStats类时,发现说明中提到&a…

仿设置流量使用——细讲android获取流量使用情况,以及解决调用流量接口不准问题(非TrafficStats,而是NetworkStatsHistory)

不积跬步无以至千里 流量使用情况,好多软件都会带这个功能,比如360的流量监控,好多之类的,手机管家都会带上这个流量计算的功能,连系统应用设置里面也会带一个流量使用情况的查看功能,为什么呢?因为流量的使用关乎到用户使用流量的计费,当流量使用了很多,会给用…

vnstat流量统计(2.8版本)

vnstat流量统计(2.8版本) vnStat 是一个基于控制台的 Linux 和 BSD 网络流量监视器,它为所选接口保留网络流量日志。它使用内核提供的网络接口统计信息作为信息源。这意味着 vnStat 实际上不会嗅探任何流量,并且无论网络流量率如…

中职流量包分析attack/capture(1)

我希望网络安全的世界大家可以贡献自己的一部分,而不是拿来自私自利 作者拿到的流量包和题目是有出入的,但是因为出的题大同小异所以能分析出来 attack 1. 分 析 attack.pcapng 数 据 包 文 件 ,通 过 分 析数据 包 attack.pcapng 找出恶意…

抓包部分软件时无网络+过代理检测 解决办法 安卓黄鸟httpcanary+vmos

解决软件抓包时无网络和代理检测🚀 需要准备的工具: 安卓手机 vmos pro 需要抓包的软件 第一步:下载好相应版的本的vmos room 第二步:文件中转站->我要导入->导入对应真机需要抓包APP 第三步:测试软件在vmos…

测试apk-异常管控NetTraffic攻击者开发

1. 目的 基于《软件绿色联盟应用体验标准》中 NetTraffic 资源的定义,对 NetTraffic 后台多次小流量数据包的行为模拟。旨在触发手机中异常功耗管控机制。 本次灭屏NetTraffic使用次数至少超过的二个等级:30次,60次,执行如下判断: 绿线不管控…