如何从HTC Vive跟踪器接收到Unity的输入?

时间:2019-03-27 10:05:30

标签: c# unity3d htc-vive steamvr

我正在将HTC Vive追踪器安装到现实生活中的对象,以便在游戏中使用该对象。可以在游戏本身中找到跟踪器,并且可以很好地更新运动和旋转。但是,使输入起作用是这里的问题。跟踪器的针脚已正确连接,并且可以在SteamVR输入绑定工具的输入调试器中看到输入正常工作。

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

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

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

使用普通控制器时,使用输入绑定工具中设置的触发器时,当前输出确实会开火,但是按下跟踪器附带的触发器时,则不会发生任何事情,也不会出错。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

  

SteamVR_Action_Boolean.stateDownSteamVR_Input_Sources.Any

的快捷方式

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


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

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


在他们的HTC_Vive_Tracker Guidelines中,他们指向

  

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

     

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