Vive手柄按键的交互操作对于VR的体验来说很重要,所以这次我们来说一下手柄上的按键是怎么做交互的。
首先我们需要新建脚本,然后把这个脚本拖到左手或者右手的控制器上,表明我们要给哪个控制器使用这个脚本。
在使用功能键之前,先需要追踪到手柄,添加下面代码:
SteamVR_TrackedObject trackedObj;
void Start ()
{
trackedObj = this.GetComponent<SteamVR_TrackedObject>();
}
接下来要获得有输入的手柄的Index(两个手柄在运行的时候Index不同),这里通过寻找不同的Index来找到相应的手柄,在Update中添加下面代码:
void Update ()
{
SteamVR_Controller.Device device = SteamVR_Controller.Input((int)trackedObj.index);
}
这样便能获取到输入是哪一个手柄了。
接下来我们看看按键的开发:
1.扳机键Trigger:
游戏中的大部分交互都是通过扳机键触发的,他在体验中起者很关键的作用。
获得扳机键的输入需要在Update中写入下面代码:
if (device.GetHairTriggerDown())
{
//扣下扳机时的操作
}
if (device.GetHairTrigger())
{
//扣住扳机时的操作
}
if (device.GetHairTriggerUp())
{
//放开扳机键时操作
}
或者还可利用
if (device.GetTouchDown(Valve.VR.EVRButtonId.k_EButton_Axis1))
{
//扣下扳机时的操作
}
if (device.GetTouch(Valve.VR.EVRButtonId.k_EButton_Axis1))
{
//扣住扳机时的操作
}
if (device.GetTouchUp(Valve.VR.EVRButtonId.k_EButton_Axis1))
{
//放开扳机时的操作
}
来进行扳机键的交互,
还有一种是
if (device.GetPressDown(Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger))
{
//扣下扳机时的操作
}
if (device.GetPress(Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger))
{
//扣住扳机时的操作
}
if (device.GetPressUp(Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger))
{
//放开扳机时的操作
}
也可以对扳机键进行调用。
总结一下扳机键的调用方式,一共有三种不同的方式:
device.GetHairTrigger(); 轻轻扣动扳机便会调用
device.GetTouch(Valve.VR.EVRButtonId.k_EButton_Axis1); 检测一次完整的输入才会调
device.GetPress(Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger);扳机键必须扣到底才会调
2.触摸板Touchpad
(1).按下功能,有两种调用方法:
if (device.GetTouch(Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
{
//按住Touchpad时的操作
}
//还有一种if (device.GetPress(Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad)) { //按住Touchpad时的操作 }
一样每种方法都有Down,按住和Up三种,只不过GetTouch是在运行时轻轻点击即可触发,而GetPress需要触摸板完全按下才可触发。
(2).滑动功能:触摸板的比较重要的功能就是滑动功能,需要在Update中添加下面代码:
Vector2 FingerPosition = device.GetAxis(Valve.VR.EVRButtonId.k_EButton_Axis0);
这样便获得了手指在触摸板上的位置,触摸板中心是(0,0),手指在触摸板上的X和Y轴的偏移量都是-1到+1,也就是这个二维向量的范围是(-1,-1)到(1,1)。这样我们便知道了手指在触摸板上的偏移量,就可以在游戏中做一些应用了。
3.功能键ApplicationMenu:
这个功能键是在触摸板上面,一般用来弹出游戏菜单的:
if (device.GetPressDown(Valve.VR.EVRButtonId.k_EButton_ApplicationMenu))
{
//操作
}
一般点一次就能相应的,就用Down函数执行。
4.手柄震动TriggerHapticPulse:
交互的时候都会使手柄震动来有一个反馈的效果:
device.TriggerHapticPulse(500,Valve.VR.EVRButtonId.k_EButton_Axis0);这个就是控制手柄震动的函数,该函数有两个参数,第一个是振动幅度的大小(1~3999),第二个是相关震动区域:触摸板和全手柄,如果不写第二个参数则为默认全手柄震动。
5.左右侧键Grip
if (device.GetPress(Valve.VR.EVRButtonId.k_EButton_Grip))
{
//按住侧键的操作
}
if (device.GetPressDown(Valve.VR.EVRButtonId.k_EButton_Dashboard_Back))
{
//按下侧键的操作
}
本文内容部分参考自Think加速想象力出版的《AR与VR开发实战》教程,更多学习资料也请关注www.arvrthink.com。