- Home /
Swipe and Joystick Together on Mobile
I am working on a game for android. I am using the standard mobile FPS control script and character controller. I need to use the left joystick for movement but use the right side of the screen for swipe dection (also currently using a right joystick as a mouse look, but i'm going to replace that later).
My problem is unity differentiating between the left joystick touch input and the right swipe input. Here is my code.
//find it there are touches
if(Input.touchCount > 0){
//run through for every touch
var Touches : int = Input.touchCount;
for(var touch : int = 0; touch < Touches; touch++){
//Swipe is whatever touch you are currently testing
var Swipe : Touch = Input.GetTouch(touch);
//if the swipe is on the right-hand side of the screen
if(Swipe.position.x > Screen.width / 2){
Debug.Log(Swipe.position);
//find if the current touch is moving along y axis
if(Mathf.Abs(Swipe.deltaPosition.y) > Mathf.Abs(Swipe.deltaPosition.x)){
//if it is, find if it is moving up or down
//Keep in mind touch locations have an opposite y value of the screen
if(!Action && Swipe.deltaPosition.y > 0 && canJump){
jump = true;
canJump = false;
}
if(!Action && Swipe.deltaPosition.y < 0 && movement.x > .02){
Slide();
}
}
}
else{
return;
}
}
}
This is in the First Person Control script at the end of the Update function. I moved the jump variable to be declared in the top as well, just as a side note. As you can see I used a for loop to cycle through all touches and a return value to move to the next touch if that one is not on the right side of the screen. But the problem still remains. When I debug the Swipe.position it works fine unless the left side of the screen is touched, then it freezes at the last swipe.position before the left touch.
So my question, how can I get it to differentiate between the two touches and use the right-side ones as swipes?
Alright a little update, I fixed the problem mentioned above by changing the first for loop with:
//run through for every touch
for(var Swipe : Touch in Input.touches){
if (Swipe.phase == TouchPhase.$$anonymous$$oved)
But this working caused a new problem. $$anonymous$$oving the view joystick down also triggers Slide(). How can I stop this? I plane to remove the Right joystick completely and just mag it a drag to view, so how would I impliment a drag to view into this?