vr女友 steamm vr 场景比例怎么调整

你真的了解PS VR的120Hz刷新率?
▼点击下方收听音频
你真的了解PS VR的120Hz刷新率?
来自百度VR
VR虚拟现实第一媒体VR日报原创稿件,转载请注明出处
 
 PlayStation
VR于日面向中国大陆地区开放预约,短短数小时时间即宣告售罄,让人们不得不承认索尼的巨大号召力。而在短短四天之后,也就是8月2日,PlayStation中国官方微博@PlayStation中国发布微博,宣布正在积极筹备第二轮预约活动并将尽快开启。
 索尼PlayStation VR是不是真的只是依靠PlayStation游戏主机的号召力来拉动销售呢?答案显然是否定的。
 在官方公布的PlayStation VR详细配置中,有一个参数明显在目前三大主流虚拟现实头显中占据领先地位——刷新率为120Hz,比HTC
Vive和Oculus
Rift高了30Hz。在虚拟现实头显的参数中,这一数据决定了眩晕感的强弱,因而消费者们纷纷表示“索尼大法好,快点把我的钱拿去吧”。
 虚拟现实头显的120Hz的刷新率有什么优势?
 相信所有体验过vr眼镜的读者都会有过这样的感受——眩晕。
 眩晕被称作影响虚拟现实发展的几大拦路虎之一,目前市场上主流的几大头显都没有从根本上解决这个问题。
 出现眩晕的原因是多方面的,人体的生理机能、头显的刷新率和帧数、VR应用的制作质量等等,都会造成眩晕的出现。目前,人类能够有效实现改观的大概只有屏幕的刷新率这一项了。
 刷新率和帧数
 刷新率,指显卡将显示信号输出,屏幕刷新的速度,比如60Hz就是每秒钟显卡向显示器输出60次信号,由屏幕决定。
 帧数,是指画面改变的速度,60fps就是每秒钟显卡生成60张画面图片,由显卡决定。
 这两者是相辅相成的,也就是说,当帧数和刷新率都能做到高数值而且能够同步的时候,就能实现很好的虚拟现实体验。打个简单的比方,就好像显卡能够告诉的翻书,屏幕能够很好的跟上翻书的速度,就能很好的读完一本书。
 解决了刷新率,就能有效降低画面渲染延迟,降低了延迟,画面才能最大程度地跟随用户的脑部运动而变化,继而效缓解眩晕的情况出现。
 对于PlayStation
VR来说,作为一家游戏主机厂商,即便通过牺牲分辨率来大幅提升刷新率以保证游戏流畅性,是由索尼“为玩家提供更好的虚拟现实体验”的理念决定的。相对来讲,HTC
Vive和oculus rift更多的是承担的更宽广的VR解决方案的任务。
 在游戏体验上,PlayStation VR没有退路,必须要让自己做到三大头显中的最好,不然会挨骂的。
 PlayStation VR的120Hz的刷新率是真是假?
 中国有句古话:假作真来假亦真,用来形容PlayStation VR的120Hz刷新率是最合适不过了。PlayStation
VR是通过Asynchronous Reprojection 的辅助做到120帧游戏显示的,注意——是辅助,做技术的人,怎么能说是假的呢?
 PlayStation VR屏幕其实是支持三种显示模式的:
 原生120hz
 PlayStation
VR确实有真的原生120hz的显示刷新率,但这种模式要求开发者对应用的优化做得足够好,或者应用本身就对机能的要求不高,而这种情况往往是不太可能出现的。
 原生90hz,后期推出的新固件支持的新模式
 90hz的刷新率同htc vive和Oculus
Rift的刷新率一样,想必就是索尼做出的一个妥协方案,有助于帮助开发者更好更积极的为PlayStation
VR生产内容。当开发者发现自己的应用能轻松的超过超过60Fps,但又很难达到120Fps,就可以选择折中的90Fps为目标,这是为开发者留出的一个漏洞,也是为索尼自己留出的一条退路。
 原生60hz,通过 Asynchronous Reprojection 转换成120Hz
 原生60Hz,通过异步重投影技术实现120Hz。噱头非常足,所以最吸引大家的眼球,反而没那么关注两外两个显示模式了。当然,这个方法一定是有其缺陷的,不然索尼也就没必要推出另外两个模式了。
 Asynchronous Reprojection的实现
 在应用使用过程中,渲染画面所耗费的机能是非常大的,也是比较消耗时间的。虚拟现实头显对于延迟的要求非常高,如果在画面渲染上花费时间过长,画面传回头显内的显示屏上时错过了当前帧的同步,就会直接跳往下一帧,用户会晕的昏天暗地。
 PlayStation VR的1000hz传感器,在每一毫秒里都会提供新的位置信息。Asynchronous
Reprojection利用每两帧之间画面几乎非常接近的特点,用尽量小的机能消耗来生成对应当前人眼位置的画面。用户则能够在下一帧画面刷新之前,看到扭曲过的和最新的位置数据最接近的一帧画面,以暂时对应头部数据。
 所谓异步,就是将上述线程和图像渲染处理线程分离开,是把这个线程和图像渲染线程分离开来。因为如果这两个线程顺序进行,由于可能出现画面渲染尚未完成的情况,造成Reprojection也被延后,但帧同步是固定时刻进行的,那么Asynchronous
Reprojection就失去意义了。也就是说,所谓异步重投影,就是一帧是真实的,而下一帧是根据上一帧画面扭曲生成的。
 虽然异步重投影有效的解决了帧率不够的问题,但并不是说完美的,这种方式有其本身的缺陷。
 位置改变抖动
 
 当头部发生位置改变而不仅仅是方向改变的时候,复杂都会有极大上升,这也是异步重投影最容易出现问题的地方。异步重投影生产帧画面时只考虑了方向的改变而忽略了方位的改变,那么原本被挡住的地方的画面就会展现在用户眼前,但上一帧画面却根本没有被挡住的地方的数据。离场景很近近的用户就会看见画面中的物体会有多个图像的抖动。
 运动物体抖动
 
 当画面中有移动动作比较大的物体的时候,在异步重投影条件下,因为当前帧是根据上一帧画面扭曲而来,所以这个物体在画面中还在原来的位置,这个物体虽然相对你的大脑理解位置还是正确的,但当画面继续进入再下一帧的时候,就会出现抖动的现象。
 镜面反射抖动
 
 计算镜面反射需根据用户的眼睛或摄像机向量得出结果,进而生成一帧画面。但在眼睛或头部发生运动的时候,镜面反射数据不再正确,画面扭曲却并没有去考虑这个问题,这就会导致镜面反射抖动。基于这个原理,其他依赖于眼睛位置的着色技巧也会遭遇类似问题。
 结 语
 PlayStation
VR的120Hz高刷新率是其产品定位的结果,并不能说明另外两家头显在技术上弱于索尼。正好相反,Oculus在异步重投影上的技术积累比索尼更强,HTC也多次强调会加强对异步重投影的运用。
 但是必须要承认,PlayStation VR的120Hz高刷新率在游戏体验的效果增强上是非常明显的,毕竟索尼将技术真真实实的运用到了产品上不是。
 对于开发者来说,异步重投影是为了在机器性能跟不上和应用画面卡顿时,照顾用户大脑对现实世界理解的一种显示方式。如果开发者能够将优化做得足够好,直接选用原生120Hz才是真正的大法呢。
 VR日报,微信搜索公众号“VR日报”,微博@VR日报网,转载请注明版权
