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

2023-11-15

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:设置指定的传送点
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Unity VR开发】VRTK 3.3.0 配置与基本使用 的相关文章

  • 1.17 从0开始学习Unity游戏开发--场景切换

    前面的所有文章我们都在一个固定的游戏场景内进行开发 在最开始介绍场景这个概念的时候就已经提及 这个场景可以是一张地图 或者是一个对战房间等等 所以显然这个场景可以有多个 并且可以从一个场景切换到另外一个场景 那么在Unity中如何进行场景切
  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity-AR 简介

    Unity AR 简介 现有Unity AR Sdk ARKit 苹果推出的AR开发平台 ARCore Google 推出的增强现实 SDK ARFoundation ARFoundation是ARKit XR插件和ARCore XR插件
  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • UnityVR--组件3--Line Renderer--线性渲染

    目录 线性渲染组件简介 绘制线条Line Renderer组件介绍 绘制拖尾Trail Renderer组件介绍 应用1 使用Line Renderer绘制线段 应用1实现 使用系统工具或自定义工具绘制线段 应用2 Trail Render
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3
  • Unity之获取游戏物体对象或组件的几个方法

    文章目录 前言 通过物体名称获取对象 GameObject Find Transform Find 通过物体标签获取对象 GameObject FindWithTag GameObject FindGameObjectWithTag Gam
  • unity后台加密时间锁

    前言 在做一些项目的时候 有些不良甲方在给完项目后会有不给尾款的情况 之前都是加一些水印啥的 感觉不是很方便 第一不美观 第二如果甲方给完尾款后还得重新打包去水印 然后又做过一个本地的时间锁 等到时间 程序直接退出 但是感觉还是不方便 有时
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • Unity打开工程时卡住的问题

    自从Unity升级了一个版本后 Unity打开工程卡住的问题越来越严重了 具体表现为 选择工程后 Unity窗口消失 但进程还在 有时候等个几分钟能出来 有时候等10分钟都不见得能出来 直观感受上看 似乎是Unity加载工程的时候某一步卡了
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • VLC for unity 插件如何使用

    VLC for unity 插件如何使用 先去下载一个VLC播放器 安装完成后 然后导入插件链接https download csdn net my 这个插件我的另一个上传资源里有 或者到商店去下载 这个插件链接下载完是一个txt文档 里面
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • 0基础学习VR全景平台篇第129篇:认识单反相机和鱼眼镜头

    上课 全体起立 大家好 欢迎观看蛙色官方系列全景摄影课程 一 相机 单反和微单 这里说的相机是指可更换镜头的单反 微单数码相机 那两者有何差异呢 1 取景结构差异 两者最直观的 区别 在于 微单相机
  • 解读 | VR体验式教育的优势 让教育触手可及

    大家好 我是极智视界 欢迎关注我的公众号 获取我的更多前沿科技分享 邀您加入我的知识星球 极智视界 星球内有超多好玩的项目实战源码和资源下载 链接 https t zsxq com 0aiNxERDq 很多孩子过多地沉浸在所谓的 传统教育
  • 一文了解VR全景技术如何运用在乡村发展,助力乡村振兴

    引言 随着科技的不断发展 VR全景技术作为一项创新科技成为了助力乡村振兴的新力量 通过在乡村中应用VR全景技术 不仅能够带动乡村旅游的发展 还能够提升乡村生态环境的保护意识和乡村文化的传承 促进乡村振兴的全面发展 一 VR全景技术的优势 1
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接

