为了迁移到 SteamVR 2.0,我按照以下步骤操作:
1)删除“SteamVR”文件夹,然后从 Unity Asset Store 导入“SteamVR”插件。
2)从场景中删除之前的“[CameraRig]”对象,然后将新对象拖到:“SteamVR/Prefabs”
3)检查“控制器(左)”和“控制器(右)”对象上的脚本“Steam VR_Behaviour_Pose”
在“姿势动作”字段上,在“输入源”上应该是:
控制器(左)
姿势动作:SkeletonLeftHand
输入源:左手
控制器(右)
姿势动作:SkeletonRightHand
输入源:右手
4)将手写脚本添加到“控制器(左)”和“控制器(右)”对象:
5)将您自己的自定义脚本添加到“控制器(左)”和“控制器(右)”对象,在我的例子中是“HTC Vivie Input”脚本。
6)确保您没有任何编译错误,在这种情况下,您应该能够在 Unity 的窗口菜单上看到“SteamVR Input”和“SteamVR Input Live View”,
7)默认情况下,例如菜单按钮不包含任何关联的动作或触摸板位置,因此打开“SteamVR 输入”菜单,并添加动作:
\
8)在您的 SteamVR 服务运行时单击“打开绑定 UI”按钮,然后编辑当前绑定
将“菜单”与“菜单按钮”动作相关联。
将“触摸”与“触摸板”动作相关联。
将“Position”与“touchPos”动作相关联。
然后从“SteamVR 输入”菜单中按“保存并生成”按钮
9)打开您的自定义脚本(在我的例子中为“HTC Vivie Input”)并添加您的代码,例如:
using UnityEngine;
using Valve.VR;
using Valve.VR.InteractionSystem;
public class HTCVivieInput : MonoBehaviour {
private Hand hand;
// Use this for initialization
void Start () {
hand = gameObject.GetComponent<Hand>();
}
public Vector2 getTrackPadPos()
{
SteamVR_Action_Vector2 trackpadPos = SteamVR_Input._default.inActions.touchPos;
return trackpadPos.GetAxis(hand.handType);
}
public bool getPinch()
{
return SteamVR_Input._default.inActions.GrabPinch.GetState(hand.handType);
}
public bool getPinchDown()
{
return SteamVR_Input._default.inActions.GrabPinch.GetStateDown(hand.handType);
}
public bool getPinchUp()
{
return SteamVR_Input._default.inActions.GrabPinch.GetStateUp(hand.handType);
}
public bool getGrip()
{
return SteamVR_Input._default.inActions.GrabGrip.GetState(hand.handType);
}
public bool getGrip_Down()
{
return SteamVR_Input._default.inActions.GrabGrip.GetStateDown(hand.handType);
}
public bool getGrip_Up()
{
return SteamVR_Input._default.inActions.GrabGrip.GetStateUp(hand.handType);
}
public bool getMenu()
{
return SteamVR_Input._default.inActions.MenuButton.GetState(hand.handType);
}
public bool getMenu_Down()
{
return SteamVR_Input._default.inActions.MenuButton.GetStateDown(hand.handType);
}
public bool getMenu_Up()
{
return SteamVR_Input._default.inActions.MenuButton.GetStateUp(hand.handType);
}
public bool getTouchPad()
{
return SteamVR_Input._default.inActions.Teleport.GetState(hand.handType);
}
public bool getTouchPad_Down()
{
return SteamVR_Input._default.inActions.Teleport.GetStateDown(hand.handType);
}
public bool getTouchPad_Up()
{
return SteamVR_Input._default.inActions.Teleport.GetStateUp(hand.handType);
}
public Vector3 getControllerPosition()
{
SteamVR_Action_Pose[] poseActions = SteamVR_Input._default.poseActions;
if (poseActions.Length > 0)
{
return poseActions[0].GetLocalPosition(hand.handType);
}
return new Vector3(0, 0, 0);
}
public Quaternion getControllerRotation()
{
SteamVR_Action_Pose[] poseActions = SteamVR_Input._default.poseActions;
if (poseActions.Length > 0)
{
return poseActions[0].GetLocalRotation(hand.handType);
}
return Quaternion.identity;
}
}
10)进行发布构建时,从“绑定 UI”菜单中替换默认绑定