如何将Unity项目输入更新为SteamVR 2.0?

时间:2018-10-07 07:12:56

标签: c# unity3d plugins 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插件通过代码获取输入的新方法是什么?

1 个答案:

答案 0 :(得分:18)

要转到SteamVR 2.0,请按照以下步骤操作:

1):删除“ SteamVR”文件夹,然后从Unity Asset Store导入“ SteamVR”插件。

2)从场景中删除先前的“ [CameraRig]”对象,然后拖动位于“ SteamVR / Prefabs”上的新对象

3)检查“控制器(左)”和“控制器(右)”对象上的脚本“ Steam VR_Behaviour_Pose” enter image description here enter image description here

“姿势操作”字段和“输入源”上应该是:

控制器(左)

姿势动作:SkeletonLeftHand

输入源:左手

控制器(右侧)

姿势动作:SkeletonRightHand

输入源:右手

4)将手写脚本添加到“控制器(左)”和“控制器(右)”对象:

enter image description here

5)将自己的自定义脚本添加到“控制器(左)”和“控制器(右)”对象中,在我的情况下是“ HTC Vivie Input”脚本。

enter image description here

6)确保没有任何编译错误,在这种情况下,您应该能够从Unity的窗口菜单中看到“ SteamVR Input”和“ SteamVR Input Live View”, enter image description here

7)例如,默认情况下,“菜单”按钮不包含任何关联的操作或触摸板位置,因此请打开“ SteamVR输入”菜单,然后添加操作:

  • 触摸板

  • touchPos

  • MenuButton

enter image description here \ enter image description here enter image description here enter image description here

8),在您的SteamVR服务运行时,点击“打开绑定用户界面”按钮, 并编辑当前绑定

将“菜单”与“菜单按钮”动作相关联。

enter image description here

将“触摸”与“触摸板”动作相关联。

将“位置”与“ touchPos”动作相关联。

enter image description here

然后从“ SteamVR输入”菜单中按“保存并生成”按钮

enter image description here

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”菜单中的默认绑定

enter image description here