- Home /
How to properly handle multitouch for virtual joystick?
I have an on-screen joystick to control player movement which appears when the player touches the screen, as such:
//Runs when first tapping on screen
public void OnPointerDown(PointerEventData e)
{
//First move joystick to where input is happening
Vector2 absolutePos;
//If using touch, get the last touch event and use that to determine joystick position
if(Input.touchSupported)
RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, Input.touches[Input.touches.Length-1].position, canvas.worldCamera, out absolutePos);
//If not using touch (i.e. playing on PC) use the mouse position instead
else
RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, Input.mousePosition, canvas.worldCamera, out absolutePos);
//Set joystick position
joystick.transform.position = canvas.transform.TransformPoint(absolutePos);
//Show joystick on screen
joystick.SetActive(true);
usingJoystick = true;
}
This generally works well - however, I am having some issues with multitouch. If the player already holds down on a different part on the screen (for instance the fire button to fire their weapons), using a second finger to show the joystick makes it appear on the position of the first touch rather than the latest one.
I'm assuming this line doesn't do what I assume it does:
Input.touches[Input.touches.Length-1].position
How can I properly make sure that the joystick appears at the most recent touch and not any past one?
Your answer
Follow this Question
Related Questions
Touch ID ????? 1 Answer
How to stop second finger from manipulating position of gui joystick 1 Answer
Android 2D multitouch joystick + buttons 0 Answers
Touch Crosshair problem. 1 Answer
Touch Joystick problem. 0 Answers