- Home /
How to properly implement snake style controls for android?
I'm making a game that is snake but with added content. I've made the controls work in MIT app inventor so I know my logic should be correct. I think the problem comes from converting screen coordinates to world coordinates. I've tried offsetting the y coordinate by screen.height in both directions but still get unpredictable behavior of controls.
EDIT: It appears ScreenToWorldPoint is not the right way to do this. How can I implement the controls so that touch.position.x and touch.position.y translate directly to what they are from screen to world?
Here is my code:
//gesture recognition
var touch : Touch;
var worldTouchPos : Vector3;
for (var i = 0; i < Input.touchCount; ++i) {
touch = Input.GetTouch(i); ~~~~
worldTouchPos = camera.main.ScreenToWorldPoint(touch.position);
if(touch.phase == TouchPhase.Began)
{
if(direction == 0 || direction == 2)
{
if(transform.position.y < (worldTouchPos.y)) // Go up or down
{
direction = 1;
}
else
{
direction = 3;
}
}
else // go right or left
{
if(transform.position.x > (worldTouchPos.x))
{
direction = 2;
}
else
{
direction = 0;
}
}
}
}//end for
if(direction == 0)//right
{
transform.Translate(Time.deltaTime, 0, 0);
}
else if (direction == 1)//up
{
transform.Translate(0, Time.deltaTime, 0);
}
else if (direction == 2)//left
{
transform.Translate(-(Time.deltaTime), 0, 0);
}
else if (direction == 3)//down
{
transform.Translate(0,-(Time.deltaTime), 0);
}
$$anonymous$$ay or may not be your issue, but this line:
worldTouchPos = camera.main.ScreenToWorldPoint(touch.position);
...will only work for an orthagraphic camera. For a perspective camera, 'worldTouchPos' will be set to the position of the camera.
Yes I have tested and it seems every touch now defaults to the center of the screen. If I just use touch.position.x and touch.position.y then the sprite will only go in 2 directions no matter where each touch is. Is there any method that will actually put my touch exactly where it would be in the world space?
Your answer
![](https://koobas.hobune.stream/wayback/20220613171010im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Converting screen coordinates to world coordinates 1 Answer
Raycast Touch Android not working JS 2 Answers
Control the camera with a half of the touch screen 0 Answers
I Need Help With Mobile Touch Movement. 0 Answers
touch position to world position 2D 2 Answers