用HighLighting System插件做手柄atom vue高亮插件,怎么弄

大家都知道现在基于Unity开发Vive的应用程序都需要用到SteamVR这个插件,接下来的系列会重点分析该插件中和开发相关的功能。首先介绍的是Vive手柄控制器开发的介绍,基本包含了手柄功能开发的所有信息。如有不全欢迎补充讨论。使用时需要注意的点我会用绿色标出了,对整个脚本执行过程不感兴趣的可以着重看一下绿色部分,开发时注意就好了。
关于控制器的相关信息都包含在SteamVR_Controller这个脚本之中。注意:SteamVR_Controller是非Monobehavior的脚本,并没有挂在场景下,其运行是通过SteamVR_Render脚本对于其中Update()函数的调用从而一直循环获取手柄相关信息。而SteamVR_Render脚本是在程序运行时自动加载至场景的。先来看看脚本的全貌吧。
ButtonMask类:手柄各按键的名称。
Device类:最重要的类,封装了跟踪设备的全部信息。
Update()函数:被SteamVR_Render脚本调用,更新各跟踪设备的信息。
Input()函数:根据Index初始化Device[]数组,并实例化所有16个Device。
DeviceRelation和GetDeviceIndex()结合获取特定的设备Index,如leftmost、rightmost。在SteamVR_TestController脚本中有使用到该函数获取用户的左右手手柄的Index。用该方法应该可以识别出用户所拿的手柄是哪一个。
下面着重分析Device类:
l& GetPress:按下按键一直触发l& GetPressDown:按下按键只触发一次l& GetPressUp:按下按键只触发一次
针对按键的三个函数,每种函数有两个重载,参数为ButtonMask或EVRButtonId类,第二种形式会将EVRButtonId转换为ButtonMask后调用第一种得到结果。
l& GetTouchl& GetTouchDownl& GetTouchUp
针对Touchpad的三个函数,一样的两种形式,同上不解释。
l& GetAxis()
获取Touchpad圆盘坐标或Trigger的行程值(0-1),函数默认参数是手柄上的Touchpad。共有5个AxisId参数可选,0是TouchPad,1是Trigger,2,3,4应该是没有用的,且此函数只接受EVRButtonId类参数而不接受ButtonMask。
l& TriggerHapticPulse
手柄震动控制函数,参数名称解释的是时间,默认500,但实际上控制的是震动的强度。默认AxisId是EVRButtonId_touchpad,选择其他EVRButtonId没用(等价参数axis0可以),其会调用OpenVR中的同名函数。参数超过4000会无效,导致震动不触发。可以通过协程的while(true)+waitforsecond控制震动间隔,通过stop协程控制震动结束。
l& GetHairTriggerl& GetHairTriggerDown定义为有false转至true的过程,判断先前状态和当前状态。l& GetHairTriggerUp 定义为有true转至false的过程,判断先前状态和当前状态。
这三个函数获取HairTrigger的状态,其值对应rAxis1.x的值。But什么是HairTrigger?形象点说就是像头发般轻轻的触发。HairTrigger是检测当你握住扳手超过一个固定值(0.1,可调)时即触发的状态。相当于利用Trigger的变化量来做一个功能的触发,很棒不是吗。轻轻碰一下Trigger使得行程大于0.1即可触发一个功能。
&整个脚本的执行顺序如下:
l& Update();
l& Input()初始化16个设备的信息存储空间,并返回某个设备;
l& Device.Update():做两件事
1.&&&& GetControllerStateWithPose()调用OpenVR中的函数获取手柄状态和姿态。结果存在这两个变量State(VRControllerState_t)和Pose(TrackedDevicePose_t)中,由GetState()和GetPose()获取并由此返回一系列的可查询参数及各种Get函数。
各可查询参数说明如下(相当于对TrackedDevicePose_t中的参数翻译了下)
valid:GetControllerStateWithPose()函数调用是否成功;
connected:判断设备是否连接;
hasTracking:判断设备是否跟踪正常;
&根据ETrackingResult的结果得到下面三个参数:
outOfRange:判断设备是否超出范围;
calibrating:判断设备是否正在校正;
uninitialized:判断设备是否未初始化;
&transform:获取的结果是包含12个元素的一维数组,通过SteamVR_Utils.RigidTransform函数将12个元素重组为3X4矩阵并针对Unity的坐标系进行修正,同时添加了对position和rotation方便的引用。
velocity和angularVelocity:这两个速度也针对Unity的坐标系进行修正,lighthouse跟踪的空间轴方向与Unity存在偏差。
2. UpdateHairTrigger()。检测自定义的一种操作:轻按Trigger。&
TBC:下面几个方面没有深入的研究,有兴趣的童鞋可以研究下,但知道上面的内容后应该已经可以随意访问控制器相关的信息了。
关于DeviceRelation和GetDeviceIndex()没有太多解释,可以深入挖一挖如何使用。
ButtonMusk及其他地方有用到很多按位进行的操作,可以补充一下相关知识。
Unity环境下空间坐标轴的修正原理没有研究:Unity使用的是左手坐标系,lighthouse的结果应该是右手坐标系,所以才会有速度的z分量相反和角速度x、y分量相反的结果。
本文已收录于以下专栏:
相关文章推荐
重要类(ButtonMask、Device、Input、Update、DeviceRelation与GetDeviceIndex)
SteamVR_Controller是非Monobehavio...
Simple Laser
Pointer (VRTK_SimplePointer)
简单激光指针(VRTK_ SimplePointer)
The Simple Pointer emi...
最近开始使用SteamVR(HTC Vive)+Unreal4做VR开发,平时没事的时候就把开发过程中一些心得写一下。
现在国内这两个开发方向的资料真心不多,自己想查些什么也是国外各种找博客论坛视频看...
手柄的控制
using System.C
using System.Collections.G
using UnityE
public clas...
为了做房产项目,这两天开始学习Unreal Engine 4。之前一直用unity,但是视觉效果一直不满意,听说虚幻4的效果更好,就来试一试水。
参考资料...
从这一节起我开始介绍一些vive的交互实现方式,比如手柄发出的射线,凝视,瞬移等等。SteamVR插件内都有这三种交互的辅助类。
Extras文件夹里面的SteamVR_GazeTracke...
生成物体发射
Hello,我是KitStar。
以下文章整理的不对。还请见谅。
一.什么是瞬移功能?
瞬移就是使用手柄选取一个位置,通过扳机键进行瞬间移动。
因为HTC ...
先分析各个脚本的功能,以便后面学习时使用。
SteamVR/Scripts/
SteamVR.cs
单例管理类,管理SteamVR程序的运行和终止。
SteamVR_Camera.cs
转载出处:http://blog.csdn.net/qq_/article/details/
大家都知道现在基于Unity开发Vive的应用程序都需要...
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)&鍔犺浇涓

我要回帖

更多关于 vue高亮插件 的文章

 

随机推荐