Unity中使用SteamVR插件监听手柄输入

SteamVR几乎是每一个使用Vive设备和Unity开发虚拟现实产品的必备插件了,今天我在这里记录一下使用SteamVR来获取手柄的交互输入信息的方法,以供参考。

首先我们需要使用SteamVR_TrackedObject类型的对象,这个脚本会附着在CameraRig的子物体Controller中,其中包括了控制SteamVR手柄的脚本。我们可以使用属性访问器来实现对输入信息的获取。

    private SteamVR_TrackedObject trackedObj;
    private SteamVR_Controller.Device Controller
    {
        get
        {
            return SteamVR_Controller.Input((int)trackedObj.index);
        }
    }

我们同样需要在初始化时获取到手柄的SteamVR_Controller脚本:

    void Awake()
    {
        trackedObj = GetComponent();
    }

这样我们就可以通过使用Controller来直接获取SteamVR_Controller.Input信息了

下面我们在Update函数中检测手柄的输入信息:

    void Update()
    {
        // 获取手指在touchpad上的位置并输出
        if (Controller.GetAxis() != Vector2.zero)
        {
            Debug.Log(gameObject.name + Controller.GetAxis());
        }
        // 按下扳机
        if (Controller.GetHairTriggerDown())
        {
            Debug.Log(gameObject.name + " Trigger Press");
        }
        // 松开扳机
        if (Controller.GetHairTriggerUp())
        {
            Debug.Log(gameObject.name + " Trigger Release");
        }
        // 按下大按钮
        if (Controller.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))
        {
            Debug.Log(gameObject.name + " DPad Down");
        }
        // 松开大按钮
        if (Controller.GetPressUp(SteamVR_Controller.ButtonMask.Touchpad))
        {
            Debug.Log(gameObject.name + " DPad Down");
        }
        // 按下抓取
        if (Controller.GetPressDown(SteamVR_Controller.ButtonMask.Grip))
        {
            Debug.Log(gameObject.name + " Grip Press");
        }
        // 松开抓取
        if (Controller.GetPressUp(SteamVR_Controller.ButtonMask.Grip))
        {
            Debug.Log(gameObject.name + " Grip Release");
        }
    }

这样就获取了手柄的输入信息。

你可能感兴趣的:(Unity,虚拟现实)