分类导航
物体的抓取,使用和控制:005,006,008,013,014,021,023,025(Control),026,037,041,043

射线与物体交互:003,019,034

移动:004,007,010,011,012,015,017,020,022,024,027,028,031,033,036,038,042,044

手柄效果:002,016,029,030,032,035,040

这些数字是待会儿要介绍的官方案例的场景序号,未提及的序号就是一些零散的功能。

文章目录

  • 001_CameraRig_VRPlayArea
  • 002_Controller_Events
  • 003_Controller_SimplePointer
  • 004_CameraRig_BasicTeleport
  • 005_Controller_BasicObjectGrabbing ⭐
  • 006_Controller_UsingADoor
  • 007_CameraRig_HeightAdjustTeleport
  • 008_Controller_UsingAGrabbedObject ⭐
  • 009_Controller_BezierPointer ⭐
  • 010_CameraRig_TerrainTeleporting
  • 011_Camera_HeadSetCollisionFading
  • 012_Controller_PointerWithAreaCollision
  • 013_Controller_UsingAndGrabbingMultipleObjects ⭐
  • 014_Controller_SnappingObjectsOnGrab ⭐
  • 015_Controller_TouchpadAxisControl
  • 016_Controller_HapticRumble ⭐
  • 017_CameraRig_TouchpadWalking ⭐
  • 018_CameraRig_FramesPerSecondCounter
  • 019_Controller_InteractingWithPointer ⭐
  • 020_CameraRig_MeshTeleporting
  • 021_Controller_GrabbingObjectsWithJoints ⭐
  • 022_Controller_CustomBezierPointer
  • 023_Controller_ChildOfControllerOnGrab
  • 024_CameraRig_ExcludeTeleportLocations ⭐
  • 025_Controls_Overview ⭐
  • 026_Controller_ForceHoldObject
  • 027_CameraRig_TeleportByModelVillage
  • 028_CameraRig_RoomExtender
  • 029_Controller_Tooltips
  • 030_Controls_RadialTouchpadMenu ⭐
  • 031_CameraRig_HeadsetGazePointer
  • 032_Controller_CustomControllerModel ⭐
  • 033_CameraRig_TeleportingInNavMesh
  • 034_Controls_InteractingWithUnityUI ⭐
  • 035_Controller_OpacityAndHighlighting
  • 036_Controller_CustomCompoundPointer
  • 037_CameraRig_ClimbingFalling
  • 038_CameraRig_DashTeleport
  • 039_CameraRig_AdaptiveQuality
  • 040_Controls_PanelMenu
  • 041_Controller_ObjectSnappingToDropZones
  • 042_CameraRig_MoveInPlace
  • 043_Controller_SecondaryControllerActions ⭐
  • 044_CameraRig_RestrictedTeleportZones

本文使用的插件版本:VRTK3.3 ,SteamVR 1.2.3
使用的 Unity 版本:2019 LTS 版
我是使用 HTC Vive 进行测试,目前还没有试过和另一款主流头显 Oculus Quest2 进行结合,不过 VRTK 也是支持 Oculus SDK 的。

在 VRTK 3.3 中,VRTK/Examples 目录变成了 7 个场景。官方把以前版本的 44 个案例放到了 VRTK/LegacyEampleFiles 下,在此目录下的 README 文件也有对每个场景的大致介绍(英文)。本文只是简要介绍的VRTK/LegacyEampleFiles 下的 44 个案例场景到底是演示什么东西的。大家如果想要有更深刻的认识,建议真机体验一下,并且结合官方文档进行学习。
官网地址:https://vrtoolkit.readme.io/docs/summary

基本上 VRTK 封装的组件(脚本)挂载到 手柄控制器,可交互的物体, PlayerArea(表示玩家移动的区域) 上比较常见。这些组件中的一些参数说明,以及挂载一个组件之前是否需要添加其他组件才能生效,都在官方文档中有详细的说明。


001_CameraRig_VRPlayArea

演示头部相机。
VRTK_SDK Manager 组件的头显设置。

002_Controller_Events

操作手柄的按键会在控制台上显示相应的信息。(如按下了哪个按键,是按下还是释放之类的)
需添加 VRTK_ControllerEvents 组件到手柄控制器上。