来源:VR日报
声明:所发布的内容均来源于互联网,目的在于传递信息,但不代表本站赞同其观点及立场,版权归属原作者,如有侵权请联系删除。
百度VR等你来<div id="click_content_aid_
<div id="favrite_content_aid_
VR游戏需要怎样的显卡?十三款显卡挑战Steam VR性能测试工具
VR游戏需要怎样的显卡?十三款显卡挑战Steam VR性能测试工具
14:44&&|&&作者:
&&|&&关键字:,
在没有VR眼镜的情况下怎么才能知道自己的电脑能不能流畅运行VR游戏呢?最近Steam推出的VR性能测试工具就能帮到大家。
大家都说今年2016年是VR元年,现在Oculus Rift、HTC
Vive都开始预售了,接下来会有更多各种各类的VR头盔出现在市场上,相信有不少发烧玩家已经准备剁手买一副回来抢先体验了,但是在座的应该都清楚要爽玩VR的话PC配置是有一定的需求的,然而在没有VR眼镜的情况下怎么才能知道自己的电脑能不能流畅运行VR游戏呢?最近Steam推出的VR性能测试工具就能帮到大家。Steam VR Performance
Test是Valve在Steam平台上推出的PC性能测试软件,它将通过一段时长约为2分钟、由Valve所制作的《光圈科技机器人维修VR展示》来评估PC的整体性能,判断对应的硬件平台系统能否达到90FPS的帧率,以及VR内容的视觉效果能否够达到推荐水平。最终测试结果会分为未准备就绪、可胜任以及准备就绪三个等级,未准备就绪则意味着对应的平台存在性能瓶颈,无法流畅使用VR眼镜;可胜任则意味着对应平台基本符合要求,但是表现差强人意;准备就绪则意味着PC硬件满足VR眼镜的性能需求,用户可以获得较好的使用体验。Steam
VR性能测试是以测试的平均保真度来统计成绩的,而保真度与下面的“已测试帧数”并没有直接的关系,根据我们的测试结果这个保真度最大值是11,是用华硕的ROG GTX
980 Ti跑出来的。测试场景:如果有玩过《传送门》系列的朋友一定会对这个场景非常熟悉,其实HTC
Vive在展示时用的也是这个demo,只不过HTC的展示demo是可以用手柄进行互动的,视角也可以随你而动,而Steam VR性能测试你只能看着它运行。我们过Oculus Rift DK2来进行尝试看看这个Steam
VR性能测试是否能在VR头盔上运行,而结果让人失望,这个软件只能在显示器上显示,不过作为一个测试软件这倒是没啥问题,正好适合给大家看看自己的电脑适不适合VR头盔。另外这个测试有个很有趣的地方,就是即使你看到的画面相当的流畅,但是出来的结果有可能还是很低,因为测试是判断你的机器能否保持90fps的运行帧率,一旦出现低于90fps的帧数就会严重影响你的评估结果。人眼看电脑屏幕的话60fps与90fps是没多大区别的,然而当两个屏幕贴到你眼前的时候,帧数不足的话则有可能引来眩晕感。那么到底要多强劲的平台才能流畅的运行VR游戏呢?今天我们就来实际测试一下。
测试平台与说明由于VR游戏的需求远高于传统的游戏,所以我们为此准备了相当强劲的测试平台,使用Core i7-5960X八核处理器,华硕X99
Deluxe主板,DDR4-2800MHz 4GB*4内存,系统盘是闪迪Extreme Pro
256GB,测试的显卡数量太多大家直接看上面的表吧,N卡基本上从中端的GTX 750 Ti到次旗舰的 Ti都有,而A卡则是从R9
370X一直到Fury nano。测试用的是操作系统,驱动程序都是最新的NVIDIA GeForce 361.91 WHQL和AMD Catalyst 16.2。
显卡性能测试测试结果如上图所示,图中绿色的是“准备就绪”的显卡,黄色的是“可胜任”的显卡,红色的是“未准备就绪”的显卡。就如Oculus所推荐的那样,要玩VR至少得起步,它和R9 390、R9 390X和Fury
nano一样都获得了“高”的评价,可以完全胜任高保真度VR,而和的评价是“非常高”,性能远高于高保真VR的所需配置。 4GB、R9 380、R9 380X的评价都是“中等”,性能可以运行中保真度VR,GTX 960 2GB、GTX
950的评价是“低”,仅能运行低保真度的VR,用这些显卡的系统可能有部分软件需要降低视觉保真度来达到足够的帧率。和GTX 750 Ti出来的结果是完全不兼容VR,性能太低了,连低保真度VR都不能运行,是时候升级显卡了。
CPU性能测试Steam VR性能测试对显卡的要求是挺高的,但是对CPU的要求倒是非常的低,对Core
i7-5960X不断的关核降频,出来的结果基本上都没啥区别,最后我们把处理器关到只有双核双线程,主频1.8GHz,然而测试出来的保真度和8和16线程时没啥区别,看来测试场景对CPU的要求并不高。当然了Steam
VR性能测试对CPU的要求不高并不代表实际的VR游戏对CPU没要求了,毕竟这个测试用的图形引擎已经是很多年前的了,而且测试场景要CPU运算的东西也不多,感觉用它来衡量VR游戏对CPU性能需求并不靠谱。
VR游戏需要怎样的显卡?虽然说Steam VR性能测试对CPU的测试结果不怎么有用,但是确实相当有参考价值,我们可以用这个结果来做出显卡对VR游戏需求的天梯图:要流畅的享受高质量VR游戏你至少需要一张级别的显卡,性能高于它的R9 390、R9 390X、Fury
nano和、更是毫无问题。而如果只要求能玩VR游戏的话其实千元级的GTX
950勉强也是可以的,不过基本上你都要享受最低的画面效果,而性能比还差的显卡就基本没救了,硬来的话你就得忍受眩晕特效了。当然了Steam
VR性能测试充其量也只是一个参考,实际的性能需求当然会根据不同的游戏而有所变化,这个测试也只是给玩家们一个最基本的了解,VR游戏的画面达到了4K级别,帧数也得达到90FPS,这样确实需要是需要一块性能相当优秀的显卡,NVIDIA也说过沉浸式VR体验对性能的要求是普通PC游戏的7倍之多,是时候升级你们的装备迎接VR时代了。
关注微信号expkf01,第一时间获知精彩活动和原创科技资讯。
第一时间获知
精彩活动和原创科技资讯
微信号expkf01
本文读者还喜欢
Strike&版主&:刚拿了780Ti去试了下,只有3.5分,死因是显存不足,是时候换了
还好当时买的290
刚拿了780Ti去试了下,只有3.5分,死因是显存不足,是时候换了
从970、980的表现来看,4G显存应该足够了
950和760都半斤八两了,你怎么会有不如7850的印象。。
测760、770不怕被老黄干掉吗
(你可匿名或登录后发表评论。没有帐号可,或使用和直接登录)
爱玩(坏)硬件,SSD专精,爱玩游戏,沉迷PSVita中,不作死就不舒服星人。
扫一扫右边的二维码
关注超能网微信账号
讯景RX480 4G显卡1399元,8G版1699元
奥睿科USB多口充电器,28元/个
双十一都有些什么值得买买买?
讯景RX 480 4G显卡1449元~老人有些困倦,将双脚伸进了炉堂取暖。
哪知气温骤降,海浪一波波往上冲刷着车辆。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
  2月29日北京时间晚10点整,HTC Vive正式开启了预售。据其内部人士称,仅10分钟后Vive的销量就突破了15000台,结合其高达699美元的高昂售价来看,似乎VR已经成为了极客和高端玩家们竞相追捧的热饽饽。
  作为HTC Vive的两个头号竞争对手,Oculus Rift早在1月就已开始了预售,而PS VR也已是蓄势待发。目前三家VR设备发售进展情况如下:
  HTC Vive Oculus Rift PlayStation 4 VR
  发布日期 2月22日 1月5日 3月15日
  预售日期 2月29日 1月7日 未知
  首批发货日期 4月5日 3月28日 未知
  售价 799美元 599美元 未知
  游戏内容之争
  既然各大VR硬件都已陆续进入发售期,那么我们关心的下一件事自然就是软件内容了。
  目前VR还尚处于发展初期,主要的应用场景仍然在游戏和视频。和主机平台一样,相对视频而言,游戏的数量和质量在设备的选择上将更具话语权,今天我们就先来看看在游戏端各大VR厂商都已如何发力。
  HTC Vive
  近日,外媒finder公布了HTC Vive首批支持的124款游戏,其中不乏有Valve的当家之作《半条命》系列游戏以及《军团要塞2》。虽然V社的看家作品能够登录VR平台是值得游戏玩家们激动一番的,但毕竟是多年以前的产品了,对于大多数玩家而言他们更关心的是哪些新晋大作能够在VR上大放异彩。
  从这份列表中我们能够看出以下几点信息:
  在对Steam VR的支持上,Valve的确下足了功夫。除了可以预见的模拟类、动作类和FPS类游戏外,甚至连即时战略类游戏都包含在内
  除了经典的《半条命》系列作品外,其中不乏许多近年推出的游戏,比如《异形:隔离》、《饥荒》和《英雄连2》等
  在这份外媒列出的124款游戏中还混入了几款APP,而且其中大部分游戏都是具体发售日期还没确定的期货游戏
  这份列表中的游戏大部分都是单机游戏,只有诸如《军团要塞2》等少量游戏支持联机
  目前仅有Vertigo Games表态将为HTC Vive开发独占游戏
  大部分为独立开发商开发的游戏,游戏质量有待考证
  通过在Steam的官网进行游戏筛选可以看到,目前Steam平台总计共有7792款游戏,其中列出的支持虚拟现实(Steam VR)的游戏仅有146款。
  进一步筛选到支持HTC Vive后,便只剩下45款游戏可供选择了,而进一步筛选支持中文后,便仅有2款游戏可供选择。此外,即便是这45款游戏中目前也仅有17款可玩,其余的均仅显示2016年上市。
  所以这份游戏清单的真实性还有待考察,至少目前可以肯定的是,Steam中这45款游戏支持Vive。
  此外,HTC Vive在游戏开发上还有一个杀手锏――房间追踪系统。基于这个系统,Vive用户可以在一个15英尺见方的物理空间范围内自由移动,设备能够将用户的动作完美复制到游戏中。
  不过,当我们把筛选调整为HTC Vive+Room-Scale之后,就会发现在这45款游戏中只有32款支持这一功能。
  总的来说, HTC Vive作为全球最大的数字游戏分发商Steam的合作伙伴,游戏数量必然是不成问题的。然而从这份列表来看,其中大部分都为独立开发商开发的游戏,如何为用户提供更为优质的大作是Vive接下来要考虑的问题。
  Oculus Rift
  虽然Vive发布之时曾表示,将与Valve的Steam 平台合作,先由 Steam 平台推出可针对 HTC VIVE 使用的虚拟实境电脑游戏,之后 HTC 也会推出自己的内容平台。而Vive也是HTC 和 Valve 联合开发,由Valve的Steam VR提供支持的一款产品。
  但很多人其实并不知道,早在2013年,Steam就加入了一个“虚拟现实”的分类,Oculus Rift是唯一能够支持的虚拟现实头显,当时还根本不存在HTC Vive这款产品。
  后来由于Facebook花20亿美元收购了Oculus,才导致Oculus和Valve之间发生冲突,相互间长久成熟的关系破裂。也就是在那时候,V社开始与HTC接触,促成了Vive。
  不过很显然,作为全球最大的数字游戏分发商,V社可并不会跟钱过不去――自去年12月起,除了HTC Vive外,Steam也开始同样为Oculus Rift提供VR内容支持。
  有趣的是,把筛选条件选为Oculus Rift后,竟然得到了54款游戏,反而比HTC Vive还要多出9款。不知道HTC对此做何感想呢。
  而Oculus方面显然也还心存芥蒂,并没有完全把游戏内容完全交给Steam。Oculus创始人Luckey就曾在Reddit上回复说:
  “到2016年底,至少将有100多款游戏登陆Oculus Rift。光Oculus工作室的就有20多个,此外还有更多的第三方开发的游戏。”
  不过截至目前,Oculus方面并未公布过具体的游戏列表。
  与Vive形成鲜明对比的是,Oculus更加注重独占作品:
  “为VR设计独占内容,对Rift平台而言意义重大。”――Luckey
  据消息称,Oculus已与多家游戏开发商签署了合作协议,均明确要求开发团队要研发Rift平台独占的VR游戏。
  目前已知的消息是,除了预购免费赠送的《EVE:瓦尔基里》以及《Lucky's Tale》外,还有两款Oculus Rift独占游戏,分别是Crytek开发的《攀岩》和Insomniac工作室开发的《无处可逃》。
  显然Oculus希望通过精品的独占游戏来在与Vive的竞争中保持自身优势。
  PlayStation 4 VR
  我们再把目光转向PS VR。三者之间PS VR的定位最为特殊――面向主机开发的VR设备。
  早在E3 2015游戏展上,索尼就对外展示了诸多虚拟现实游戏,并宣称届时将至少会有30多款游戏随设备一同推出。
  而根据目前所掌握的信息来看,索尼已在各大场合中至少已经公布了75款登录PS VR的游戏。
  作为三家之中唯一在主机平台上运行的VR设备,显然索尼拥有一个得天独厚的优势――独占大作满地跑。借助于多年经营主机平台所积累的经验和人脉,诸如《皇牌空战7》、《夏日课程》、《罗宾汉之旅:侏罗纪》、《伦敦劫案》等大作都已宣布将成为PS4 VR首批独占作品。
  不过新消息显示,由于受限于PS4主机机能的不足,PlayStation 4 VR将需要在此基础上再配备一个“机能增强盒”。用户需要将它和 PS4 连接,从而为 VR 游戏提供更为强劲的性能,支撑其以更高的帧率运行,解决由于帧率不足引发的眩晕等问题。
  此前曾有消息称该设备售价为499美元,尚不知这一最新调整是否会导致这款设备的价格进一步走高。毕竟一台PS4的价格也不过2000余元人民币,PS VR作为一款附属品如果价格过高恐怕用户将无法接受。
  总体来说三者各有各自的优势和劣势:
  HTC Vive:游戏的数量多,平台经验(Steam)多,独占作品匮乏,游戏质量不一
  Oculus Rift:游戏数量上可能不如Vive,但将有较多的精品独占作品,平台开发水准有待考证
  PlayStation 4 VR:游戏数量较多,独占作品多,游戏质量可能会较差(受限于主机机能)
  整体来看,VR游戏内容匮乏在短期内仍然是一大弊病。而玩家使用VR来玩游戏也同样需要一个适应的过程。
  举个例子,比如说第一人称射击类游戏,如果是在PC上玩的话,玩家只需要一手操控键盘,一手操控鼠标即可。但当真正进入VR,再配合房间追踪系统来玩的话,虽然代入感更强,但人们也无法实现连续跑动或是一直保持射击姿势了。
  同样是基于这一原因,目前各家VR平台目前所登录的游戏大部分都是单机游戏。对于玩家体验的进一步优化也将共同决定三家VR设备未来的发展走向。
  微信扫一扫,打赏作者吧~
