EventSystem - all touches have the same ID

I’ve been working on a UI joystick with 4.6’s UI system. Everything works fine, until I’m multi touching the screen. The EventSystem registers the second finger with the same pointerId as finger one. I need to be able to get the individual finger ID’s, or pointerId’s to be able to filter out unwanted touches.

How do I go about and get the correct pointerId’s from the EventSystem?

Here’s a tiny excerpt:

using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections;

public class UI_Joystick : MonoBehaviour, IPointerUpHandler, IDragHandler, IPointerDownHandler {

    public void OnTouchDrag(PointerEventData eventData)
    	var touchId = eventData.pointerId;
    	Debug.Log(touchId); // No matter how many fingers I touch down on the object, I will always get a pointerId of -1.


Edit: When printing the touchId and position of the finger, you can see the big position difference when I touch the screen with a second finger, but still with the same id: (eventData.pointerId + " >> " + eventData.position)

-1 >> (70.3, 85.3)
-1 >> (70.0, 85.3)
-1 >> (187.2, 112.4)

(Last entry is where I touch the screen with a second finger, outside of the UI element)

It has only “-1” on PC. On a mobile device, it’s different.

Hi .

Use [Touch.fingerId][1]

Best Regards .

The same issue. Hope it’s a Unity bug. Anyway, here is my workaround:

public void OnPointerDown(PointerEventData eventData)
    var touches = Input.touches.Where(i => i.position == eventData.position).ToList();
    var touchId = touches.Any() ? touches[0].fingerId : eventData.pointerId;