再次接触到HTC Vive项目时发现交互已经跟几年前的写法不一样了,而且VRTK插件也需要找对应的版本才行,否则会报错,版本已经不兼容。
这里总结下我在项目中遇到的手柄交互在Unity中的调用:
1、手柄各个按键:
if (SteamVR_Input.GetStateDown("default", "InteractUI", SteamVR_Input_Sources.Any) )
{
Debug.Log("按下了Trigger按键");
}else if (SteamVR_Input.GetStateDown("default", "Teleport", SteamVR_Input_Sources.Any) )
{
Debug.Log("按下了大圆盘按键");
}
}
3、手柄大圆盘控制物体上下左右移动:
if (SteamVR_Input.GetState("default", "Teleport", SteamVR_Input_Sources.RightHand)|| Input.GetKey(KeyCode.Space))
{
SteamVR_Action_Vector2 actionSteering = SteamVR_Input.GetAction<SteamVR_Action_Vector2>("buggy", "Steering");
Vector2 pos = actionSteering.GetAxis(SteamVR_Input_Sources.RightHand);
float angle = VectorAngle(new Vector2(1, 0), pos);
//下
if ((angle > 45 && angle < 135)|| Input.GetKey(KeyCode.S))
{
this.transform.Translate(Vector3.back * speed * Time.deltaTime);
}
//上
else if ((angle < -45 && angle > -135) || Input.GetKey(KeyCode.W))
{
//Debug.Log("上");
this.transform.Translate(Vector3.forward * Time.deltaTime * speed);
}
//左
else if ((angle < 180 && angle > 135) || (angle < -135 && angle > -180)|| Input.GetKey(KeyCode.A))
{
//Debug.Log("左");
this.transform.Translate(Vector3.left * Time.deltaTime * speed);
}
//右
else if ((angle > 0 && angle < 45) || (angle > -45 && angle < 0) || Input.GetKey(KeyCode.D))
{
//Debug.Log("右");
this.transform.Translate(Vector3.right * Time.deltaTime * speed);
}
}
更多关于Steam2.0插件内容请查看以下链接:
大神总结的关于Steam2.0插件使用指南