本篇VR笔记由“萌猫娘巧克力”撰写,文明观赏,请勿转载,谢谢合作

该VR笔记的来源是 蛮牛教育 上的课程【HTC VIVE 开发实例教程】

——————————————————————

观看前的一些提醒:

萌猫娘巧克力 的 VR笔记

Unity版本 5.6.0f3

VRTK版本:3.2.1

SteamVR版本:1.2.2

另外提醒一下:SteamVR版本一定不能高过1.2.2,因为高过了会使得  手柄  无法显示
——————————————————————

初识HTC VIVE

HTC

宏达国际电子股份有限公司成立于1997515日,简称宏达电,亦称HTC,是一家位于台湾的手机与平板电脑制造商。是全球最大的Windows Mobile智能手机生产厂商,全球最大的智能手机代工和生产厂商。

全球第一款安卓手机HTC G1HTC20089月推出。

20153月的MWC2015上发布了与Valve联合开发的VR虚拟现实头盔产品HTC Vive

VIVE

ValveValve Software(维尔福软件公司)的简称,1996年成立于华盛顿州西雅图市,是一家专门开发电子游戏的公司,代表作品有半条命,反恐精英,求生之路,DOTA2等。

 

 

HTC Vive 是由HTCValve联合开发的一款VR头显(虚拟现实头戴式显示器)产品,于2015年3月在MWC2015(巴塞罗拉世界移动通信大会)上发布。由于有Valve的SteamVR提供的技术支持,因此在Steam平台上已经可以体验利用Vive功能的虚拟现实游戏。2016年6月,HTC推出了面向企业用户的Vive虚拟现实头盔套装—Vive BE(即商业版),其中包括专门的客户支持服务。

2016年11月,HTC Vive头戴式设备荣登2016中国泛娱乐指数盛典“中国VR产品关注度榜top10”。

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

AR 网址

萌猫娘巧克力 的 VR笔记

HTC VIEW 交互设计开发

关于凝视效果

  1. 通过跟踪头部移动,设置一个代表光标的准星,当停留在某处足够长时间以后,激发选中逻辑
  2. 类似 Kinect 自然语言交互
  3. 多用于移动VR,如 Cardboard、GearVR
  4. VIVE 平台使用凝视效果可增强用户体验

实现原理

  1. 基于射线原理,通过Raycast 判断击中的物体,在Update 里面进行逻辑帕努单
  2. 准星或十字线基于UGUI ,设置为相机的子物体,等待操作过程一般为圆环逐渐填充动画或者进度条动画
  3. 被凝视的物体可以是UI也可以是3D物体
  4. 如果在一段时间内击中的物体是用一个物体,则认为该元素被选中,在此逻辑内撰写相应处理函数,入消失,变换材质,缩放等
  5. 元素一般分为三个状态相应:准星进入、准星退出、准星停留时间

 

 

 

对于工具的学习:

萌猫娘巧克力 的 VR笔记

SteamVR工具

萌猫娘巧克力 的 VR笔记

使用Interaction System 实现与物体的交互

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

Unity脚本上的一个小技巧,当我们想在添加这个脚本的时候,还需要哪些组件支持,就可以使用RequireComponent,进行强制添加上去,以免发生不必要的小问题

萌猫娘巧克力 的 VR笔记

使用ItemPackage 实现配套物体的同时抓取

萌猫娘巧克力 的 VR笔记

 

Linear Drive Circular Drive 的使用

萌猫娘巧克力 的 VR笔记

LinearMapping是一个百分比

  

传统UI VR UI 《屏幕坐标系》 《世界坐标系》的区别

 

VR中的UI一般构建步骤

萌猫娘巧克力 的 VR笔记

Interaction System 中的UI交互

萌猫娘巧克力 的 VR笔记

 

3D物体上面挂在 Interactable 脚本用于3D物体交互,

而在UI上面要交互的话,要挂在UIElement脚本

使用 Sourcetree Github 克隆项目并保持更新

萌猫娘巧克力 的 VR笔记

