如何将您的 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" 菜单中的默认绑定