为什么指针和输入之间存在或存在差异?

Why is there or is there a difference between pointer and input?

在将一些代码转换为新的 MRTK RC1 时,我识别了两个版本,例如Up 和 Down 事件,均用于输入和指针。现在我想知道,有什么区别?为什么会有这种差异?如果我想在桌面(鼠标使用输入版本)和 XR 设备(指针版本)上使用相同的应用程序 运行,我是否需要同时实现两者?

好问题!我对 InputUp/Down 和 PointerUp/Down 之间的区别的理解是关于事件的来源。简而言之,我建议监听指针事件而不是原始输入事件。您不需要收听两种类型的事件。

InputDown/Up 对比 PointerDown/Up

InputUp/Down 由控制器生成。例如,如果您查看调用 MixedRealityInputSytem.RaiseOnInputDown 的 类,您将看到以下调用 RaiseOnInputDown 的代码:

GenericJoystickController.cs
WindowsMixedRealityController.cs
MouseController.cs

换句话说,这些是 'Raw inputs' 表示类似“按下控制器上的 select 按钮。

相比之下,OnPointerDown/Up 是由指针引发的。例如,如果您查找对 MixedRealityInputSystem.RaisePointerDown 的引用,您将看到以下文件:

GazeProvider.cs
BaseControllerPointer.cs
GGVPointer.cs
PokePointer.cs

换句话说,这些是来自不同类型的指针调度程序的更高级别的输入——例如来自近交互指针(球体指针)、远交互指针(线指针)或触摸指针(戳指针)。

为什么要听 PointerDown/Up 而不是 InputDown/Up

从指针中侦听指针向下和向上将使您能够区分近距离和远距离交互之类的事情,因为您可以查看发送事件的指针并检查指针是否实现了 IMixedRealityNearPointer.