基础配置
1、手柄按键事件获取
注意:获取事件不要用 SteamVR_TrackedObject 脚本。因为有的博客讲:将该脚本放在右手上,写另外的脚本通过它获得按键事件。但这个脚本有个Bug,它会导致射线偏移、不在正确位置。
正确做法:
//赋值右手
public VRTK_ControllerEvents e;
private void Start()
{
e.GripPressed += DoGripPressed;//抓取
e.TouchpadAxisChanged += DoTouchpadAxisChanged;//touchpad事件
}
void DoGripPressed(object sender, ControllerInteractionEventArgs e)
{
print("按下了Trigger");
}
void DoTouchpadAxisChanged(object sender, ControllerInteractionEventArgs e)
{
//Debug.LogError(e.touchpadAngle);//获取touchpad角度值
float jiaodu = e.touchpadAngle;
//上
if (jiaodu < 45 && jiaodu > 0 || jiaodu > 315 && jiaodu < 360)
{
Debug.Log("上");
}
//右
if (jiaodu >= 45 && jiaodu < 135)
{
Debug.Log("右");
}
//下
if (jiaodu >= 135 && jiaodu < 225)
{
Debug.Log("下");
}
//左
if ((jiaodu >= 225 && jiaodu < 315))
{
Debug.Log("左");
}
}
2、手柄震动
private void Update()
{
//右手震动
var deviceIndex2 = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost);
SteamVR_Controller.Input(deviceIndex2).TriggerHapticPulse(500);
}
3、获取射线选中的物体
//赋值右手
public VRTK_Pointer vRTK_Pointer;
private void Start()
{
vRTK_Pointer.DestinationMarkerEnter += enter;
}
void enter(object sender,DestinationMarkerEventArgs e)
{
print(e.target.name);
}
4、头部碰撞到的物体事件
//赋值PlayArea
public VRTK_HeadsetCollision vRTK_HeadsetCollision;
private void Start()
{
vRTK_HeadsetCollision.HeadsetCollisionDetect += VRTK_HeadsetCollision_HeadsetCollisionDetect; ;
}
private void VRTK_HeadsetCollision_HeadsetCollisionDetect(object sender, HeadsetCollisionEventArgs e)
{
//当头部碰到碰撞体后执行
print(e.target.name);
}