使用 MRTK 2.4 的自定义控制器和 GrabPointer 不起作用

Custom Controller and GrabPointer with MRTK 2.4 don't work

我的自定义控制器有 3 个指针。

  1. 射线指针(工作良好)
  2. 戳指针(工作正常)
  3. 抓取指针(具有 SpherePointer.cs 组件)不工作

在 MRTK 2.3 中,所有这些都可以正常工作。我没有更改场景中的任何内容并更新到 MRTK 2.4。

在 MRTK 2.4 中,Grab Pointer 不再工作...当将它移动到 nearGrabbable 对象附近时,我无法抓住它,因为它没有被识别为 GrabPointer(黄色的 Debug Ray 不是正在编辑器中绘制)。

但是当我使用铰接式手抓取指针时,它起作用了。所以我复制了预制件,只更改了姿势动作和指针动作,但没有用。使用 SpherePointer 时我错过了什么?

控制器的姿势变化如下:

CoreServices.InputSystem.RaisePoseInputChanged(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction, controllerPose);
                

然后按这样的按钮:

CoreServices.InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction);
CoreServices.InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction);

编辑:

Link到自定义输入设备重现Bug: https://wetransfer.com/downloads/27b3f2b90c18516dc47a35cf645dc25820200728111556/10711a

  1. 创建一个空的新Unity项目(2018.4.X,但与2019.4.X相同)
  2. 导入 MRTK 2.4
  3. 导入我的自定义输入包
  4. 打开错误场景,发现球体指针不适用于自定义输入设备。

我解决了这个问题:

如图所示,if 语句对我来说总是错误的。我从未将 IsPositionAvailable 分配给 true。 现在在我的控制器中我添加了这样一行:

            IsPositionAvailable = myControllerPosition != Vector3.zero; 

那一行解决了我的问题。