我正在构建一个可以在 HoloLens 和移动设备 (iOS/Android) 上运行的应用程序。我希望能够在所有设备上使用相同的操作处理程序,目标是:
- 使用 ARFoundation 进行移动设备跟踪和输入
- 将触摸输入与 MRTK 与 ManipulationHandler 一起使用,否则将触摸输入用作正常 (UI)
- 在编辑器中模拟触摸输入(使用触摸屏或鼠标),但保留键盘/鼠标控制器用于相机定位。
到目前为止,我已经尝试/发现:
- MixedRealityPlayspace 始终是相机的父级,因此我将 ARSessionOrigin 添加到该组件,并将所有默认 AR 组件添加到相机(ARCameraManager、TrackedPoseDriver、ARRayCastManager 等)
- 自定义 MRTK 指针配置文件以仅计数 MousePointer 和 TouchPointer。
- 删除多余的输入数据提供者。
- 在 InputSimulationService 中禁用手部模拟
一般来说,将 ARSessionOrigin 添加到 MixedRealityPlayspace 的方法按预期工作,并且 ARFoundation 的设置很简单。但是,我很难理解如何让 ManipulationHandler 响应触摸输入。
我遇到了以下问题:
- 用手指在触摸屏上拖动会移动相机(编辑器)。禁用 InputSimulationService 可以解决此问题,但随后我无法移动相机...
- 即使禁用了相机,单击和拖动也不会影响 ManipulationHandler。
- 调试光线以正确的方向绘制,但默认的触摸指针光线绘制在奇怪的位置。 我附上了一个 .gif 来解释这一点。这是在编辑器中使用触摸输入。在设备 (Android) 上运行时观察到相同的效果。
这也适用于 Unity UI(世界空间画布),其中单击 UI 元素不会触发(在设备上或在编辑器中),这向我表明这是一个指针问题而不是处理程序问题。
我将不胜感激有关如何在编辑器和设备上正确配置触摸输入和鼠标输入的一些建议,目标是使用投影矩阵从屏幕点投射光线以创建指针,并在使用两个手射线的方式相同。