0

我正在将 HTC Vive 跟踪器连接到现实生活中的对象以在游戏中使用该对象。跟踪器位于游戏本身中,并且运动和旋转更新得非常好。但是让输入发挥作用是这里的问题。Tracker 的引脚连接正确,并且可以在 SteamVR 输入绑定工具的输入调试器中看到输入正在工作。

我试图在互联网上找到任何帮助,但一切似乎都过时了。控制器本身可以使用我添加的自定义输入功能,但跟踪器拒绝工作。根本没有错误。该代码只是调用了一个射击函数来从枪中射出一颗子弹。输入由控制器接收,两者都是,但与控制器具有完全相同设置的跟踪器似乎不起作用。

    [SerializeField] private GunScript gunScript;
    [SerializeField] private SteamVR_Action_Boolean input;

    void Update()
    {
        if (input.stateDown)
        {
            gunScript.Shoot(gunScript.ShotTransform.rotation);
        }
    }

使用普通控制器时,当使用在输入绑定工具中设置的触发器时,当前输出确实会射击枪,但是当按下连接到跟踪器的触发器时,没有任何反应,也没有错误。

4

2 回答 2

1

// on start
var allDevices = new List<InputDevice>();
InputDevices.GetDevices(allDevices);
InputDevice tracker = allDevices.FirstOrDefault(d => d.role == InputDeviceRole.HardwareTracker);

// on update
tracker.TryGetFeatureValue(CommonUsages.devicePosition, out var pos);        

tracker.TryGetFeatureValue(CommonUsages.deviceRotation, out var rot);

// NOTE!!! pos and rot are in world position so you have to translate it to floor

于 2019-08-12T17:44:28.573 回答
0

SteamVR_Action_Boolean.stateDown是一个捷径SteamVR_Input_Sources.Any

但正如您在SteamVR_Input_Sources中看到的那样,根本没有跟踪器条目,因此也Any不会获得跟踪器输入。


有大量关于如何获取控制器输入的教程,但我也找不到任何有关获取 Vive Trackers 按钮输入的信息。显然这不是故意的......

这是有道理的,因为该按钮也是 Trackers 连接/电源按钮……让用户按下该按钮以触发某些操作可能不是一个好主意。


在他们的HTC_Vive_Tracker 指南中,他们指出

如果您在 Unityor Unreal 上启用 VIVETracker(2018) 时遇到问题,请参考以下链接:

也许那里有一些有用的东西,尽管这似乎也更多地用于控制器等,而不是用于获取 Tracker 的按钮输入。

于 2019-03-27T12:51:06.297 回答