Mouse click position wrong at low frame rate
Our app allows users to click on items and drag them. But Unity doesn't seem to have a way to get the mouse position at the time of the click.
I can use Input.mousePosition when I recognise a click by calling Input.GetMouseButtonDown(0), but that gives me the position at the time of the call, which may be later at a low frame rate.
What we notice all the time is that if the frame rate drops to, say, 5fps or slower, the user may click on an item and drag it, but the click position won't be registered until part-way along the drag, effectively clicking on something else and dragging the wrong thing or whatever.
If I was writing native Windows code, I would be passed the mouse position with the click event, and the two would match. Is there no way to do this in Unity?
Nobody?
I found that when using mouse it works much better if using the mouse position from the previous frame as the click/release position. Also need to check for lost focus as this stops the mouse pos from updating properly, and obviously can't work on touch (no hover).
Still a bad issue when using touch.
Looks like I could use OnGUI(). Event.current.mousePosition for mouse click events appears to be up to date as required.
HOWEVER, it returns a value in a different coordinate space from Input.mousePosition. It's upside down and I'm not sure the correct way to convert it.
Using "Screen.height - Event.current.mousePosition.y" is consistently off by 2 (in the Unity Editor). Why? In our app, Camera.main.pixelHeight is same as Screen.height, so using that wouldn't help.
Your answer
Follow this Question
Related Questions
How do I make a rigid body move towards position of touch 0 Answers
Convert Event.current.mousePosition to Input.mousePosition 0 Answers
How to control global mouse 0 Answers
Object dissapears on MoveTowards 1 Answer
2D side scroller shoot at mouse click 0 Answers