由于有些新版本的插件“ SteamVR Unity Plugin 2.0”,我的代码无法正常工作。
https://steamcommunity.com/games/250820/announcements/detail/1696059027982397407
在按照文档说明导入新文件夹之前,我删除了“ SteamVR”文件夹。
但是我得到这个错误:
error CS0246: The type or namespace name `SteamVR_Controller' could not be found. Are you missing an assembly reference?
error CS0246: The type or namespace name `SteamVR_TrackedController' could not be found. Are you missing an assembly reference?
所以我可以看到不推荐使用此类:
private SteamVR_Controller.Device device;
private SteamVR_TrackedController controller;
controller = GetComponent<SteamVR_TrackedController>();
使用SteamVR 2.0插件通过代码获取输入的新方法是什么?
答案 0 :(得分:18)
要转到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输入”菜单,然后添加操作:
触摸板
touchPos
MenuButton
8),在您的SteamVR服务运行时,点击“打开绑定用户界面”按钮, 并编辑当前绑定
将“菜单”与“菜单按钮”动作相关联。
将“触摸”与“触摸板”动作相关联。
将“位置”与“ 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”菜单中的默认绑定