记得在 VRTK_SDK Manager 组件做好手柄设置。

003_Controller_SimplePointer

手柄发射一条直线射线的演示。
VRTK_Pointer 和 VRTK_Straight Pointer Renderer 组件的使用。
记得把 VRTK_Straight Pointer Renderer 拖给 VRTK_Pointer 的 Pointer Renderer 变量。

004_CameraRig_BasicTeleport

手柄使用直线射线传送。
VRTK_BasicTeleport 组件的使用。

005_Controller_BasicObjectGrabbing ⭐

基础的手柄拾取物体的功能,包括变色和边缘发光,左右手柄拾取不同物品,左右手柄交换拾取同一物品。
手柄控制器加上 VRTK_InteractTouch 和 VRTK_InteractGrab。
可交互的物体加上 VRTK_InteractableObject 组件。
注:加了碰撞体的物体才能被抓取。

006_Controller_UsingADoor

按下特定的按键会开门。
VRTK_InteractUse 组件。VRTK_InteractableObject 勾选 IsUsable 作用。

007_CameraRig_HeightAdjustTeleport

带有高度的传送以及忽略某些物体的传送检测功能,还包括头部的物理效果。
HeightAdjustTeleport 组件(区别于 004 的 VRTK_BasicTeleport)VRTK_PolicyList (设置哪些物体不能为传送点)
VRTK_BodyPhysics (挂载到 PlayerArea 上)

008_Controller_UsingAGrabbedObject ⭐

抓取物体后使用物体上面的功能。此场景是抓取枪发射子弹和抓取方块转圈圈。
VRTK_InteractGrab 和 VRTK_InteractUse 组件。

009_Controller_BezierPointer ⭐

贝塞尔曲线的传送功能使用演示。
VRTK_BezierPointerRenderer 组件。(区别于之前的 VRTK_Straight Pointer Renderer)

010_CameraRig_TerrainTeleporting

地形上的传送功能。

011_Camera_HeadSetCollisionFading

展示头盔碰撞到墙体的黑屏效果,表示超出行动范围。
VRTK_HeadsetCollision,VRTK_HeadsetFade,VRTK_HeadsetCollisionFade 组件。

012_Controller_PointerWithAreaCollision

使用传送功能时会出现一个范围提示框。
VRTK_PlayAreaCursor 组件。拖拽给 VRTK_BezierPointerRenderer 组件的 Playerarea Cursor 变量。

013_Controller_UsingAndGrabbingMultipleObjects ⭐

手柄抓取物体和使用物体功能的新方式。
在 InteractGrab 组件中取消勾选:

可实现物体被抓取后松开手柄键仍然不掉落。

014_Controller_SnappingObjectsOnGrab ⭐

抓取物体时的一些细节。

VRTK_FixedJointGrabAttach 组件(添加在可交互的物体上,手柄和可抓取物体之间就会建立一个 Fixed Joint 来连接)。之前的拾取物体案例也有出现,不过此案例进行了更详细的介绍)。勾选了 Presicion Grab 后手柄拾取物体的连接点会是精确的抓取点(在哪个位置抓取就连接在哪个点)。在本案例中如果没有勾选此选项就去拾取枪,即使你是在枪口处拾取枪,最后呈现出来的拾取点还是枪柄的位置。

在 Right/Left Snap Handle 中加入一个空物体可以使被拾取物体的位置和旋转和空物体匹配。

有些物体用了 VRTK_ChildOfControllerGrabAttach 组件,这个放到场景 023 介绍。

VRTK_InteractObjectAppearance 组件加到可交互的物体上能实现抓取物体后隐藏手柄控制器,放下物体后又重新显示。(取消下图中红色方框处的勾选)

015_Controller_TouchpadAxisControl

手柄圆盘上触碰的位置轴向控制小车移动的方向, 按下扳机键能使小车跳跃。
通过监听手柄按键事件,来对小车的刚体施加力。

016_Controller_HapticRumble ⭐

手柄震动。
调用 API (VRTK_ControllerHaptics 类的静态方法):

017_CameraRig_TouchpadWalking ⭐

触摸手柄圆盘控制移动。

VRTK_TouchpadControl 组件:提供可通过改变手柄 Touchpad 上轴的位置(手放在手柄圆盘上的位置)来控制物体的能力。

