Как обновить ваш проект Unity Input до 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?

1 ответ

Решение

Чтобы перейти на SteamVR 2.0, я выполнил следующие действия:

1) Удалите папку "SteamVR", а затем импортируйте плагин "SteamVR" из Unity Asset Store.

2) Удалите свой предыдущий объект "[CameraRig]" из ваших сцен и перетащите новый, расположенный на: "SteamVR / Prefabs"

3) Проверьте наличие скрипта "Steam VR_Behaviour_Pose" на объектах "Контроллер (слева)" и "Контроллер (справа)"

там в поле "Pose Action" и "Input Source" должно быть:

Контроллер (слева)

Действие поза: SkeletonLeftHand

Источник входного сигнала: левая рука

Контроллер (справа)

Действие поза: SkeletonRightHand

Источник ввода: правая рука

4) Добавьте скрипт для ваших объектов "Контроллер (слева)" и "Контроллер (справа)":

5) Добавьте свой собственный скрипт в ваши объекты "Контроллер (слева)" и "Контроллер (справа)", в моем случае сценарий "HTC Vivie Input".

6) Убедитесь, что у вас нет ошибок компиляции, в этом случае вы должны увидеть "SteamVR Input" и "SteamVR Input Live View" в меню окна из Unity,

7) Например, по умолчанию, например, кнопка "Меню" не содержит действий, связанных с действием, или положение сенсорной панели, поэтому откройте меню "Вход SteamVR" и добавьте действия:

  • TOUCHPAD

  • touchPos

  • кнопку MENU

\

8) Нажмите кнопку "Открыть интерфейс привязки" во время работы службы SteamVR и измените текущую привязку.

Ассоциируйте "Меню" с действием "MenuButton".

Выделите "Touch" с помощью действия "touchPad".

Ассоциируйте "Положение" с действием "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) При создании релизной сборки замените привязки по умолчанию из меню "Связывание интерфейса"

Другие вопросы по тегам