Получить сенсорную информацию в библиотеке Android - PullRequest
0 голосов
/ 18 мая 2018

У меня есть игра для Android на Unity, которая недостаточно быстро реагирует на прикосновения (из того, что я искал, Unity действительно имеет проблему с задержкой ввода на Android), поэтому я пытаюсь создать библиотеку Android с методом, которыйполучает данные касания и отправляет их обратно вызывающей стороне (моя собственная игра на Unity).

Я думал, что это будет просто, но оказывается, что я не могу "опросить"для сенсорных данных я должен получить их через события.Так что мне пришлось сделать несколько взломов / догадок, чтобы получить представление Unity, которое обрабатывает прикосновения, но когда я вызываю «setOnTouchListener», оно перезаписывает первоначального слушателя, поэтому моя игра Unity больше не получает никаких прикосновений.

Так что мойВопрос в том, есть ли какие-либо предложения о том, как решить эту проблему?

Из того, что я могу сказать, я мог бы решить ее одним из следующих двух вариантов:

1) каким-то образом опросить сенсорную информацию (вместо этогоподключить слушателя), но я не смог найти никакого способа сделать это.

2) или получить предыдущего слушателя, чтобы я мог передать ему прикосновение после того, как получу то, что мне нужно.

или, конечно, 3) сдаваться и оставлять входные данные запаздывающими и жить с сотнями плохих отзывов, которые я получаю из-за этого (я только что перенес мою игру со старого движка, у которого не было этого запаздывания, поэтому мойигроки в ярости).

Спасибо

1 Ответ

0 голосов
/ 18 мая 2018

Описанная вами проблема хорошо известна сообществу Unity.Вам не нужно сдаваться или создавать свой собственный плагин.Unity работает над новой системой ввода уже много лет.Он все еще находится в экспериментальном режиме, но выглядит многообещающе.

При слишком медленном старом API вы получаете доступ к экрану с помощью:

void Update()
{
    foreach (Touch touch in Input.touches)
    {
        if (touch.phase == TouchPhase.Began)
        {
            Vector2 touchLocation = touch.position;
        }
    }
}

С новым низкоуровневым API-интерфейсом InputSystem этоВот как вы получаете сенсорную информацию:

public int touchIndex = 0;

void Update()
{
    Touchscreen touchscreen = UnityEngine.Experimental.Input.Touchscreen.current;


    if (touchscreen.allTouchControls[touchIndex].ReadValue().phase != PointerPhase.None &&
               touchscreen.allTouchControls[touchIndex].ReadValue().phase != PointerPhase.Ended)
    {
        Vector2 touchLocation = touchscreen.allTouchControls[touchIndex].ReadValue().position;

    }
}

Новый API InputSystem можно получить здесь .Для этого вам понадобится и выше Unity 2018.2.Наконец, если у вас возникнут какие-либо проблемы с этим API, вы можете сообщить им об этом на этом форуме, и это будет исправлено как можно скорее.

...