如何将您的 Unity 项目输入更新为 SteamVR 2.0?
How to update your Unity project Input to SteamVR 2.0?
我有一些 Unity 场景可以很好地与以前版本的 SteamVR 插件一起使用,因为有新版本的插件"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 插件通过代码获取输入的新方法是什么?
为了转移到 SteamVR 2.0,我遵循了以下步骤:
1)删除"SteamVR"文件夹,然后从Unity Asset Store导入"SteamVR"插件。
2) 从场景中删除之前的“[CameraRig]”对象并将新对象拖动到:"SteamVR/Prefabs"
3) 检查 "Controller (left)" 和 "Controller (right)" 对象上的脚本 "Steam VR_Behaviour_Pose"
"Pose Action" 字段和 "Input Source" 字段应该是:
控制器(左)
姿势动作:骨架左手
输入源:左手
控制器(右)
姿势动作:SkeletonRightHand
输入源:右手
4) 将手写脚本添加到您的 "Controller (left)" 和 "Controller (right)" 对象:
5) 将您自己的自定义脚本添加到您的 "Controller (left)" 和 "Controller (right)" 对象,在我的例子中是 "HTC Vivie Input" 脚本。
6) 确保你没有任何编译错误,在这种情况下你应该能够在 window Unity 的菜单,
7) 默认情况下,例如菜单按钮不包含任何关联的操作或触摸板位置,因此打开 "SteamVR Input" 菜单,并添加动作:
触摸板
touchPos
菜单按钮
\
8) 当您的 SteamVR 服务为 运行 时,点击 "Open binding UI" 按钮,
并编辑当前绑定
将 "Menu" 与 "MenuButton" 操作相关联。
将 "Touch" 与 "touchPad" 操作相关联。
将 "Position" 与 "touchPos" 操作相关联。
然后按 "SteamVR Input" 菜单中的保存并生成按钮
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) 在制作发布版本时替换 "binding UI" 菜单中的默认绑定
我有一些 Unity 场景可以很好地与以前版本的 SteamVR 插件一起使用,因为有新版本的插件"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 插件通过代码获取输入的新方法是什么?
为了转移到 SteamVR 2.0,我遵循了以下步骤:
1)删除"SteamVR"文件夹,然后从Unity Asset Store导入"SteamVR"插件。
2) 从场景中删除之前的“[CameraRig]”对象并将新对象拖动到:"SteamVR/Prefabs"
3) 检查 "Controller (left)" 和 "Controller (right)" 对象上的脚本 "Steam VR_Behaviour_Pose"
"Pose Action" 字段和 "Input Source" 字段应该是:
控制器(左)
姿势动作:骨架左手
输入源:左手
控制器(右)
姿势动作:SkeletonRightHand
输入源:右手
4) 将手写脚本添加到您的 "Controller (left)" 和 "Controller (right)" 对象:
5) 将您自己的自定义脚本添加到您的 "Controller (left)" 和 "Controller (right)" 对象,在我的例子中是 "HTC Vivie Input" 脚本。
6) 确保你没有任何编译错误,在这种情况下你应该能够在 window Unity 的菜单,
7) 默认情况下,例如菜单按钮不包含任何关联的操作或触摸板位置,因此打开 "SteamVR Input" 菜单,并添加动作:
触摸板
touchPos
菜单按钮
8) 当您的 SteamVR 服务为 运行 时,点击 "Open binding UI" 按钮, 并编辑当前绑定
将 "Menu" 与 "MenuButton" 操作相关联。
将 "Touch" 与 "touchPad" 操作相关联。
将 "Position" 与 "touchPos" 操作相关联。
然后按 "SteamVR Input" 菜单中的保存并生成按钮
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) 在制作发布版本时替换 "binding UI" 菜单中的默认绑定