Best iOS touch handling :WITHOUT LOSING TOUCHES

in a pinball game: Mac uses Shift buttons as left left and right flippers.

No touches lost on the Mac Shift keys.

For iOS, I’d like to just use left side of screen for left flipper, right side for right flipper. That’s it, that’s all.

What’s the best (right?) way to do this with the lowest latency, and without losing touches?

Everything I’ve tried is losing touches, dropping touches and completely missing some touches.

Unity can’t be this broken, so it must be me…

If there are better ways to do this, please let me know…

An attempt, this has problems – Many long/held touches are dropped/ignored.

#region Touch Input Handling
for (int i = 0; i < Input.touchCount; ++i)
    {
    if (    Input.GetTouch(i).phase == TouchPhase.Began
        &&     Input.GetTouch(i).position.x > Screen.width/2) {
            flip(_RITE);
        }
    else if(Input.GetTouch(i).phase == TouchPhase.Began) {
            flip(_LEFT);
        }
    else if(Input.GetTouch(i).phase == TouchPhase.Stationary
        ||     Input.GetTouch(i).phase == TouchPhase.Moved)
            {
            if (Input.GetTouch(i).position.x > Screen.width/2) {
            flipperUp(_RITE);
            }
            else {
            flipperUp(_LEFT);
            }
        }
    }
#endregion Touch Input Handling

Another approach, which also loses/drops and misses touches.

bool flip_R;
bool flip_L;
bool flipperUP_R;
bool flipperUP_L;

    if (Input.touchCount > 0)
    {
        for (int i = 0; i < Input.touchCount; ++i) {
        touch = Input.GetTouch(i);   
            switch (touch.phase)
            {
                case TouchPhase.Began:
                    if (!flip_R) flip_R = touch.position.x > Screen.width/2;
                    if (!flip_L) flip_L = touch.position.x < Screen.width/2;   
                    break;
                case TouchPhase.Moved:
                case TouchPhase.Stationary:
                    if (!flipperUP_R) flipperUP_R = touch.position.x > Screen.width/2;
                    if (!flipperUP_L) flipperUP_L = touch.position.x < Screen.width/2;
                    break;
            }
        }
    }

Dropping touches? Must be some problem in recent iOS versions because I’ve never seen that before. Maybe it’s your device, do you have a cracked screen?

No cracked screen.

Not a fault with iOS version – > All other apps functioning as expected, including Sequencers, DAWS, Synthesizers and other low latency, high energy applications.

THEREFORE: it could be my code. I expect it is…

Then I would file a bug report.

I don’t know if I’m handling touch correctly… HENCE THE QUESTION!