Я использую MRTK для отслеживания ввода в мое программное обеспечение. Я реализовал следующее:
public class ScreenControllerMRTK : MonoBehaviour, IMixedRealityBaseInputHandler, IMixedRealityInputHandler<Vector2>, IMixedRealityInputHandler
{
public MixedRealityInputAction Trigger, Grip, Scroll, Swipe, Joystick,DPad, TouchPadClicked, TouchPadTouched, MenuPressed
и подписался на события со следующим:
private void OnEnable()
{
IMixedRealityInputSystem inputSystem;
if (MixedRealityServiceRegistry.TryGetService<IMixedRealityInputSystem>(out inputSystem))
{
inputSystem?.RegisterHandler<IMixedRealityBaseInputHandler>(this);
inputSystem?.RegisterHandler<IMixedRealityInputHandler<Vector2>>(this);
inputSystem?.RegisterHandler<IMixedRealityInputHandler>(this);
}
}
private void OnDisable()
{
IMixedRealityInputSystem inputSystem;
if (MixedRealityServiceRegistry.TryGetService<IMixedRealityInputSystem>(out inputSystem))
{
inputSystem?.UnregisterHandler<IMixedRealityBaseInputHandler>(this);
inputSystem?.UnregisterHandler<IMixedRealityInputHandler<Vector2>>(this);
inputSystem?.UnregisterHandler<IMixedRealityInputHandler>(this);
}
}
Моя проблема заключается в том, что событие сгенерировано для захвата позиции DPad (с OnInputChanged) и событие, сгенерированное для событий касания DPad и событий щелчка, не определено c. Я реализовал следующее:
public void OnInputChanged(InputEventData<Vector2> ed)
{
if (ed.MixedRealityInputAction == DPad)
{
touchpadx = ed.InputData.x;
touchpady = ed.InputData.y;
}
}
public void OnInputDown(InputEventData ed)
{
if (ed.MixedRealityInputAction == TouchPadClicked)
{
touchpadclicked = true;
Debug.Log("Touchpad Clicked at" + touchpadx + "," + touchpady);
}
if (ed.MixedRealityInputAction == TouchPadTouched)
{
touchpadtouched = true;
Debug.Log("Touchpad Touched at" + touchpadx + "," + touchpady);
}
}
Моя проблема в том, что все эти события недетерминированы c. т.е. иногда я получаю событие TouchPadTouched перед событием OnInputChanged, давая (0,0), когда сенсорная панель касается координат. То же самое с TouchPadClicked. Кроме того, TouchPadClicked также генерирует событие TouchPadTouched (что имеет смысл, вы касаетесь его перед щелчком по нему).
Итак ....
Как отследить, что пользователь нажал на сенсорную панель в определенный момент, не отслеживая касание и убедившись, что у меня есть координаты щелчка? Кроме того, как мне избежать повторения касания? (касание не очень точное и иногда генерирует события с двумя или тремя координатами, когда вы касаетесь большим пальцем), и то же самое касается Thumbstick. Я мог ловить события только через определенное время. Но это звучит вопреки принципу отслеживания событий ...?!?
Я пытался использовать правило ввода-действия в MRTK, но они просто не работают, я не знаю, почему , В этой части MRTK определенно есть ошибка, потому что я продолжаю получать ошибку, упомянутую в моем предыдущем посте:
IndexOutOfRangeException: Index was outside the bounds of the array.
Простите этот, вероятно, простой вопрос для кодера, возникшего в недетерминированном мире программирования c ... я старый таймер, привыкший к императивному программированию ....!