随机推荐

  • [Error] invalid operands of types ‘int‘ and ‘double‘ to binary ‘operator%‘

    在运行下面的代码时 编译器报错 Error invalid operands of types int and double to binary operator include
  • SpringMvc ModelAndView 视图解析器和Servlet详解

    一 设置ModelAndView对象 根据View的名称 和视图解析器跳转到指定的页面 页面 视图解析器的前缀 view name 视图解析器的后缀
  • 前端Vue自定义顶部导航栏navBar 导航栏搜索框searchBar 导航栏右侧菜单按钮button

    随着技术的发展 开发的复杂度也越来越高 传统开发方式将一个系统做成了整块应用 经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改 造成牵一发而动全身 通过组件化开发 可以有效实现单独开发 单独维护 而且他们之间可以
  • RBAC权限模型

    权限 权限 是用户可以访问的资源 包括页面权限 操作权限和数据权限 页面权限 页面权限 即用户登录系统可以看到的页面 由菜单控制 菜单包括一级菜单 二级菜单 只有用户有一级菜单 二级菜单的权限 那么用户就可以访问页面 操作权限 操作权限 即
  • 二、UPC-A

    UPC A 1 概述 UPC A 条码是美国较常用也较被广泛认可的条码类型 它主要用于零售行业 例如杂货店 UPC A 由统一杂货产品代码委员会与 IBM 联合开发 2 条码的组成 UPC A 条码由 12 位组成 开头是个单数字系统字符
  • Java热编译热部署插件:JRebel

    修改代码时 会经常遇到一个问题 就是要修改代码 虽然如果是html css js这些会立即生效但是像Java代码还是不行 只要涉及到代码或者配置什么的要重启服务 类似与我修改一个文件 但是想要生效要不然就是单个文件重新run一下 或者服务器
  • day24第三阶段总结

    day24 三阶段总结 课程目标 对第三模块 阶段的知识点进行总结和考试 更好的掌握此模块的相关知识 课程概要 知识补充 阶段总结 思维导图 考试题 1 知识点补充 1 1 并发编程 网络编程 从知识点的角度来看 本身两者其实没有什么关系
  • RS232 485 CAN端口浪涌、脉冲保护电路

    常见端口保护电路记录 实现保护等级 如果需要更高的防护等级需要其他电路配合 由于工作比较忙 有时候查起来太麻烦了 特此记录一下方便查询 模块评估版实物图 实现的保护等级如下 下面是zlg的rsm232完整保护电路 各个器件截图 GDT 气体
  • 使用httpclient 请求报错 :Software caused connection abort: recv failed

    Software caused connection abort recv failed java net SocketException Software caused connection abort recv failed at ja
  • DVWA靶场在sql注入联合查询时返回报错信息 “Illegal mix of collations for operation ‘UNION’ ”之解决

    比如我们输入 1 union select 1 table name from information schema tables where table schema dvwa 会跳出一个页面出现报错提示 Illegal mix of c
  • Form表单、四种常见的POST请求提交数据方式、MIME【转】

    浏览器行为 Form表单提交 1 form表单常用属性 action url 地址 服务器接收表单数据的地址 method 提交服务器的http方法 一般为post和get name 最好好吃name属性的唯一性 enctype 表单数据提
  • 浅析安全框架-Shiro和Spring Security

    一 权限概述 1 什么是权限 权限管理 一般指根据系统设置的安全策略或者安全规则 用户可以访问而且只能访问自己被授权的资源 不多不少 权限管理几乎出现在任何系统里面 只要有用户和密码的系统 权限管理分类 访问权限 管理员有增删改查权限 普通
  • 令AxosoftPowerTrack支持中文

    AxosoftPowerTrack是个有意思的vs netAdd in
  • javaweb实现一个账号只能同时被一个人使用(Java实现)

    大家在登陆qq的时候 电脑上登陆了qq 如果另一台机器上也登陆该qq账号 那么之前的qq账号会被挤下去 我们现在用web的方式来做一个非常简单的演示 先简单的说一下功能吧 用户只有一个User 这个entity设置成账号为hello 密码w
  • Web.xml加载顺序

    文章目录 Tomcat 加载顺序 Web xml具体加载顺序 Tomcat Server处理一个http请求的过程 lt context param gt lt listener gt lt filter gt web xml中定义的元素
  • 阿里云移动推送的接入和踩坑

    近期由于业务需求 要换掉以前的推送 首先选择了阿里云推送 官方介绍阿里移动推送 Alibaba Cloud Mobile Push 是基于大数据的移动智能推送服务 帮助App快速集成移动推送的功能 在实现高效 精确 实时的移动推送的同时 极
  • Elasticsearch 架构解析与最佳实践

  • 基于Docker如何快速部署自己的ChatGPT

    背景 随着OpenAI在2022年底发布的LLM模型 ChatGPT展现出的强大效果 ChatGPT无疑成为了当下炙手可热的明星模型 现有的基于GPT的开源项目已经非常多 本文以现有的高热度github开源项目chatgpt web为例 教
  • 利用宏简化Q_PROPERTY动态属性的定义

    目录 写在前面 实现历程 传统定义方式 预想的方式 事实上有一点点区别 测试通过的例程 mainwindow h mainwindow cpp main cpp 执行结果 Qt6 更新 写在前面 上一篇写了pyqt如何更加便利地定义动态属性
  • 【Unity VR开发】VRTK 3.3.0 配置与基本使用

    VRTK3 3 开发日志 2021 11 16更新 半年前第一次接触VR开发 看B站Siki学院的视频做的笔记 今天整理一下 以供没接触过VR开发的人来学习 有些地方没有配图 但个人认为影响不大 按文字说明一步步来操作还是没问题的 笔记参考