8

我有一些 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 插件通过代码获取输入的新方法是什么?

4

1 回答 1

26

为了迁移到 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”菜单中替换默认绑定

在此处输入图像描述

于 2018-10-13T20:48:26.733 回答