欢迎举报抄袭、转载、暴力色情及含有欺诈和虚假信息的不良文章。
请先登录再操作
请先登录再操作
微信扫一扫分享至朋友圈
搜狐公众平台官方账号
生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者
搜狐网教育频道官方账号
全球最大华文占星网站-专业研究星座命理及测算服务机构
专注移动互联网领域的科技博客。雷者,万钧之势;锋者,锐利之...
12832文章数
主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓
主演:尚格?云顿/乔?弗拉尼甘/Bianca Bree
主演:艾斯?库珀/ 查宁?塔图姆/ 乔纳?希尔
baby14岁写真曝光
李冰冰向成龙撒娇争宠
李湘遭闺蜜曝光旧爱
美女模特教老板走秀
曝搬砖男神奇葩择偶观
柳岩被迫成赚钱工具
大屁小P虐心恋
匆匆那年大结局
乔杉遭粉丝骚扰
男闺蜜的尴尬初夜
客服热线:86-10-
客服邮箱:Unity(193)
1 开一个新场景
删掉新场景的Main Camera
,然后将htc vr插件中相机预设体拖入到场景中
场景中新建一个Plane,作为地面
现在运行场景,一个简单的HTC VR已经做好!
接着上面,想把看到的手柄模型换成一根长长的棍子,具体做法如下:
下面就建一个Cube,调整缩放比例,并且将新建的Cube拖到Controller(left)的子层级下面,注意新建的Cube的坐标轴方向一定要和Model(手柄模型)的方向保持一致,Cube位置也要参考手柄的位置来布置
这样,再次运行场景,你会发现一个长长的棍子在你的手上!
利用上面方法轻松实现将手中的手柄模型换成任何武器模型
上面的Cube模型本身也是一个碰撞体,触发一个反应
上面的Cube模型的Z轴就是一个方向向量,可以从Cube身上某个点开始,沿着Z轴发射线
FR:徐海涛(Hunk Xu)
QQ技术交流群:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:79356次
积分:4858
积分:4858
排名:第4626名
原创:388篇
评论:29条
(52)(40)(62)(62)(58)(44)(58)(23)1668人阅读
Hello,我是。
以下文章整理的不对。还请见谅。
& & 在使用HTC VIVE StreamVR 开发VR项目的时候,需要使用许多的,比如激光定位,贝塞尔曲线激光指针,位移,触碰,抓取等功能。这时候一个很好的插件就很重要,这里我们使用的是“VRTK - SteamVR Unity Toolkit”。
& &一, 概要
& & & 这个工具包提供了很多Unity3d里的常用VR功能,如下(但并不局限于此):
·&带有通用别名的控制器按钮事件
& & & ·&控制器世界指针(如激光指针)
& & & ·&玩家传送
& & & ·&用控制器抓取对象
& & & ·&用控制器和对象交互
& & & 这个工具类基本是受到&SteamVR&Plugin&for&Unity3d&Github&Repo的启发,并基于此。这个工具存在的原因是因为SteamVR&plugin含有令人困惑或不完善的代码。
& & & 可用预制:[CameraRig]直接从SteamVR&Unity&plugin例子——SteamVR/Extras/SteamVR_TestThrow场景中拿来,因为它包含了控制器上相关模型的子物体(这在SteamVR&plugin默认预制SteamVR/Prefabs/[CameraRig].prefab中&#20284;乎是缺失的)。
& & & SteamVR_Unity_Toolkit/Prefabs/[CameraRig]可以被拖到任何场景中,通过VR头盔和包括模型呈现的VR控制器的追踪来提供对VR游戏相机的即时访问。
& 三,帧率显示
& & &这个画布添加一个表示帧率的文本元素到头盔上。使用这个预制必须把它放到场景中,然后头盔的相机需要被添加到画布上。
& &·&选择场景中的FremesPerSecondCanvas对象
& &·&找到Canvas组件
& &·&设置Render&Camera参数为&[CameraRig]预制里的Camera(eye)
& & &预制上有很多可以被设置的参数。展开层级视图中的FramesPerSecondCanvas对象,显示子对象FramesPerSecondText并点击显示额外参数,这些参数可以通过FramesPerSecondViewer脚本(可以在SteamVR_Unity_Toolkit/Scripts/Helper/FramesPerSecondViewer找到)来设置。
& & 可用脚本参数如下:
& &·&Display&FPS:FPS文本可视切换。
& &·&TargetFPS:认为可接受的帧率,被用来作为改变FPS文本颜色的基准。
& &·&Font&Size:FPS显示字体尺寸。
& &·&Position:FPS&文本在头盔视野的位置。
& &·&Good&Color:当处在目标FPS的合理范围之内的FPS文本颜色。
& &·&WarnColor:当FPS降到低于目标FPS合理范围的FPS文本颜色。
& &·&Bad&Color:当FPS处在相对目标FPS为不合理水平时FPS文本的颜色。
SFramesPerSecondCanvas&预制的例子可以在达到SteamVR_Unity_Toolkit/Examples/018_CameraRig_FramesPerSecondCounter场景中找到,在头盔视野中间显示了帧率。按下扳机键(trigger)生成一个新的小球,按下触摸版(touchpad)生成10个新的小球。通过最终当很多小球出现的时FPS将下降来演示这个预设。
四, 脚本(VRTK_ControllerActions)
& &这个目录包含了所有添加到Unity的VR功能的工具脚本。
& &当前可用脚本有:控制器行为脚本提供了处理常见控制器行为的帮助方法。如下可用公共方法: &
& & ·&IsControllerVisible():&如果控制器模型是可见的返回真,否则返回假。
& & ·&ToggleControllerModel(bool&on):根据所给布尔&#20540;状态设置控制器模型的可见性。如果传入true,控制器模型就被显示出来,如果传入false,控制器就被隐藏了。
& & ·&TriggerHapticPulse(int&duration,&ushort&strength):启动控制器开始震动,根据给定的持续计时(第一个参数)和震动强度(第二个strength参数)。最大强度可以是3999,超过就限制为3999。
& &VRTK_ControllerActions脚本的例子在SteamVR_Unity_Toolkit/Examples/016_Controller_HapticRumble场景中,展现了隐藏控制器和让控制器在给定强度下震动给定时长的能力。
五:控制器事件(VRTK_ControllerEvents)
& &控制器事件脚本被添加到&[CameraRig]预制里的控制器对象上,为控制器上的每个按钮按下提供事件监听(除了系统菜单按钮,因为这个按钮不能被重载,只能总是由Steam使用)。
& &当一个控制器按钮被按下,脚本发出一个事件表明按钮被按下了,这使得其他脚本去监听这个事件而不需要实现任何控制器逻辑。脚本也有一个公共的布尔类型的按下状态变量,允许被其他脚本查询按钮是否被按下。当一个控制器按钮被释放,脚本也发送一个事件表示按钮被释放了。控制器触摸板有两个状态,既可以用户只把手指放到压力传感板上来触摸,也可以用户在板上按下去直到发出声响来点击。控制器事件脚本同时分别处理触摸板触摸和点击事件。
& &控制器上有两个按钮轴:
·&触摸板触摸位置,位置的x和y&#20540;基于触摸板当前被触摸位置。
& ·&扳机按钮,有个基于扳机键被按下去程度的x&#20540;。
& 当触摸板的轴或者扳机键的轴&#20540;改变时,会有两个额外的事件发出,这可以被用来确定两个轴的变化来进行精确控制,如用触摸板来移动角色,或者知道扳机键被按下程度。
& 触摸板的轴由变量TouchpadAxis&记录,在所有控制器事件的脚本中更新。
& 扳机键的轴由变量buttonPressure&记录,在所有控制事件脚本中更新。
& 任何其他按钮按压只记录一个为1或者0按钮压力,因为所有其他按钮都是数字量(要么就是点击要么就没有),但扳机是一个可以记录不同按钮压力的模拟量。
& 轴&#20540;变化的精确度可以由脚本中的axisFidelity&参数来决定,默认&#20540;为1。
& &#20540;只要超过2就可能会产生灵敏过度的结果。
& 事件发出的有效载体信息包含:
·&controllerIndex:所使用控制器的索引。
·&buttonPressure:0到1的浮点数,表示按钮按下的所施加的压力&#20540;。
·&touchpadAxis: 一个表示触摸板触摸位置的Vector2类型变量。
·&touchpadAngle:一个表示触摸板触摸位置的转动位置的浮点数,0是顶部,180是底部,其他角度随之对应。
& &当控制器被按下时也会有通用动作的别名事件被发出。这些动作别名可以被映射到想要的控制器按钮上。
& &这些别名是:
·&Toggle&Pointer:打开关闭镭射棒
·&Toggle&Grab:抓取游戏对象
·&Toggle&Use:使用对象
·&Toggle&Menu:打开一个游戏内菜单
& & 每个上面的别名都可以通过在脚本参数窗口的下拉栏里选择映射其使用到喜好的控制器按钮上。
& & 当所设置的映射按钮被按下时将发出一个实际按钮事件以及一个额外别名开启的事件。
& & 当按钮释放的时候就发出一个实际按钮事件以及一个额外的别名关闭的事件。
& & 监听这些别名事件而不是实际的按钮事件意味着可以很轻易的自定义控制器按钮到它们应该执行的行为上。VRTK_ControllerEvents脚本的例子可以在SteamVR_Unity_Toolkit/Examples/002_Controller_Events场景中看到,事件怎样被使用和监听的代码例子可以参见SteamVR_Unity_Toolkit/Examples/Resources/Scripts/VRTK_ControllerEvents_ListenerExample.cs脚本。
六,简单激光指针(VRTK_&SimplePointer)
& & 简单指针(Simple&Pointer)脚本从控制器尾部发出一个有色光束来模拟激光束。这在场景中指向对象很有用,它能判断所指向的对象以及对象距控制器发出光束位置的距离。
& & 激光束默认按下控制器的抓握键(Grip)来激活。
& & 因为所侦听的事件是AliasPointer别名事件,所以这个指针开关按钮可以通过在&VRTK_ControllerEvents脚本参数里来改变&pointerToggleButton来选择设置。
& & 简单指针脚本(VRTK_&SimplePointer)添加到[CameraRig]&预制里的控制器对象上,同时添加需要VRTK_ControllerEvents脚本来监听启用和禁用光束的控制器按钮事件。
& & 下面是可用脚本参数:
?&Enable&Teleport(启用传送):如果勾选了,在目标设置事件中的teleport标志位就设为true,所以传送脚本就知道是否要行动到新的目标。如果这个选项没有勾选的话,控制器光束启动但是不会触发位移。&
& & & ?&Point&Hit&Color(指针碰撞颜色):当光束和一个有效目标碰撞的颜色。每个控制器可以有不同的颜色设置。 & & &
& & & ?&Pointer&Miss&Color(指针无碰撞颜色):当光束没有命中有效目标时的颜色。每个控制器可以有不同的颜色设置。
?&Show&Play&Area&Cursor(显示游玩区光标):如果这个启动,游玩区界限就会在光束指针的顶端显示出来,颜色和当前指针颜色相同。
& ?&Play&Area&Cursor&Dimensions(游玩去光标尺寸):决定游玩区光标和碰撞的尺寸。如果&#20540;为零,PlayArea&Cursor&的尺寸将根据Play&Area空间进行校正。
?&Handle&Play&Area&Cursor&Collisions(处理游玩区光标碰撞):如果勾选,当游玩区光标和其他物体发生碰撞时,指针颜色就会变成Pointer&Miss&Color的颜色且WorldPointerDestinationSet&事件将不会被触发,这将防止传送到游玩区会发生碰撞的区域。
?&Beam&Always&On(光束总是开启):如果这个勾选,光束指针总是可见,但是设置目标点事件仍然只会在所指定按钮松开时发出。
?&Pointer&Thickness(指针光束厚度):光束长宽也可以在脚本里设置以及能够开关显示在光柱最后的球形光柱顶端(表示光标)。
?&Pointer&Length(指针光束长度):在停止前光束投射的距离。
?&Show&Pointer&Tip(显示指针顶端):切换是否光标显示在光束指针的尾部。
& & &简单指针对象扩展自VRTK_WorldPointer&抽象类并因此发出相同的事件和有效数据。
& & &VRTK_SimplePointer脚本的例子可以在SteamVR_Unity_Toolkit/Examples/003_Controller_SimplePointer场景中看到并且事件用法和监听的脚本例子可以看SteamVR_Unity_Toolkit/Examples/Resources/Scripts/VRTK_ControllerPointerEvents_ListenerExample.cs脚本。
& &七,贝塞尔曲线激光指针(VRTK_BezierPointer)
& & 贝塞尔指针从控制器末端发出一个曲线(由游戏对象组构而成)到(任何高度的)地面上一点。
& & 这比简单激光指针要有用的多,因为终点能够弯曲到玩家看不见的对象顶部,所以就可以传送到各种高度的对象上。
& & 激光束默认按控制器上的抓握键Grip来激活。事件侦听AliasPointer别名事件,所以Pointer&Toggle&button可以通过在VRTK_ControllerEvents&脚本中改变Pointer&Toggle&button来进行选择设置。
& & 贝塞尔指针脚本被添加到[CameraRig]预制里的控制器对象上,控制器对象同时需要添加VRTK_ControllerEvents脚本用来监听控制器按钮开关光束的事件。
& & 可用脚本参数如下:
& & & ?&Enable&Teleport(启用传送):如果勾选了,在目标设置事件中的teleport标志位就设为true,所以传送脚本就知道是否要行动到新的目标。如果这个选项没有勾选的话,控制器光束启动但是不会触发位移。 & & & &&
& & & ?&Point&Hit&Color(指针碰撞颜色):当光束和一个有效目标碰撞的颜色。每个控制器可以有不同的颜色设置。
?&Pointer&Miss&Color(指针无碰撞颜色):当光束没有命中有效目标时的颜色。每个控制器可以有不同的颜色设置。
& & & ?&Show&Play&Area&Cursor(显示游玩区光标):如果这个启动,游玩区界限就会在光束指针的顶端显示出来,颜色和当前指针颜色相同。
& & & ?&Play&Area&Cursor&Dimensions(游玩去光标尺寸):决定游玩区光标和碰撞的尺寸。如果&#20540;为零,PlayArea&Cursor&的尺寸将根据Play&Area空间进行校正。
& & & ?&Handle&Play&Area&Cursor&Collisions(处理游玩区光标碰撞):如果勾选,当游玩区光标和其他物体发生碰撞时,指针颜色就会变成Pointer&Miss&Color的颜色且WorldPointerDestinationSet&事件将不会被触发,这将防止传送到游玩区会发生碰撞的区域。
& & & ?&Beam&Always&On(光束总是开启):如果这个勾选,光束指针总是可见,但是设置目标点事件仍然只会在所指定按钮松开时发出。
& & & ?&Activate&Delay(激活间隔):能够再次激活指针光束的延迟时间秒数。用来防止持续传送。 &&
?&Pointer&Length(指针光束长度):在停止前光束投射的距离。
& & & ?&Pointer&Density(指针密度):贝塞尔曲线光束渲染的物体个数。这里数&#20540;太高将很可能会因为大量渲染对象来对游戏性能有负面影响。
& & & ?&Show&Pointer&Cursor(显示指针光标):在光束终点位置的地面显示光标。用来看光束终点位置的高度很有用,它可以通过切换这个来关闭。
& & & ?&Pointer&Cursor&Radius(指针光标半径):地面指针光标的尺寸,这个&#20540;也会影响贝塞尔曲线光束里的对象的尺寸。半径越大,对象尺寸越大。
& & &&?&Beam&Curve&Offset(光束曲线偏移):&投射光束时应用的高度偏移量,就算在光束径直指向时也能产生一个光滑的曲线。
& & & ?&Custom&Pointer&Tracer(自定义指针轨迹):&可以在这里设置一个自定义的游戏对象用来代替光束轨迹的默认球体。自定义游戏对象将和控制器的旋转想匹配。
?&Custom&Pointer&Cursor(自定义指针光标):&&可以在这里设置一个自定义的游戏对象用来代替指针光标的默认平柱体。
& & & 贝塞尔指针对象扩展自VRTK_WorldPointer&抽象类并因此发出相同的事件和有效数据。
& & & VRTK_BezierPointer脚本的例子参见SteamVR_Unity_Toolkit/Examples/009_Controller_BezierPointer场景,它被连同Height&Adjust&Teleporter脚本一起使用,来显示怎样可以不需要看到对象的顶部就能使用曲线指针来传送到不同高度的对象上。
& & & 另一个例子可以参见SteamVR_Unity_Toolkit/Examples/012_Controller_PointerWithAreaCollision场景,这里演示了一个开启了游玩区光标和碰撞检测的贝塞尔指针怎样被用来穿过游戏区域,但是不允许传送到墙壁或者其他对象的区域而导致游玩区让玩家穿进墙壁。
& & & 贝塞尔曲线生成的代码是另一个脚本,位置在SteamVR_Unity_Toolkit/Scripts/Helper/CurveGenerator.cs。
& &八,基础传送器(VRTK_BasicTeleport)
& & 基础传送器更新[CameraRig]在游戏世界中的x和z位置到由WorldPointerDestinationSet事件设置定位的世界指针顶端的位置。
& & y位置从不改变,所以基础传送器不能用来上下移动游戏对象而只能水平移动。
& & 基础传送器脚本被添加到[CameraRig]&预制下面并需要一个实现了WorldPointer&的脚本添加到另一个游戏对象上(如VRTK_SimplePointer添加到控制器对象上)。
& & 可用脚本参数如下:
&?&Blink&Transition&Speed(眨&#30524;淡入淡出速度):可以在基础传送脚本中改变眨&#30524;渐变速度来提供一个自定义的传送体验。速度设置为0意味着没有渐变眨&#30524;特效呈现。渐变通过&SteamVR&Unity&插件脚本里的SteamVR_Fade.cs脚本实现。
& & &?&Distance&Blink&Delay(距离眨&#30524;延时):&范围从0到32,这个&#20540;决定了基于被传送距离的眨&#30524;过渡保持黑屏的时长。&#20540;为0时,任何传送距离都不会延长传送的眨&#30524;过渡,&#20540;为32时,就算距离初始点很近的被传送距离都会延长传送的眨&#30524;过渡。这可以被用来模拟用户传送更远的距离花费更长时间。&#20540;为16对用户来说就刚好。
&?&Headset&Position&Compensation(头盔位置补偿):&如果勾选,传送坐标将会式游玩区内头盔的位置。如果没有勾选,传送坐标将总是游玩区中间的位置,就算头盔位置不在游玩区中间也式如此。
& & &?&Ignore&Target&With&Tag&Or&Class(忽略带有标签或脚本的目标):&一个指定对象标签或者对象上添加的脚本名字的字符串,通知传送器这种目标点应该被忽略,所以用户就不能传送到这些位置上。同时也确保指针颜色被设为丢失目标点颜色。
& & &VRTK_BasicTeleport&脚本的例子可以参见SteamVR_Unity_Toolkit/Examples/004_CameraRig_BasicTeleport场景。这个场景使用控制器上的VRTK_SimplePointer&脚本在按下grip按钮时初始化一个激光指针,松开Grip按钮时激光指针失效,然后玩家传送到激光指针顶端位置。
&九,可调节高度的传送器(VRTK_HeightAdjustTeleport)
& & 高度调整传送器继承自基础传送器,它允许根据传送位置是否在其他对象顶部来让[CameraRig]改变y位置。
& & 和基础传送器一样,高度调整传送器被添加到[CameraRig]预制并需要一个可用的世界指针。
& & 可用脚本参数如下:
& & ·&Blink&Transition&Speed(眨&#30524;淡入淡出速度):可以在基础传送脚本中改变眨&#30524;渐变速度来提供一个自定义的传送体验。速度设置为0意味着没有渐变眨&#30524;特效呈现。渐变通过&SteamVR&Unity&插件脚本里的SteamVR_Fade.cs脚本实现。
·&Distance&Blink&Delay(距离眨&#30524;延时): 范围从0到32,这个&#20540;决定了基于被传送距离的眨&#30524;过渡保持黑屏的时长。&#20540;为0时,任何传送距离都不会延长传送的眨&#30524;过渡,&#20540;为32时,就算距离初始点很近的被传送距离都会延长传送的眨&#30524;过渡。这可以被用来模拟用户传送更远的距离花费更长时间。&#20540;为16对用户来说就刚好。
·&Headset&Position&Compensation(头盔位置补偿):&如果勾选,传送坐标将会式游玩区内头盔的位置。如果没有勾选,传送坐标将总是游玩区中间的位置,就算头盔位置不在游玩区中间也式如此。
·&Ignore&Target&With&Tag&Or&Class(忽略带有标签或脚本的目标) :&一个指定对象标签或者对象上添加的脚本名字的字符串,通知传送器这种目标点应该被忽略,所以用户就不能传送到这些位置上。同时也确保指针颜色被设为丢失目标点颜色。
& & ·&Play&Space&Falling(游玩区坠落):检查是否玩家是否走出对象,即所在游玩区的位置不在对象上,然后就会自动传送到最近的地面上。
& & &反过来说Play&Space&Falling&选项是在玩家头盔在一个对象上方时会自动传送到一个对象的顶部,这一点在模拟爬梯子时很有用,不需要使用指针光束定位。如果这个选项关闭,玩家就能在他们所站在的对象的同样y高度的空中行走(也就是有一部分游玩区在对象外部)。
& &VRTK_HeightAdjustTeleport&脚本的例子参见SteamVR_Unity_Toolkit/Examples/007_CameraRig_HeightAdjustTeleport场景。场景有许多不同高度对象,玩家可在来回走或者使用激光束爬到它们顶部。
& &另一个例子参见SteamVR_Unity_Toolkit/Examples/010_CameraRig_TerrainTeleporting场景,展示了玩家也能够在地形碰撞器上传送。
& &还有个例子SteamVR_Unity_Toolkit/Examples/020_CameraRig_MeshTeleporting场景中,显示玩家在网&#26684;碰撞器上传送。
十,头盔碰撞淡出(VRTK_HeadsetCollisionFade)
& & 头盔碰撞淡出的目的是为了检测用户的VR头盔何时碰撞到其他游戏对象并淡出屏幕到一个单色。
& & 这是为了处理玩家把头放进一个游戏对象里看到对象内部的裁剪,这不是我们所期望的。
& & 之所以这么做,是因为如果玩家把头放到不该放的地方就会淡出到一个颜色(如黑色),这就让玩家意识到他们做错了什么,然后可能自然的就会后退。如果头盔正在碰撞,那么传送行为就被禁用来防止穿插穿墙的作弊。
& &使用Unity&5.3及之前版本,头盔碰撞淡出脚本添加到[CameraRig]&预制的Camera(head)对象上。
& &使用Unity&5.4及之后版本,头盔碰撞淡出脚本添加到[CameraRig]&预制下的Camera&(head)里的Camera(eye)对象上。
& &可用脚本参数如下:
& &·&Blink&Transition&Speed(眨&#30524;淡入淡出速度):碰撞时淡入淡出速度。
& &·&Fade&Color(淡出颜色):头盔碰撞时淡出颜色。发出事件如下:
& &·&HeadsetCollisionDetect:&当用户头盔碰到其他游戏对象时发出。
&·&HeadsetCollisionEnded:当用户头盔停止碰撞游戏对象时发出。发出事件的有效载体内容包括:
& &·&collider:&头盔所碰撞的游戏对象的碰撞器。
& &·&currentTransform:&当前头盔碰撞淡入淡出脚本所添加到的对象(相机)的Transform。
& & VRTK_HeadsetCollisionFade&脚本例子参见SteamVR_Unity_Toolkit/Examples/011_Camera_HeadSetCollisionFading场景。场景在游玩区周围有可碰撞的墙壁,如果玩家把头放进墙壁,头盔就将渐变成黑色。
& 十一,玩家呈现(VRTK_PlayerPresence)
& & VR用户在游戏呈现中有身体这一概念,它通过在用户站立在游玩区中的位置添加碰撞和刚体来实现。
& & 身体的碰撞和刚体将防止用户能狗穿过墙壁或者和其他可碰撞对象穿插。
& & 碰撞体的高度由用户头盔所在高度决定,如果用户下蹲,碰撞体同样收缩,这意味着可能在低的空间去下蹲和爬行通过。
& & 可用脚本参数如下:
·&Headset&Y&Offset(头盔y偏移):为用户创建的盒型碰撞体的高度由用户头盔位置设置。如果需要碰撞体小一点来让游玩区和头盔之间留有空间的话,这个&#20540;将降低生成的盒型碰撞体的高度。
·&Ignore&Grabbed&Collisions(忽略抓取碰撞):如果勾选,任何被控制器抓取的物品都不会和游玩区的盒碰撞体及刚体发生碰撞。这在用户需要抓取和挥动对象时是很有用的,因为如果碰撞体激活,这些抓取的东西就会被游玩区的碰撞体弹开。
& & &VRTK_PlayerPresence&脚本例子可参见SteamVR_Unity_Toolkit/Examples/017_CameraRig_TouchpadWalking场景。场景有很多墙体和斜坡,用户可以用触摸板来四处行走,但是不能穿过这些对象,因为它们是可碰撞的并且刚体物理将不允许发生穿叉。
& 十二,触摸板移动&(VRTK_TouchpadWalking)
& &通过手指在触摸板上滑动来实现用这个脚本让游玩区在游戏世界中能够移动。
& &TouchpadWalking脚本用在[CameraRig]预制上,并且在用户位置添加一个刚体和盒型碰撞来防止他们穿过其他带碰撞的游戏对象。
& &如果Headset&Collision&Fade脚本已经被添加到相机预制上,如果用户试着和一个对象发生碰撞,那么他的位置就会被重置为最近的正常的位置。
& &这可能发生在用户穿过需要躬身的区域中途站了起来和顶部发生了碰撞。与其允许用户这样做而引起碰撞问题,倒不如直接移动回到一个正常的位置。这确实破坏了沉浸感,但用户正在做的事情也是不自然的。
& &可用脚本参数如下:
·&Left&Controller:如果勾选,左控制器的触摸板就能移动游玩区。在运行时可以被切换。
& & ·&Right&Controller:如果勾选,右控制器的触摸板就能移动游玩区。在运行时可以被切换。
& & ·&Max&Walk&Speed:当触摸板被触摸到轴的极限时游玩区所能达到的最大移动速度。触摸板距离中心越近的位置被触摸,移动速度就越慢。
·&Deceleration(减速度):当用户不再触摸到触摸板时游玩区从减速到完全停止的速度。这种减速度效果可以减缓可能遭受的移动恶心。
& & VRTK_TouchpadWalking&脚本的例子参见SteamVR_Unity_Toolkit/Examples/017_CameraRig_TouchpadWalking场景。场景中有很多墙壁和梯子,用户可以用触摸板来移动。还有个区域只有用户蹲下才能穿过。在俯身区域挺起身体将导致用户闪回他们最近的正常位置。
& 十三,VRTK_RoomExtender(游玩区空间扩展)
& & &这个脚本允许游玩区跟随玩家移动。
& & &CameraRig&只在达到定义的圈的边缘才会移动。目的是为了创造一个虚拟的更大的游玩区。
& & &测试这个脚本的demo场景为028_CameraRig_RoomExtender。把脚本添加到CameraRig来使用。
& & &可用脚本参数如下:
& & & ·&Additional&Movement&Multiplier(额外移动乘数):&圈边缘的移动放大因数。0就是不移动CameraRig。&#20540;越高模拟的游玩区域就越大,但是也可能就越不令人舒适。
·&Head&Zone&Radius(头部空间半径):游玩区不会发生移动的圆圈尺寸,一切都正常的。如果&#20540;太低,在蹲下时就会感到不舒服。
& & & ·&Debug&Transform(调试Transform):&这个transform让玩家周围的CameraRig不移动圆圈显示出来。在demo场景里就是一个在地板上的柱体。记得关闭碰撞。
& 十四,可交互对象(VRTK_InteractableObject)
& &可交互对象脚本被添加到需要用(如控制器)来交互的任何游戏对象上。
& &可用脚本参数如下
&Touch Interactions&&触摸交互
& & & ?&Highlight&On&Touch:如果勾选,这个对象在控制器触摸它时就会高亮。
?&Touch&Highlight&Color:对象被触摸时高亮的颜色。颜色可以被任何全局的设置颜色来覆写(例如InteractTouch&脚本)。
& & & ?&Rumble&On&Touch:控制器触碰对象时触发振动反馈,x表明时长,y表明震动强度。(x和y将来会被自定义编辑器代替)。
& &Grab Interactions 抓握交互
& & & ?&Is&Grabbale:决定对象是否能被抓握。
?&Is&Droppable:决定对象在被控制器抓握后能否被放下。如果没有勾选,一旦用控制器按钮拾起了物品就不能放下了。但是如果抓握的机制是关节(Fixed_Joint)的话,当对象受力足够大之后关节断开,物品也就被放下了。所以最好使用控制器子物体的抓握机制(Child_Of_Controller)来防止这种情况。
?&Hold&Button&To&Grab:如果勾选,控制器就需要持续按住设置为抓握的按钮来保持抓握状态。如果没有勾选,抓握的按钮切换抓握行为通过按下一次抓取,再按一次释放。
& & & ?&On&Grab&Collision&Delay:当对象被第一次抓取时延迟碰撞的作用的时间量。这在防止游戏对象被抓取时卡到另外一个物体时很有用。
& & & ?&Grab&Snap&Type(抓取对齐方式):这个设置了当对象被抓取时的对齐方式&&&&
& & & & & o&Sinmple_Snap:把抓取的对象的中心位置放到控制器的附加点上(默认是控制器的tip)&&&&&o&Rotation_Snap
:调整抓取的对象到一个指定旋转,由Vector3&类型的Snap&To&Rotation变量提供。 & & & & & & o&Precision_Snap :没有把对象的位置对齐到控制器,而是用控制器触摸对象时的点来拾起对象(就像真实生活中用手拿起东西一样)。&&&&
& & & & & o&Handle_Snap:&允许一个空的GameObject作为可交互对象的子物体来用作参考对齐点。抓取时,空GameObject的旋转和位置用来定位抓取的可交互物体到控制器。
&?&Snap&To&Rotation:表示欧拉角的Vector3变量,决定在对齐时相对于控制器的对象的旋转。在拾取枪或剑的时候很有用,对控制器的相对旋转对便于使用是很重要的。
&?&Snap&To&Position:一个Vector3变量,决定对象对齐控制器时的相对位置。
&?&Snap&Hanlde:一个由空游戏对象提供的Transform,它必须是被抓取物品的子物体并用作一个被拾取物品相对于进行抓取的控制器的旋转和位置的定位点。
&?&Rumble&On&Grab:控制器抓取对象时触发振动反馈,x表明时长,y表明震动强度。(x和y将来会被自定义编辑器代替)。
&Grab Mechanics 抓握机制
& & ?&Grab&Attach&Type:这决定了抓取的物品在被抓取时怎样被添加到控制器上。 &&
o&Fixed&Joint(固定关节):用一个固定的关节把对象附加到控制器上,意味着附加对象以完全1:1的方式追踪控制器的位置和旋转。&&&&&
& & & & o&Spring&Joint(弹性关节):用一个弹性关节把对象添加到控制器上,意味着物体和控制器之间有一些弹性,弹力驱动物体。在想要牵引一个物体而不是直接把物体对齐到控制器上是很有效的。就感觉物体有运动阻力一般。
& &o&Track&Object&(追踪对象):不是通过关节来把对象附加到控制器上,而是确保对象追踪控制器的方向,这适用于铰链式关节。&&&&
& o&Child&Of&Controller&(控制器子物体):简单地让对象成为抓取控制器的子物体,所以自然地追踪了控制器运动位置。
& & ?&Detach&Threshold(分离阈&#20540;):当对象从被抓取的控制器分离时的力&#20540;。如果控制器试着施加一个高于这个阈&#20540;的力到对象上(从另一个对象上拉它或者推它到另一个对象),然后保持对象到抓取控制器的关节就将断开并且对象将不能再被抓起了。这在Tracked&Object抓取机制下也有效,只是这个&&#20540;确定断开抓取钱控制器可以离对象多远。
& & ?&Spring&Joint&Strength(弹簧关节力):弹簧力保持对象到控制器。小数&#20540;将意味着弹簧很松并且对象需要一个更大的力去移动,大数&#20540;就意味着弹簧很紧,小点的力就可以移动它。
?&Spring&Joint&Damper(弹簧关节阻&#23612;):弹簧的阻&#23612;量在使用弹簧关节抓取机制下有效。在移动被关节的交互对象时,&#20540;越高震动效果越小。
& & ?&Throw&Muliplier(投掷倍数):&#20540;用来乘以给定对象被扔出时的速度&#20540;。这还可以被用来连同Interact&Grab脚本的Throw&Multiplier来让对象被扔的比平常更远(或者输入的&#20540;小于1就扔的很近)。
&Use Interactions 使用交互
& & ?&Is&Usable(是否可用):决定对象是否可以被使用?&Hold&&Button&To&Use:如果勾选,控制器上的使用(use)按钮需要被持续按下来保持使用。如果没有勾选,use按钮用一次按钮按下来启动使用和再一次按下来停止使用。
?&Pointer&Avtivates&Use&Action:如果勾选,当一个世界光束指针(由控制器投射)碰到了交互对象,如果对象的Hold&Button&To&Use没有勾选的话,当指针在对象上的时候就会运行对象的StartUsing方法,指针移开失效就会运行StopUsing方法。这个选项在被勾选以后,为了防止在用一个指针来使用对象时发生不必要的传送,就不会抛出目标点设置(&Destination&Set&)事件。
& & ?&Rumble&On&Use:控制器触碰对象时触发振动反馈,x表明时长,y表明震动强度。(x和y将来会被自定义编辑器代替)。
& & 下面的事件是被发送的:
?&InteractableObjectTouched:当另一个对象碰到当前对象时发出事件。
?&InteractableObjectUntouched:&当其他对象停止触碰当前对象时发出事件。
?&InteractableObjectGrabbed:当其他对象(如控制器)抓握当前对象时发出事件。?&InteractableObjectUngrabbed:当其他对象停止抓握当前对象时发出事件。
?&InteractableObjectUsed:当其他对象(控制器)使用当前对象时发出事件。
?&InteractableObjectUnused:当其他对象停止使用当前对象时发出事件。
& &发出的事件有效信息载体包涵:?&interactingObject:初始化交互的对象(如控制器)。
& &脚本基本是提供一个简单的机制来区分游戏世界中的对象是否能被抓取或者使用,最好是把这个脚本看做是一个基类来派生出功能更丰富的脚本。
VRTK_InteractableObject&的例子可以看SteamVR_unity_Toolkit/Examples/005_Controller_BasicObjectGrabbing.场景。这个场景还在控制器上使用了VRTK_InteractTouch和VRTK_InteractGrab&脚本,来展示一个交互对象怎样被抓取和对齐到控制器以及在游戏世界中扔出。
& &另外一个例子在场景SteamVR_Unity_Toolkit/Examples/013_Controller_UsingAndGrabbingMultipleObjects。这个场景展示了更多对象,可以被按住按钮抓取或者切换按钮点击来抓取的对象,还有对象通过切换它们的Using&状态来展示多种物品可同时被开启。
& 十五,触摸交互对象(VRTK_InteractTouch)
& & 触摸交互脚本被添加到[CameraRig]&预制里的控制器对象上。
& & 可用参数如下:
&?&Hide&Controller&On&Touch:&当有效触碰发生时隐藏控制器模型
& &?&Hide&Controller&Delay:触摸隐藏控制器之前的等待秒数。
&?&Global&Touch&Highlight&Color: 如果交互对象被触碰就能高亮显示,没有设置本地颜色的话就使用全局颜色。
& & 发出事件如下:
?&ControllerTouchInteractableObject:当有效对象被碰到时发出
?&ControllerUntouchInteractableObject:&当一个有效对象不再被触碰时发出发出事件有效载体信息包含:?&controllerIndex(控制器序号):正在交互的控制器的序号
?&Target(目标):&控制器正在交互的对象的GameObject
VRTK_InteractTouch&的例子参见SteamVR_Unity_Toolkit/Examples/005_Controller_BasicObjectGrabbing场景。场景演示了添加了&VRTK_InteractableObject&脚本的对象被控制器触碰时能够高亮显示交互对象的能力。
十六,抓取交互对象(VRTK_InteractGrab)
& & 交互抓取脚本被添加到[CameraRig]&预制里的控制器对象上,并且需要添加VRTK_ControllerEvents脚本用来监听抓取和释放交互游戏对象的控制器按钮事件。
& & 它监听AliasGrabOn和AliasGrabOff&事件来确定对象合适应该被抓取和释放。
& & 控制器对象也需要添加VRTK_InteractTouch&脚本用来确定何时一个可交互对象被触摸到。
& & 只有有效的被触摸对象才能被抓取。如果控制器触碰到一个包含VRTK_InteractableObject脚本并且isGrabbable&标志位设置为真的游戏对象,该对象就可以被抓取。
& & 如果有效可交互对象是可抓取的,按下控制器上所设置的抓取按钮(默认是Trigger按钮)将抓取和对齐对象到控制器上,并且直到抓取按钮松开才会被释放。
& & 当控制器抓取按钮松开时,如果可交互对象是可抓取的,它将会被按一定速率沿着控制器松开时的方向进行推动,这就模拟了对象投掷。可交互对象需要碰撞体用来激活触发和一个刚体用来拾取它们并在游戏世界中四处移动它们。
& & 可用脚本参数如下:
& & ?&Controller&Attach&Point:控制器模型上用来吸附抓取的对象的刚体点(默认为tip) & &
& & ?&Hide&Controller&On&Grab:当有效抓取发生时隐藏控制器模型。
& ?&Hide&Controller&Delay:在抓取时隐藏控制器之前的等待时间秒数。
& & ?&Grab&Precognition(预先抓取):&在抓取按钮按下时和控制器正在抓取某个东西时之间时间量。例如,如果一个对象下落过快,因为人的反应时间可能很难及时按下抓取按钮来抓住对象。这个&#20540;越高意味着抓取键可以越提前在控制器碰到对象以及碰撞发生前按下,如果抓取键仍然被按下(如果抓取对象需要持续按键抓取的话),则抓取动作就会成功。
& & ?&Throw&Multiplier(投掷乘数):用来乘以对象被扔出时速度的量。在放大&CameraRig&来模拟能够把物体扔的更远时是很有用的。
& & ?&Create&Rigid&Body&When&Not&Touching:如果勾选,当抓取按钮按下时,如果控制器没有碰到一个可交互的对象,那么添加到控制器上的刚体就允许控制器去推动周围其他的刚体对象。
发出事件如下:
?&ControllerGrabInteractableObject:&当有效对象被抓取时发出
?&ControllerUngrabInteractableObject:&当有效对象从抓取到放开时发出
发出事件有效载体信息包含:
?&controllerIndex:&正在交互的控制器序号
?&target:&控制器正在交互的对象的GameObject
& &VRTK_InteractGrab的例子可以参见SteamVR_Unity_Toolkit/Examples/005_Controller/BasicObjectGrabbing场景。场景演示了抓取挂有VRTK_InteractableObject&脚本的可交互对象。对象可拾起可抛出。
更复杂一点的例子可以参见场景SteamVR_Unity_Toolkit/Examples/013_Controller_UsingAndGrabbingMultipleObjects&,这里演示了每个控制器都能单独抓取和使用对象并且对象也可以被同时切换它们的使用状态。SteamVR_Unity_Toolkit/Examples/014_Controller_SnappingObjectsOnGrab场景演示了不同的对齐抓取的对象到控制器上的机制。
& &十七,使用可交互对象(VRTK_InteractUse)
& & 交互使用脚本被添加到[CameraRig]&预制里的控制器对象上,并且需要添加VRTK_ControllerEvents脚本用来监听使用和停止使用交互游戏对象的控制器按钮事件。
& & 它监听AliasUseOn&和AliasUseOff&事件来确定对象合适应该被使用和停止使用。
& & 控制器对象也需要添加VRTK_InteractTouch脚本来决定何时可交互对象被触碰。
& & 只有有效的触碰对象才能被使用。如果控制器触碰到一个包含VRTK_InteractableObject&脚本且isUsable标志位设置为真,这个对象就能被使用。
& & 可用脚本参数如下:
& & & ?&Hide&Controller&On&Use:当有效使用动作开始时隐藏控制器模型
& & & ?&Hide&Controller&Delay:在使用之前,隐藏控制器的等待时间秒数
发出事件如下:
?&ControllerUseInteractableObject:&当一个有效对象开始被使用时发出?&ControllerUnuseInteractableObject:&当一个有效对象停止被使用时发出
发出的事件的有效载体信息包含:
?&controllerIndex:&正在交互的控制器序号
?&target:&控制器正在交互的对象的GameObject
例子参见SteamVR_Unity_Toolkit/Examples/006_Controller_UsingADoor场景,模拟打开一扇门和关上。地上也有一个立方体可以被抓取来展示可交互对象怎么被使用或者抓取
另一个例子可参见SteamVR_Unity_Toolkit/Examples/008_Controller_UsingAGrabbedObject场景,它展示了对象可以用一个按钮抓取并用另一个按钮使用。
& &十八,自动抓取可交互对象(VRTK_ObjectAutoGrab)
& &通过把VRTK_ObjectAutoGrab脚本加到控制器上并指定应该默认抓取的对象,来让特定控制器能自动抓取可交互对象。
& &自动抓取对象脚本添加到[CameraRig]&预制里的控制器对象上,控制器对象还需要添加VRTK_InteractGrab&脚本。
& &可用脚本参数如下:
&?&Object&To&Grab(抓取的对象):在游戏开始时被控制器抓取的游戏对象(在场景或者预制里)。
&?&Clone&Grabbed&Object(复制被抓取对象):如果勾选,Object&To&Grab(抓取的对象)将被复制到一个新对象并添加到控制器上,而被复制的对象留在场景里。这在两个控制器都需要抓取同样的对象时是需要的,因为单个对象不能被不同的控制器同时抓取。如果被抓取的对象是一个预制就也需要被复制,因为它需要存在于场景中被抓取。
& &例子参见SteamVR_Unity_Toolkit/Examples/026_Controller_ForceHoldObject场景。这里每个控制器自动抓取了一把剑,同时为了防止剑被扔掉,剑被永久的添加到用户的控制器上
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5408次
排名:千里之外
(3)(2)(10)

我要回帖

更多关于 steam上好玩的vr游戏 的文章

 

随机推荐