VRTKSteamVR的集成

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

VRTK的配置

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

 

VRTK手柄指针配置

萌猫娘巧克力 的 VR笔记

VRTK_Controller Events

VRTK_Pointer —— 定义指针交互

指针渲染有两种【VRTK_BezierPointerRenderer】 和 【VRTK_StraightPointerRenderer

VRTK_StraightPointerRenderer —— 定义指针外观

萌猫娘巧克力 的 VR笔记

 

 

 

早期VRTK

 

早期直接使用 Simple Pointer是可以进行操作的,但是现版本不允许这么使用了

 

 

 

设计思想:

开始指定SDK,指定相关模型,跟相关控制脚本发生链接,在控制器上挂载最核心的Controller Events,把事件挂载到控制器上,将相关的属性进行设置,

 

 

 

VRTK瞬移机制:

         瞬移是基于 碰撞器 之上的,所以想瞬移的话,就得加上碰撞器组件

萌猫娘巧克力 的 VR笔记

 

 

将射线照射在箱子上,他目前不会站在箱子上,

这里就涉及到了【自适应高度】问题,

 

萌猫娘巧克力 的 VR笔记

将Basic替换成Height脚本即可解决问题

VRTK_Height Adjust Teleport 和 VRTK_Basic Teleport 只能添加一个

萌猫娘巧克力 的 VR笔记

让指针的末端附着在物体的表面上,

就像凝视效果的光标,和物体的法线方向保持一致

 

VRTK的快速瞬移:

 

之前的瞬移是从一个点快速 到了另一个点,中间没有过程只是加了闪屏

萌猫娘巧克力 的 VR笔记

 VRTK_Dash Teleport 快速瞬移

中间的移动过程是可见的,并且,它自带高度自适应的效果

 

瞬移区域限制:

有种办法就是,把不想让玩家进行瞬移的位置进行 碰撞器 的消除,但是这样的话,太麻烦

VRTK,就为我们提供了 3 种限定瞬移区域机制

 

第一种方式:

 

无论Basic 、Height 还是 Dash Teleport ,都有

萌猫娘巧克力 的 VR笔记

它设定了排除的规则,它需要脚本类型是【VRTK_Policy List】

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

【包含3个Tag的游戏物体】

萌猫娘巧克力 的 VR笔记

忽略 Tag 为 NoTeleport 游戏物体,不参与进行瞬移

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

此时,第三个箱子就无法瞬移到上面了

以上是VRTK_Policy List方式

 

第二种方式:

那三个瞬移组件,也有这个NavMeshLimitDistance,

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

【这个图可能无法看清烘焙范围,后面有张烘焙后的图】

萌猫娘巧克力 的 VR笔记

Nav Mesh Limit Distance

 

要注意一个问题,那就是这个 Nav Mesh Limit Distance 是 烘焙缩进,如果是0的话,那就绝对不可以往Nav Mesh范围外进行瞬移,

 

如果设置了0.5的话,它就可以往 Nav Mesh 范围外0.5的位置进行微瞬移(可以往外面一点)

萌猫娘巧克力 的 VR笔记

视频解释:往NavMesh以外,往外走0.5米,也是可以进行瞬移的

萌猫娘巧克力 的 VR笔记

注意下,填写正整数的话,就会往NavMesh外多少多少米进行微瞬移,填写0的话,就会不考虑 导航 瞬移

 

 

第三种方式:

类似于 Interaction System 的 Teleport Point,

给他设定一个点

萌猫娘巧克力 的 VR笔记

VRTK  ->  Prefabs  ->  DestinationPoint

萌猫娘巧克力 的 VR笔记

最初它的样子是一个胶囊体[瞬移点]

但是,我们可以将它变成一个椭圆片[瞬移区域]

还要注意一点的就是,它们的 碰撞器大小 !!!!拖成 椭圆片 之后,要更改碰撞器

萌猫娘巧克力 的 VR笔记

自定义指针:

萌猫娘巧克力 的 VR笔记我们得了解,它们分别的名字

