I have 3 3D objects in the scene and I want to
know which of those I am touching at the moment.
I go through all the touches (Input.touchCount - times)
and for every touch I use raycast and check if
the ray hits the object.
This works perfectly great and fast on iDevices and some Androids.
However on a lot of android devices I experience
huge lag (0.5 - 1 seconds) between the touch and response.
Unity’s Input.GetTouch will be slower than what the device can detect from you finger.
You update your Unity object with asking Input.touches. This API will need 1-2 frames latency from the actual touch the phone can report since it has to collect and process touch data before presenting them to you. Look at this recent video I made for Native Touch, I ask the yellow box on every Update() to follow the touch, but the red box to follow the latest native touch callbacks. The result is the red box can go ahead of the yellow box by 1 frame advantage.
Remember that Unity's API is only 1-2 frames late from the callback, the improvement is at best it should not be more than 16.67ms - 33.33ms. If your touch lag feels like it is more than that I am afraid the problem might be somewhere else...
If you would like to receive native callbacks in Unity, you can try Native Touch