在 MRTK v2.1 中更改指针的图层掩码

Changing the layer mask of a pointer in MRTK v2.1

我需要在运行时更改图层蒙版,以便根据上下文 select 不同的对象。 根据我的理解,这应该在 InputSystemProfile 中通过编辑指针 属性:

来完成

CoreServices.InputSystem.InputSystemProfile.PointerProfile.PointingRaycastLayerMasks

但该字段是只读的,除了在编辑器中手动编辑外,我找不到其他方法对其进行编辑。 顺便说一句,我正在为输入系统使用可编辑的配置文件。

在 HTK 中,这是通过为以下对象赋值来实现的: GazeManager.Instance.RaycastLayerMasks

有什么建议吗?

您可以通过覆盖来更改指针图层蒙版 所有的指针都可以在这里找到:CoreServices.InputSystem.DetectedInputSources 在每一个中你都可以做: ptr.PrioritizedLayerMasksOverride

希望对您有所帮助

对于返回的字段PointingRaycastLayerMasks,它是一个引用类型的实例LayerMask[]。因此,虽然您不能更改引用本身的值,但可以更改属于该引用对象的数据。

因此,您可以使用以下代码更改图层蒙版:

//Uncheck [PostProcessing],[Spatial Awareness]
CoreServices.InputSystem.InputSystemProfile.PointerProfile.PointingRaycastLayerMasks[0].value = 19;

如果您对如何在 Unity 中使用 LayerMasks 有疑问,请参阅此处:How do I use layermasks?