Custom Cursor 是 指针与碰撞体 交界的光标.

萌猫娘巧克力 的 VR笔记

Custon Tracer 是 构成曲线的元素 【 默认用Sphere构成的点状曲线  】

萌猫娘巧克力 的 VR笔记

Tracer Density 是 曲线密度,越大越密集

萌猫娘巧克力 的 VR笔记

根据长短,自动缩放萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

【看组件名】

将物体改成条形的话,游戏物体就只挂载Transform 和 Line Renderer

设置 Width 、不要World Space 、 Positions Element2  Z轴改成2

我们可以在Tracer上做很多设置,例如添加粒子特效

【试想一下,当按下Touch Pad,就会有烟花火星产生,那个场景,这就是添加了粒子特效做出来的效果】

 

 

使用VRTK实现与物体的交互

 

VRTK中与物体交互的三种类型:Touch、Grab、Use

 

 

使用VRTK实现与物体的交互

 

萌猫娘巧克力 的 VR笔记

给 想进行交互的物体 添加一个VRTK_Interactable Object脚本

萌猫娘巧克力 的 VR笔记

【物体上要添加这个脚本 碰撞器】

三种方式与物体进行交互

[手柄上,要添加VRTK_Interactable Grab]

萌猫娘巧克力 的 VR笔记

 

【视频此处太模糊了,因为,VRTK版本过旧,而且有些地方不一样了,所以没有贴图】

萌猫娘巧克力 的 VR笔记

在手柄上,添加上Grab,也可以添加上Use

需求:抓起剑的时候,实现手柄消失

被物体添加 VRTK_InteractController Appearance

萌猫娘巧克力 的 VR笔记

看见Hide Controller On Grab了吧,它的意思就是当抓起来的时候,隐藏手柄

 

现在给 手柄 添加一个振动:

手柄振动的反馈是,给物体交互配置过程进行设置的,所以,我们只需要给物体添加一个脚本,VRTK_Interact Haptics

萌猫娘巧克力 的 VR笔记

另一种配置物体可交互的手段:

【强烈推荐,根本不需要记忆该添加哪些脚本自动完成添加脚本】

基于图形化配置

萌猫娘巧克力 的 VR笔记

每个物体的交互是不一样的,

门 和 剑,它们的交互方式是不一样的

萌猫娘巧克力 的 VR笔记

Precision Grab是精准抓取的意思,不勾选的话,它是和手柄的坐标保持一致,只有吸附的效果

如果勾选上的话,碰到什么地方,就从那里抓取起来,

这个属性,有利于抓取点没有特殊要求的物体

萌猫娘巧克力 的 VR笔记

设置 吸附点 Handler非常有利于吸附的方式

它的旋转朝向的设置,就是被抓取的物体,在被抓取以后在原有的基础上,将要在各个轴向上进行旋转的一个增量,它是一个增量而不是一个具体要达到的数值

另外一种抓取机制,将被抓取的物体作为一个被攀爬的点

VRTK抓取机制:关节点相关机制【视频中讲的特别难受】

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

这种效果,就是类似于攀岩的效果

 

当我抓取这个节点的时候,节点还是和手柄在一起,只不过这个节点不在相对于世界做一个运动,而是移动我们的身体,通过不停的拖拽从而移动体验者的位置

萌猫娘巧克力 的 VR笔记

在某个组件上添加Player Climb即可攀爬

萌猫娘巧克力 的 VR笔记【该图中,我们正在攀爬梯子】

另一种抓取机制:

萌猫娘巧克力 的 VR笔记

Rotator Track ,要配合【Hinge Joint】组件,

 

萌猫娘巧克力 的 VR笔记

它可以被理解为门的合叶,它是围绕一个点进行旋转,最恰当的例子

萌猫娘巧克力 的 VR笔记

这里有个黄色的箭头,这就是要围绕旋转的轴向

萌猫娘巧克力 的 VR笔记

