快速上手

· 克隆仓库  git clone https://github.com/thestonefox/SteamVR_Unity_Toolkit.git
· 用Unity3d打开SteamVR_Unity_Toolkit
· 从Unity资源商店导入SteamVR Plugin
· 浏览Examples场景作为例子来看脚本的用法
 
 
概要

这个工具包提供了很多Unity3d里的常用VR功能,如下(但并不局限于此):
 
· 带有通用别名的控制器按钮事件
· 控制器世界指针(如激光指针)
· 玩家传送
· 用控制器抓取对象
· 用控制器和对象交互
 
这个工具类基本是受到 SteamVR Plugin for Unity3d Github Repo的启发,并基于此。
 
这个工具存在的原因是因为SteamVR plugin含有令人困惑或不完善的代码,所以我决定创建一个脚本/资源集合,这在用Unity3d创建VR时是很有用处的。
 
 

预制


可用预制:
 
[CameraRig]直接从SteamVR Unity plugin例子——SteamVR/Extras/SteamVR_TestThrow场景中拿来,因为它包含了控制器上相关模型的子物体(这在SteamVR plugin默认预制SteamVR/Prefabs/[CameraRig].prefab中似乎是缺失的)。 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文本的颜色。
 
FramesPerSecondCanvas 预制的例子可以在SteamVR_Unity_Toolkit/Examples/018_CameraRig_FramesPerSecondCounter场景中找到,在头盔视野中间显示了帧率。按下扳机键(trigger)生成一个新的小球,按下触摸版(touchpad)生成10个新的小球。通过最终当很多小球出现的时FPS将下降来演示这个预设。
 
 
脚本

 
这个目录包含了所有添加到Unity的VR功能的工具脚本。
 
当前可用脚本有:
控制器行为脚本提供了处理常见控制器行为的帮助方法。如下可用公共方法:
· IsControllerVisible(): 如果控制器模型是可见的返回真,否则返回假。
· ToggleControllerModel(bool on):根据所给布尔值状态设置控制器模型的可见性。如果传入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值基于触摸板当前被触摸位置。
· 扳机按钮,有个基于扳机键被按下去程度的x值。
 
当触摸板的轴或者扳机键的轴值改变时,会有两个额外的事件发出,这可以被用来确定两个轴的变化来进行精确控制,如用触摸板来移动角色,或者知道扳机键被按下程度。
 
触摸板的轴由变量TouchpadAxis 记录,在所有控制器事件的脚本中更新。
 
扳机键的轴由变量buttonPressure 记录,在所有控制事件脚本中更新。任何其他按钮按压只记录一个为1或者0按钮压力,因为所有其他按钮都是数字量(要么就是点击要么就没有),但扳机是一个可以记录不同按钮压力的模拟量。
轴值变化的精确度可以由脚本中的axisFidelity 参数来决定,默认值为1。值只要超过2就可能会产生灵敏过度的结果。
 
事件发出的有效载体信息包含:
· controllerIndex:所使用控制器的索引。
· buttonPressure:0到1的浮点数,表示按钮按下的所施加的压力值。
· 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脚本。
 

SteamVR Unity工具包(VRTK)之概览和控制器事件的更多相关文章

  1. SteamVR Unity工具包(VRTK)之激光和移动

    简单激光指针(VRTK_ SimplePointer) 简单指针(Simple Pointer)脚本从控制器尾部发出一个有色光束来模拟激光束.这在场景中指向对象很有用,它能判断所指向的对象以及对象距控 ...

  2. SteamVR Unity工具包(VRTK)之控制器交互

    可交互对象(VRTK_InteractableObject) 可交互对象脚本被添加到需要用(如控制器)来交互的任何游戏对象上.   可用脚本参数如下   Touch Interactions 触摸交互 ...

  3. SteamVR Unity Plugin - v2.0.1中的InteractionSystem

    最近写VR项目的时候用到了SteamVR Unity Plugin - v2.0.1插件,感觉比之前用到的SteamVR plugin for Unity - v1.2.2版本改进了很多,就算不用VR ...

  4. 【Unity】4.4 添加角色控制器

    分类:Unity.C#.VS2015 创建日期:2016-04-10 一.简介 设计完毕基本的场景后,一般都需要先运行看看效果如何,即先让场景"动起来",以方便观察不同的位置,而不 ...

  5. 老李推荐:第6章7节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例

    老李推荐:第6章7节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-注入按键事件实例   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜 ...

  6. Unity 4.6 uGUI的点击事件

    因为Unity 4.6刚刚发布,自带的uGUI功能的相关资料还不是很完善,今天刚装的Unity 4.6,想看一下uGUI是否好用,那么开始就今天的学习吧啊! 1,新建一个空的工程.

  7. 武器级工具包 Immunity Canvas 7.26 泄露事件 | 附下载地址

    关于Immunity Canvas Immunity CANVAS是Immunity公司的一款商业级漏洞利用和渗透测试工具,包含了480多个以上的漏洞利用,该工具并不开源,其中文版介绍如下: &quo ...

  8. Unity 3D观察者设计模式-C#委托和事件的运用

    C#观察者设计模式 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新! ...

  9. 第6章7节《MonkeyRunner源代码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例

    在事件生成并放入到命令队列后,Monkey类的runMonkeyCycles就会去调用相应事件源的getNextEvent来获的事件来运行事件注入,那么这一小节我们通过MonkeyKeyEvent这个 ...

随机推荐

  1. hdu1058丑数(优先队列、暴力打表)

    hdu1058 题意:当一个数只有2.3.5.7这四种质因数时(也可以一种都没有或只有其中几种),这个数就是丑数,输出第 n 个丑数是多少: 其实并没有发现hdu把这道题放在 dp 专题里的意图,我的 ...

  2. 针对主流浏览器的CSS-HACK写法及IE常用条件注释

    一.通用区分方式: IE6.IE7能识别*,标准浏览器(如FF)不能识别*:IE6能识别*,但不能识别 !important:IE7能识别*,也能识别 !important:IE8能识别\0,不能识别 ...

  3. springMVC源码学习之:springMVC响应请求的几种方法

    spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. ModelAndView @RequestMap ...

  4. VC调用系统的调色板

    调用系统的调色板可以用到ChooseColor这个函数,这个函数传入一个参数为CHOOSECOLOR结构体的指针,其函数原型为 BOOL ChooseColor(LPCHOOSECOLOR lpCC) ...

  5. ps互补色

    色彩中的互补色有红色与绿色互补,蓝色与橙色互补,紫色与黄色互补.在光学中指两种色光以适当的比例混合而能产生白光时,则这两种颜色就称为“互为补色”. 互补色是相对的混合的白色 互补色:在色环中某种颜色的 ...

  6. Python-描述符

    Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些“中级”的语 ...

  7. Tensorflow ——神经网络

    Training Data Eval: Num examples: 55000 Num correct: 52015 Precision @ 1: 0.9457Validation Data Eval ...

  8. TFS 强制撤销别人签出的代码

    有个同事离职一段时间了,今天改一下她的代码,发现有个文件签出了,晕,而且TFS用的也是只允许单用户签出. 1,找原来的用的机器,已经被人占用了,系统已经重做. 2,只有用命令行来搞了. 大致如下: t ...

  9. linux包之diff

    [root@84-monitor ~]# rpm -qf /usr/bin/diffdiffutils-2.8.1-28.el6.x86_64[root@84-monitor ~]# rpm -ql ...

  10. nginx服务器应用中遇到的两个问题

    1>首先是413的错误! client_max_body_size Context: http, server, location It is the maximum size of a cli ...