【Unity VR开发】VRTK 3.3.0 配置与基本使用

VRTK3.3 开发日志

2021.11.16更新:半年前第一次接触VR开发,看B站Siki学院的视频做的笔记。今天整理一下,以供没接触过VR开发的人来学习。有些地方没有配图,但个人认为影响不大,按文字说明一步步来操作还是没问题的。
笔记参考视频链接《VR游乐园》开发案例 (P5-P13)

0 前言

VRTK是Unity中用于VR开发的一个免费插件,调用的是SteamVR的接口。
早期的SteamVR还不是很成熟,直接使用其进行开发较为困难。 VRTK是在SteamVR的基础上实现了一些简单的交互功能,使其开发起来变得十分简单。在2019年2月VRTK发布了3.x系列最后一个版本3.3.0,之后便投入VRTK4.0的研发。

适用unity版本:5.x - 2019.x系列

硬件设备:VR头显、手柄、定位器(我们实验室里使用的是HTC VIVE)

前置条件:下载Steam,并安装好SteamVR,配置游玩模式(站立/房间)

image-20211116105200632

1 插件导入

因为VRTK本质上是调用SteamVR的API再进行封装的,所以使用VRTK时需要一并导入SteamVR
Asset Store中的SteamVR版本是2.0以上的,SteamVR升级到2.X版本后,采用了新的架构,与VRTK不再适配。
我们需要到GitHub上下载SteamVR之前的版本,即1.X版本。在GitHub搜索SteamVR,在右侧栏找到Release进去下载。

SteamVR 官网下载链接https://github.com/ValveSoftware/steamvr_unity_plugin/releases

SteamVR 蓝奏云下载链接(觉得慢可以下我的):https://guichai.lanzoui.com/iz8TVwirk4b

image-20211115115317949

导入Unity,直接拖到 Project-Assets 文件夹下即可。
在使用 Unity2020.x 版本测试时,发现导入 SteamVR 1.2.3 后报错,提示错误为没有找到VR命名空间
似乎较新版本的unity将VR的功能归并到XR下了,手动修改脚本命名空间较为麻烦,建议使用旧版本的unity进行开发。
这里切换到 Unity2019.x 版本,导入 SteamVR 正常。

下载 VRTK,在 Asset Store 中搜索 VRTK,同样导入Unity。

VRTK 蓝奏云下载链接(嫌麻烦也可以下我的):https://guichai.lanzoui.com/isUeMwjuzub

image-20211115115714694

2 初始配置

2.1 头显

想在头盔中看到我们搭建的游戏场景,就要先配置头显

  1. 创建空物体命名为VRTK,负责管理接收头显和手柄信息

    添加 VRTK_SDK Manager 脚本

  2. 在VRTK物体下继续创建空子物体,命名为VRTK_Setup,负责管理头显的启动

    添加 VRTK_SDK Setup 脚本,Quick Select选择 SteamVR

    image-20211116111851116

  3. 在SteamVR的Prefabs文件夹下找到 [CameraRig] 预制体,拖拽为VRTK_Setup的子物体。

  4. VRTK物体中的VRTK_SDK Manager 脚本点击 Auto Populate ,完成摄像头配置。

    image-20211116111714486
    运行游戏,头盔眼镜中能看到天空盒,且显示内容随头盔运动变化。
    头显配置

2.2 手柄

想要用手柄进行游戏交互,就要对手柄进行配置。手柄的很多功能如:传送式移动、远距离点击按钮,都需要依赖射线进行,所以我们把射线功能一起加上。

  1. 创建空物体命名为 VRTK_Scripts,负责管理手柄功能。

  2. 在 VRTK_Scripts 下继续创建空子物体,命名为 LeftController,负责管理左手柄。

    添加以下脚本

    手柄控制VRTK_Controller Events 脚本

    射线功能VRTK_Point 脚本

    射线显示VRTK_Straight Pointer Renderer 脚本

  3. 将 VRTK_Straight Pointer Renderer 脚本拖拽到 VRTK_Point 脚本的 Pointer Renderer 中。

    image-20211116111312899

  4. 将 LeftController 物体拖拽到 VRTK 物体里 VRTK_SDK Manager 脚本的 Left Controller 中,完成左手柄射线配置。

  5. Ctrl+D复制 LeftController 物体,命名为 RightController,负责管理右手柄。

  6. 将 RightController 物体拖拽到 VRTK 物体里 VRTK_SDK Manager 脚本的 Right Controller 中,完成右手柄射线配置。

    image-20211116111419944
    按下手柄圆盘看到射线显示,若显示不成功,找到 VRTK_Setup 物体的 VRTK_SDK Setup 脚本,取消 Auto Populate 勾选。
    手柄配置

3 简单交互