VRTK 3.2.1版本】配置,早期这个笔记写出来的时候上面的配置 并非 使用3.2.1的配置方式,但是,在之前配置的时候,我已经调整了笔记的顺序,所以,看到这里可以再往上翻一翻我写过的配置方式

萌猫娘巧克力 的 VR笔记【在这里就放一张图,看看大家能不能回想起来,如何配置】

VRTK中的高亮和振动

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

控制器高亮:

萌猫娘巧克力 的 VR笔记

 

想让 控制器 进行高亮,我们需要去自己写脚本来进行控制

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

 

课时27,讲解了一个二级联动的一个BUG,可以看一看!!!!

【有兴趣的各位,可以看看视频,这里就不做赘述了】

VRTK中与UI的三种交互方式

萌猫娘巧克力 的 VR笔记

我们想近距离触碰一个UI并且触发它

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

在Canvas上,挂在一个 VRTK_UI Canvas脚本,有个Auto Active Within Distance

它的意思是,距离多少的时候,就**这个UI面板 ;;;;【并且手柄要添加一个Touch组件和 UI Pointer,这样才能响应UI上的事件】

萌猫娘巧克力 的 VR笔记

现在,我们要弄一个头部控制的这么一个东西,因此,

萌猫娘巧克力 的 VR笔记

 

然后再在HeadSet【头部控制器】上,添加一个组件【VRTK_Transform Follow】

这个组件是 它可以让一个物体跟随另一个物体,包括位置旋转以保证当前这个粒子,让HeadSet跟踪头部来发送射线以指定它的位置

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

补充一句,这个Interact With Object是后面讲到的东西,我弄混了

它是用激光和物体进行交互

萌猫娘巧克力 的 VR笔记

还有一步,就是别忘了添加渲染上去

萌猫娘巧克力 的 VR笔记【将渲染拖上去,要记得】

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

 

 

总结一下:

人为定义一个可以发送射线的物体 配置 Pointer 、 它的Pointer Renderer 和 与UI进行交互的UI Pointer,再添加一个进行跟随Transform Follow,让它指定到头盔上,以确定,它是以眼睛的方位进行发送射线,然后跟UI碰撞

使用激光指针与物体进行交互

萌猫娘巧克力 的 VR笔记

用激光对物体进行交互,需要进行配置

在两个手柄上,添加一个脚本【VRTK_Interact Use】

然后Pointer脚本上,勾选上Interact With Object

萌猫娘巧克力 的 VR笔记

 

选中的目的,就是让这个激光与物体实现交互,而不是简单实现手柄

这时候,就实现了激光指针跟手柄与物体实现选中效果,

但是,到目前为止,我们并没有告诉VRTK,我们在选中它之后,要做什么,

它仅仅是接受到了事件,仅仅知道我用鼠标进行点击,并不知道点击之后要做什么

这里有两种方法可以进行配置

第一种,用Unity的自带东西:

萌猫娘巧克力 的 VR笔记

在手柄上添加一个VRTK_InteractUse_UnityEvents

添加了之后,它上面有事件函数

萌猫娘巧克力 的 VR笔记

 

两个函数的意思是:

当控制器使用了可交互的物体

使用完毕之后

萌猫娘巧克力 的 VR笔记

 

这是开始去抓取的设置

这里要注意下,分别去设置左手和右手

萌猫娘巧克力 的 VR笔记萌猫娘巧克力 的 VR笔记

现在有个问题,那就是抓取了武器之后,任然能进行瞬移,这是我们不想要的,

所以,我们得对Pointer进行一个设置,在抓取的时候不允许它去射线

萌猫娘巧克力 的 VR笔记

把  VRTK_Pointer  也拖进去,找到它的一个Toggle属性,设置为false , 不允许它射线从而达到无法瞬移

这样设置来设置去,显然特别麻烦,因此,我们要通过手动写代码的形式去进行配置

第二种,用 手动写代码 的方式进行配置Use

 

源代码:

萌猫娘巧克力 的 VR笔记

这个代码是出自 第19个 案例

它自己写了一个代码,不过这个代码是继承自 VRTK_InteractableObject 所以本质上还是挂载了InteractableObject脚本

 

