SteamVR Unity工具包(VRTK)之概览和控制器事件

快速上手
· 克隆仓库  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时是颇有用处的。
 
 

预制git


 

可用预制:
 
[CameraRig]直接从SteamVR Unity plugin例子——SteamVR/Extras/SteamVR_TestThrow场景中拿来,由于它包含了控制器上相关模型的子物体(这在SteamVR plugin默认预制SteamVR/Prefabs/[CameraRig].prefab中彷佛是缺失的)。 SteamVR_Unity_Toolkit/Prefabs/[CameraRig]能够被拖到任何场景中,经过VR头盔和包括模型呈现的VR控制器的追踪来提供对VR游戏相机的即时访问。
 


帧率显示github


 

 

这个画布添加一个表示帧率的文本元素到头盔上。使用这个预制必须把它放到场景中,而后头盔的相机须要被添加到画布上。

 

· 选择场景中的FremesPerSecondCanvas对象
· 找到Canvas组件
· 设置Render Camera参数为 [CameraRig]预制里的Camera(eye)
 

预制上有不少能够被设置的参数。展开层级视图中的FramesPerSecondCanvas对象,显示子对象FramesPerSecondText并点击显示额外参数,这些参数能够经过FramesPerSecondViewer脚本(能够在SteamVR_Unity_Toolkit/Scripts/Helper/FramesPerSecondViewer找到)来设置。ide

 

可用脚本参数以下:
 
· 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脚本。
相关文章
相关标签/搜索