以下组件如果要生效需提前挂载 VRTK_TouchpadControl 组件(实际上 VRTK_ObjectControl 组件就行,它能够监听虚拟轴的位置变化。因为 VRTK_TouchpadControl 继承自 VRTK_ObjectControl,在本场景中就是监听手柄圆盘上轴的位置变化,也就是手放在圆盘上的位置):

记住要在红色方框处拖入挂载 VRTK_TouchpadControl 组件的物体。蓝色方框处选择监听哪一个方向的轴( X 轴和 Y 轴)。

VRTK_SlideObjectControlAction → 以滑动的方式移动物体,在本场景就是通过触摸手柄圆盘来实现人物平滑移动
VRTK_WarpObjectControlAction → 这个 warp 不知道怎么翻译比较好,它给人的感受就是通过触摸手柄圆盘向一个方向瞬间传送一小段距离,在视野中会有突然眼前一黑的传送效果。
VRTK_RotateObjectControlAction → 通过触摸手柄圆盘来实现平滑旋转
VRTK_SnapRotateObjectControlAction →通过触摸手柄圆盘向一个方向瞬间旋转一个角度

官方案例里给了几个不同的 X,Y 轴组合,大家可以自行进行尝试。

018_CameraRig_FramesPerSecondCounter

显示帧数。

019_Controller_InteractingWithPointer ⭐

使用射线与物体交互。
在 VRTK_InteractableObject 组件上勾选此选项(红框为必选):

默认情况下触摸到物体时按下手柄扳机键会和物体进行交互(在手柄控制器上也要加上 VRTK_InteractUse),然后勾选以上选项后射线射到物体上时也会触发“使用”功能,效果与触摸到物体时按下手柄扳机键是一样的。

020_CameraRig_MeshTeleporting

网格碰撞的传送效果。

021_Controller_GrabbingObjectsWithJoints ⭐

使用不同关节抓取,本案例演示了不同的抓取机制。每种机制的具体介绍可参考官方文档。

比如 FixedJoint 适合抓取 Cube, SpringJoint 适合抓取抽屉,RotatorTrack 适合抓取门。

022_Controller_CustomBezierPointer

给传送时的贝塞尔曲线加上特效。

在 VRTK_BezierPointerRenderer 组件进行设置。

023_Controller_ChildOfControllerOnGrab

子物体的抓取功能。演示了一个射箭场景。
可交互的物体添加了 VRTK_ChildOfControllerGrabAttach 组件后,当用于抓取的物体(此场景中是玩家的手柄控制器,也就是玩家的手)拾取了可交互物品时,该物品会成为用于抓取的物体的子物体,也就是手柄的子物体,使得物体自然地跟随手柄移动和旋转。

024_CameraRig_ExcludeTeleportLocations ⭐

排除不可传送的物体,在 PlayerArea 上加个 VRTK_PolicyList 组件进行设置。本场景使用 tag 和 scripts(物体挂有指定名字的脚本) 进行排除。

025_Controls_Overview ⭐

控制功能,包括 Pusher,Rotator,Slider
具体功能可参考官方文档。

026_Controller_ForceHoldObject

程序一开始运行双手就持有剑,并且不会掉落。
在手柄控制器上添加 VRTK_ObjectAutoGrab 组件。(使用前必须先在同一个物体上添加 VRTK_InteractTouch 和 VRTK_InteractGrab 组件)

027_CameraRig_TeleportByModelVillage

使用触摸模型的方式进行固定点的传送。
具体代码逻辑在这个脚本中:

028_CameraRig_RoomExtender

比较空旷的场景。玩家可以在现实世界允许的范围内多走几步到达虚拟世界中的某个地点。

029_Controller_Tooltips

手柄上的按钮提示 UI
将 ControllerTooltips 预制体作为控制器的子物体。

030_Controls_RadialTouchpadMenu ⭐

手柄圆盘上面的虚拟按钮菜单。
将 RadialMenu 预制体作为某个物体的子物体。

031_CameraRig_HeadsetGazePointer

使用头盔发射射线的传送功能。

HeadsetFollower 挂有 VRTK_SDKObjectAlias 组件,可以使该物体成为被选中的 SDK Object 的子物体。