唯一要关注的地方就是 它重写了 StartUsing 和 StopUsing  这两个方法:

 

StartUsing函数描述:

VRTK_InteractableObject.StartUsing(GameObject currentUsingObject)` has been replaced with `VRTK_InteractableObject.StartUsing(VRTK_InteractUse currentUsingObject)`. This method will be removed in a future version of VRTK.

public virtual void StartUsing(GameObject currentUsingObject)

{

     StartUsing((currentUsingObject != null ? currentUsingObject.GetComponent<VRTK_InteractUse>() : null));

}

这个函数已经过时了,形参列表由原先的GameObject被改成了VRTK_InteractUse

StopUsing也是如此

所以,我们要实现更复杂的逻辑,就需要继承自  VRTK_InteractableObject  ,自己来进行开发

当自己写的脚本继承自了 VRTK_InteractableObject , 它就会有它的东西可以进行设定

之前我们设置的射线抓取是被吸附到手柄上,然后再抓取,位置移动了!

我们可以设置一下,以达到一个目的,那就是吸附在光标上

萌猫娘巧克力 的 VR笔记

因为不要吸附点这样就可以不让它直接吸到手柄上

萌猫娘巧克力 的 VR笔记

 

把这个打开,它就会被吸附到  光标  上

萌猫娘巧克力 的 VR笔记

这就是实现的效果

注意事项:

萌猫娘巧克力 的 VR笔记

勾选了这个,它可以把激光当做手柄的延伸进行一个操作

这是介绍了Use使用方法,它是基于事件的处理函数

萌猫娘巧克力 的 VR笔记

关闭了这个,同样是可以远程抓取,就不是在激光顶点

 

自定义手柄 – 将手柄定义为手的样子

萌猫娘巧克力 的 VR笔记

用脚本的方式实现自动抓取

萌猫娘巧克力 的 VR笔记

在两个控制器上,添加一个Auto Grab脚本

萌猫娘巧克力 的 VR笔记

 

 

 

现在,我们不希望它显示默认控制器的模型了,所以,左手右手添加一个Controller Appearance

萌猫娘巧克力 的 VR笔记

两个都选上 隐藏控制器 在抓取上

萌猫娘巧克力 的 VR笔记

 

萌猫娘巧克力 的 VR笔记如果不勾选,会呈现出这样的效果

手柄与模型有旋转的偏移

我们要在抓取点上设置手柄与物体的朝向

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记

萌猫娘巧克力 的 VR笔记【实现效果,按下后完全按下(播放动画)】

接下来就是有个需求,我想实现一个按下10%,它也是只做一个握10%的动作

萌猫娘巧克力 的 VR笔记

这就是按下百分比动画的代码展示

视频中,说了一个问题,我们手柄是被替换掉了,但是抓取物体时出现了问题,抓取的话会脱离手柄

萌猫娘巧克力 的 VR笔记

双手模型上拖上我们之前写的Hand脚本上去,再把Controller也拖上去

 萌猫娘巧克力 的 VR笔记萌猫娘巧克力 的 VR笔记

能触碰到,但是,无法进行抓取

这是因为,我们左右手控制器上,没有RigidBody

萌猫娘巧克力 的 VR笔记

所以,我们要在 拖出来手模型 的下面放置一个  空物体带上刚体组件 

萌猫娘巧克力 的 VR笔记

好了,至此为止,本人的VR笔记就到此为止了,介绍了它的配置,如何抓取东西,抓取机制,Handler的使用

最后再次申明,本篇VR笔记最终解释权由 “萌猫娘巧克力” 持有

欢迎大家来观看与指出瑕疵

 

 

 

 

 

 

 

相关文章:

  • 2021-12-01
  • 2021-08-01
  • 2021-10-14
  • 2022-12-23
  • 2022-01-07
  • 2021-07-30
猜你喜欢
  • 2021-04-20
  • 2021-12-06
  • 2021-07-08
  • 2021-10-24
相关资源
相似解决方案