Изменение маски слоя указателя в MRTK v2.1 - PullRequest
1 голос
/ 10 января 2020

Мне нужно изменить маску слоя во время выполнения, чтобы выбрать разные объекты в зависимости от контекста. Насколько я понимаю, это нужно сделать в InputSystemProfile, отредактировав свойство Pointers:

CoreServices.InputSystem.InputSystemProfile.PointerProfile.PointingRaycastLayerMasks

Но поле доступно только для чтения, и я не могу найти другой способ отредактируйте его, кроме как вручную в редакторе. Кстати, я использую редактируемый профиль для системы ввода.

В HTK это было достигнуто путем присвоения значения: GazeManager.Instance.RaycastLayerMasks

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Для возвращенного поля PointingRaycastLayerMasks это экземпляр ссылочного типа LayerMask[]. Следовательно, хотя вы не можете изменить значение самой ссылки, можно изменить данные, принадлежащие этому ссылочному объекту.

Итак, вы можете изменить маску слоя следующим кодом:

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

Если у вас есть вопросы о том, как использовать LayerMasks в Unity, см. Здесь: Как использовать layermasks

0 голосов
/ 16 января 2020

Вы можете изменить маску слоя указателей, переопределив ее. Все указатели можно найти здесь: CoreServices.InputSystem.DetectedInputSources и в каждом из них вы можете сделать: ptr.PrioritizedLayerMasksOverride

Надеюсь, это поможет

...