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