选择 Headset,代表了玩家的头部摄像机。这样在程序运行时 HeadsetFollower 物体就会成为玩家头部相机的子物体。

HeadSet 挂有 VRTK_TransformFollow 组件可以使 Headset 的 Transform 跟随 HeadsetFollower 的 Transform,另外射线相关的组件也挂在这个物体而不是手柄控制器上。这样 Headset 物体相当于在我们的头盔上,可根据头部的视线来帮助传送。

032_Controller_CustomControllerModel ⭐

替换手柄的模型的案例。

将 VRTK_BasicHand 作为手柄控制器的子物体。

在 VRTK_InteractTouch 组件添加自定义的手部碰撞器。

033_CameraRig_TeleportingInNavMesh

在寻路网格上的传送功能。
VRTK_NavMeshData 组件。

034_Controls_InteractingWithUnityUI ⭐

和 Unity UGUI的交互。包括使用手柄发射射线和使用头盔发射射线进行交互。
在可交互的 UI 上添加 VRTK_UICanvas 组件。
在可与 UI 交互的物体(手柄,头盔)上添加 VRTK_UI Pointer 组件。

注:这个场景里额外添加了一个EventSystem,所以能和按钮之类的控件进行交互。(原来有个 EventSystem 在 SDKSetupSwitcher 的子物体中,但运行时默认是隐藏的。如果我们自己创建的VR场景并且想要用到射线与 UGUI 的交互,在创建 UGUI 时 编辑器不会自动为我们创建 EventSystem,我们需手动创建一个)

035_Controller_OpacityAndHighlighting

手柄接触物体时手柄的高亮效果。
VRTK_ControllerHighlighter 组件。

036_Controller_CustomCompoundPointer

贝塞尔曲线的另一种特效。

037_CameraRig_ClimbingFalling

使用手柄攀爬功能展示。
VRTK_ClimbableGrabAttach 组件。
并且拖给到 VRTK_InteractableObject 的 Grab Attach Mechanic Script 变量。
注:攀爬时的抓取点不能加 Rigidbody 组件。

038_CameraRig_DashTeleport

前冲传送,将传送点冲刺过去而不是瞬移。

039_CameraRig_AdaptiveQuality

头盔内显示FPS和质量效果提示。

040_Controls_PanelMenu

面板 UI 菜单交互。

VRTK_PanelMenuController 和 VRTK_PanelMenuItemController 组件的使用。一般是按下手柄圆盘某个位置(top,bottom,left,right)能够打开 UI 面板。

041_Controller_ObjectSnappingToDropZones

可预先设置一个区域,指定我们持有的某类物体在接近这个区域范围时,该区域会出现一个此类物体的形状,提示你可以将这类物体放置在这个区域,并且我们还能设置物体放置在此区域的位置,旋转和缩放。然后当我们松开手持的这个物体时,该物体就会一下子固定到我们设置好的那个区域。(建议自己去体验一下这个场景就知道 SnapDropZone 是什么意思啦)

Unity 官方的英文解释:A Snap Zone (or “Snap Drop Zone”) is a designated area where you can place an object near it, illuminating a shape to indicate you can place it there. Upon releasing the held object, it will “snap” into place.

VRTK_SnapDropZone 组件的使用。

042_CameraRig_MoveInPlace

模拟行走,按下手柄圆盘,在现实世界中移动时,人物在虚拟场景中也会移动(应该是通过摇摆手柄模拟人在现实中摆臂行走奔跑)

VRTK_MoveInPlace 组件的使用。

043_Controller_SecondaryControllerActions ⭐

两个手柄可以同时操作一个物体。
之前的场景是用 VRTK_SwapControllerGrabAction 组件实现双手交换拾取物品。此场景可实现双手一起操作一个物体。

VRTK_AxisScaleGrabAction 组件:当物体被另一个手柄抓取时,能够控制物体地缩放。
VRTK_ControlDirectionGrabAction 组件:当物体被另一个手柄抓取时,能控制物体地旋转方向。

044_CameraRig_RestrictedTeleportZones

设置指定的传送点。

VRTK_DestinationPoint 组件的使用。
PlayerArea 中的 VRTK_PolicyList 组件要做好设置。