3.1 按钮点击

  1. 在 LeftController 或 RightController 物体中添加 VRTK_UI Pointer 脚本

    image-20211116114811380

  2. 添加一个 Button 测试,Canvas 的 RenderMode 改为 World Space ,调整其大小并放到合适位置。

  3. 在 Canvas 中添加 VRTK_UI Canvas 脚本。

    image-20211116114306468

  4. 触碰效果设置:Button 组件中调节 Highlighted Color,手柄射线触碰按钮时,就会发生相应的颜色变化。

  5. 触碰区域修正:其实现在已经可以进行 UI 交互了,但是射线触碰UI时射线颜色没有改变,需要修复该bug。

    将 VRTK_UI Canvas 脚本中生成和修改 canvasBoxCollider 的 4 行代码注释。

    image-20211116123338514

    为按钮添加 Box Collider 组件,并调整边缘。

    image-20211116124148192
    使用手柄发射射线,将射线对准按钮,观察到按钮变化。
    UI交互

3.2 地面传送

​ 在 VRTK_Scripts 物体下创建空子物体,命名为 PlayerArea,负责实现传送功能。

  • 基本传送:添加 VRTK_Basic Teleport 脚本。

    此时在场景中添加一个 Plane ,可以发现手柄能在地面上传送了。

    image-20211116125222342
    地面传送

  • 指定传送:在实际开发中场景会有很多物体,有的物体不需要传送功能,所以需要我们对场景中可以传送的物体进行筛选。

    添加 VRTK_Policy List 脚本,选择Ignore或Include,输入筛选标志(标签、脚本、层级)。

    image-20211116130649506

    在 LeftController 和 RightController 物体的 VRTK_Pointer 脚本中 Target List Policy 项指定所添加的 VRTK_Policy List 脚本。

    image-20211116130801702

3.3 物体拾取

  1. 在 LeftController 或 RightController 物体中添加以下脚本

    触碰检测VRTK_Interact Touch 脚本
    拾取功能VRTK_Interact Garb 脚本

    image-20211116131123325

  2. 在物体上添加

    VRTK_Interactable Object 脚本,勾选 Is Grabbable

    image-20211116131738151

    握住手柄侧边键,看到物体能被抓起来。松开手柄侧边键,物体不再被抓取。

    物体拾取
    其他可按需求添加脚本

    换手抓取(物体可以在两个手柄中切换抓握):VRTK_Swap Controller Grab Action 脚本,并拖拽到VRTK_Interactable Object脚本中的 Secondary Grab Action Script 上。

    触碰边缘高亮VRTK_Outline Object Copy Highlighter 脚本。

    抓取为子物体(调整抓握的位置与角度):VRTK_Child Of Controller Grab Attach 脚本,在物体下创建空子物体,调整位置和角度,拖拽到 Right Snap HandleLeft Snap Handle 上。

4 更多学习

VRTK - LegacyExampleFiles 下有VRTK实现特定功能的场景示例,建议可以花半小时体验一下,了解一下VR中可以实现的效果。到实际项目中若需要实现其中的功能,可以到对应场景示例中参看用到了哪些组件,也可以copy场景中的物体出来直接使用。
image-20211116165956949

以下是各个场景中示例的简介,来自他人笔记,文章出处链接已放出。

原文链接:https://blog.csdn.net/pq8888168/article/details/103156223

.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:触摸手柄圆盘控制CameraRigde的移动和方向

.018_CameraRig_FramesPerSecondCounter:帧数的显示效果

.019_Controller_InteractingWithPointer:使用射线控制物体的功能演示

.020_CameraRig_MeshTeleporting:网格碰撞的传送效果

.021_Controller_GrabbingObjectsWithJoints 使用关节抓取

.022_Controller_CustomBezierPointer:常规使用的贝塞尔曲线样式

.023_Controller_ChildOfControllerOnGrab:子物体的抓取功能演示

.024_CameraRig_ExcludeTeleportLocations:排除不可传送的物体,使用Tag或者Layer..

.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:和UI的交互。包括使用手柄发射射线和使用头盔发射射线进行交互

.035_Controller_OpacityAndHighlighting:手柄接触物体的高亮效果

.036_Controller_CustomCompoundPointer:贝塞尔曲线的样式展示

.037_CameraRig_ClimbingFalling:使用手柄攀爬功能展示

.038_CameraRig_DashTeleport:前冲传送功能展示。

.039_CameraRig_AdaptiveQuality:头盔内显示FPS和质量效果提示。

.040_Controls_PanelMenu:面板UI菜单交互。

.041_Controller_ObjectSnappingToDropZones:抓取的物体在指定区域断裂抓取?

.042_CameraRig_MoveInPlace:模拟行走,按下圆盘,在真实环境中移动场景中也会移动

.043_Controller_SecondaryControllerActions:两个手柄可以同时操作一个物体

.044_CameraRig_RestrictedTeleportZones:设置指定的传送点
  • 26
    点赞
  • 139
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值