- Home /
Help With Joystick distance and speed
i have question about joystick distance and speed, i want to set my speed depending with joystick distance. like Joystick 1 my joystick it doesn't move, so my speed will be 0. Joystick 2 my joystick it move half of the maximum limit, so my speed will be 5. Joystick 3 my joystick it reach the maximum distance, so my speed will be 10. this my joystick script :
Vector2 joystickPosition = Vector2.zero;
public float angle;
public string direction;
public bool playerMoving;
void Start()
{
joystickPosition = RectTransformUtility.WorldToScreenPoint(cam, background.position);
playerMoving = false;
}
public override void OnDrag(PointerEventData eventData)
{
playerMoving = true;
Vector2 direction = eventData.position - joystickPosition;
inputVector = (direction.magnitude > background.sizeDelta.x / 2f) ? direction.normalized : direction / (background.sizeDelta.x / 2f);
handle.anchoredPosition = (inputVector * background.sizeDelta.x / 2f) * handleLimit;
}
public override void OnPointerDown(PointerEventData eventData)
{
OnDrag(eventData);
}
Answer by eses · Sep 07, 2018 at 04:24 PM
Hi @WhisperXD
You don't have to use WorldToScreenPoint. Just put your joystick thumb stick part as child of it's base. Then get the distance of thumb stick, relative to base center.
You should then normalize the stick values, so that it doesn't matter what the size and shape of it is. This way, y-axis would be could be -1 at bottom, center 0, and top edge 1. Similarly for x-axis.
Now that you have normalized output from stick, you can just use it to manipulate your maximum speed (for example):
-1 x 10 = -10
0 x 10 = 0
0.5 x 10 = 5
1.0 x 10 = 10