VRTK3.3官方44个案例简要介绍(结合 SteamVR)相关推荐

  1. 【Auto.js 】Android 脚本软件 简要介绍及学习资料

    背景:   前几天研究抖音视频爬取的时候,看到有篇文章提到了Auto.js,搜完之后觉得比较有意思,就看着api学了几天,写了几个自用的小脚本.很好上手,如果稍掌握一点js,将会很快可以写好并付诸使用 ...

  2. C语言开发tui,TUI库newt和snack简要介绍

    大多数商业化软件产品一般会通过实现GUI(Graphical User Interface)或者TUI(Text-based User Interface/Textual User Interface ...

  3. A brief introduction to weakly supervised learning(简要介绍弱监督学习)

    文章转载自http://www.cnblogs.com/ariel-dreamland/p/8566348.html A brief introduction to weakly supervised ...

  4. Android进程间通信(IPC)机制Binder简要介绍和学习计划

    在Android系统中,每一个应用程序都是由一些Activity和Service组成的,这些Activity和Service有可能运行在同一个进程中,也有可能运行在不同的进程中.那么,不在同一个进程的 ...

  5. linux df命令功能,Linux df命令简要介绍

    日常工作生活中,我们常需要查看系统当前的磁盘空间使用情况.在windows下,只需简单点击我的电脑,就看到带进度条的系统磁盘使用情况,非常直观.那linux命令行下如何实现同样的功能呢?这就是我们今天 ...

  6. Dalvik虚拟机简要介绍和学习计划

    出自:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是运行在Dalvik虚拟机里面的,并且每一个应 ...

  7. 简要介绍BASE64、MD5、SHA、HMAC几种方法。

    加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了.     言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书.     ...

  8. tensorboard ckpt pb 模型的输出节点_TensorBoard 简要介绍

    在使用 TensorFlow训练大型深度学习神经网络时,中间的计算过程可能非常复杂.出于理解.调试和优化我们设计的网络的目的,模型训练过程中各种汇总数据都可以通过 TensorBoard 展示出来,包 ...

  9. 图形化界面设计软件简要介绍

    图形化界面设计软件简要介绍 [摘要]:面向使用者的系统工程设计,其目的是要准确.快速地在设计者和使用者之间传递信息和实现功能,也是优化产品性能来适应大众的操作能力,减轻使用者的认知负担.成功的系统工程 ...

最新文章

  1. 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
  2. ubuntu14.04连接网络 No valid active connections found!
  3. 80后应该面对的问题
  4. matlab 三维高程根据图片颜色给对应点赋予颜色
  5. java map 面试题_Java 面试系列:集合详解之 Map + 面试题
  6. 想做Bezier动画,可惜弄出来这个差远了。
  7. mike21 matlab tools,Mike post process with Matlab toolbox
  8. 能制作引导系统型U盘的几个软件工具
  9. cvs转datatable_C# CSV 文件转换成DataTable
  10. Gitlab配置ssh key
  11. 小米4c怎么添加语言怎么设置在哪个文件夹,小米4C怎么加密图片?私密文件夹使用方法...
  12. 原型模式,孙悟空都会用,猴毛变出的小猴子!
  13. sin n次方 x 的降幂公式
  14. 华为服务器修改root密码,华为云服务器root权限设置密码
  15. 成年人英语速成指南(附资源及工具)
  16. 人脸识别学生考勤系统【2】--登录
  17. 电脑桌面计算机怎么设置,电脑桌面日历怎么设置全透
  18. 如何在鸿蒙系统中移植 Paho-MQTT 实现MQTT协议
  19. H5怎么制作?快来看这个H5制作平台的案例你可能就明白了
  20. C语言中 枚举变量与枚举值,枚举类型变量再赋值问题

热门文章

  1. 【毕业设计】基于程序化生成和音频检测的生态仿真与3D内容生成系统----程序化生成地形算法设计
  2. Java爬虫 springboot框架下 新浪微博爬虫
  3. linux中man使用技巧
  4. Kriging 克里金算法Java实现
  5. Linux安装redis压缩文件
  6. java后台支付宝支付接口开发
  7. C# DataTable 行转列通用方法
  8. OC基础----查看苹果帮助文档
  9. 如何通过IP地址分辨公网、私网、内网、外网
  10. Pyecharts教程——Line折线图