- Home /
Virtual joystick problem issue
(Help pls )im having an error when im moving the player << when turn the joystick up it goes left ,when i turn it right it goes up ,when i turned it down it goes right ,when iturned left it goes down (looks like if i go up it takes me 1 back position so it goes left ) im using scripts like this :
using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using System.Collections;
public class VirtualJoystick : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler { public Image bgImg, jsImg; public Vector3 InputDirection { set; get; }
private void Start()
{
bgImg = GetComponent<Image>();
jsImg = GetComponentsInChildren<Image>()[1];
InputDirection = Vector3.zero;
}
//EventSystems interfaces
public virtual void OnDrag(PointerEventData ped)
{
Vector2 pos = Vector2.zero;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle
( bgImg.rectTransform,
ped.position,
ped.pressEventCamera,
out pos))
{
pos.x = (pos.x / bgImg.rectTransform.sizeDelta.x);
pos.y = (pos.y / bgImg.rectTransform.sizeDelta.y);
float x = (bgImg.rectTransform.pivot.x == 1) ? pos.x * 2 + 1 : pos.x * 2 - 1;
float y = (bgImg.rectTransform.pivot.y == 1) ? pos.y * 2 + 1 : pos.y * 2 - 1;
InputDirection = new Vector3(x, 0, y);
InputDirection = (InputDirection.magnitude > 1) ? InputDirection.normalized : InputDirection;
jsImg.rectTransform.anchoredPosition = new Vector3(InputDirection.x * (bgImg.rectTransform.sizeDelta.x / 3)
, InputDirection.z * (bgImg.rectTransform.sizeDelta.y / 3));
}
}
public virtual void OnPointerDown(PointerEventData ped)
{
OnDrag(ped);
}
public virtual void OnPointerUp(PointerEventData ped)
{
InputDirection = Vector3.zero;
jsImg.rectTransform.anchoredPosition = Vector3.zero;
}
}
and the player script movement for the ball :
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class PlayerMovement : MonoBehaviour { public VirtualJoystick joystick; public float speed = 150.0f; private Rigidbody rigid;
private void Start()
{
rigid = GetComponent<Rigidbody>();
}
private void Update()
{
rigid.AddForce(joystick.InputDirection * speed * Time.deltaTime);
}
}
Answer by finlay_morrison · Mar 07, 2018 at 01:34 PM
It seems like you are using the wrong axis of the joystick to control each axis of the player, if you are using the swap around the x and y when you perform the player input
@finlay_morrison pls help, can i fix the wrong axis? how?
Your answer
![](https://koobas.hobune.stream/wayback/20220612154103im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Virtual Joystick on Android doesn't work! 0 Answers
Mobile joystick not moving player 0 Answers
GearVR wont initialize the scene (working fine in Editor) 0 Answers
Android export errors 0 Answers