- Home /
Mobile game touch problem (C#)
Hello my fellow Unities! I'm developing a 2D mobile game using touch. I'm trying to make it so that you can only hold down one finger on the screen when you do an object will follow the position on where you touch, so when you move your finger over the screen the object follows. But looks like I have hit a crossroad with two problems!
First, If I touch the screen on different location quickly the object will swap over to the position where i pressed, how can I make the ball just follow the finger when I hold down on the screen and not move between position when I press quickly?
Second, there is the problem when you hold down more than one fingers on the screen the ball will make "swaps" between positions. How do I set it to just work with one finger?
Here is the code:
using UnityEngine;
using System.Collections;
public class MoveScript : MonoBehaviour {
public GameObject character;
public float speed = 50.0f;
void Update ()
{
if(Input.touchCount == 1)
{
Vector3 target = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y, 10.0f));
character.transform.Translate(Vector3.MoveTowards(character.transform.position, target, speed * Time.deltaTime) - character.transform.position);
}
}
Here is the code for checking input:
using UnityEngine;
using System.Collections;
public class TouchScript : MonoBehaviour
{
void OnGUI()
{
foreach(Touch touch in Input.touches)
{
string message = "";
message += "ID: " + touch.fingerId + "\n";
message += "Phase: " + touch.phase.ToString() + "\n";
message += "TapCount: " + touch.tapCount + "\n";
message += "Pos X: " + touch.position.x + "\n";
message += "Pos Y: " + touch.position.y + "\n";
int num = touch.fingerId;
GUI.Label(new Rect(0 + 130 * num, 0, 120, 100), message);
}
}
}
I'm grateful for any help I can get!
Answer by phil_me_up · Apr 04, 2016 at 11:37 PM
If you have no intention of allowing multi-touch, you can just disable it: http://docs.unity3d.com/ScriptReference/Input-multiTouchEnabled.html
Should you want multi-touch during some parts of the game, enable and then disable as needed.
Ah nice, thank you, that seems to have fixed the the second problem. But the first problem still remains. How can I make the ball just follow the finger when I hold down on the screen and not jump between position when I press one point of the screen and then lift the finger of the screen to press another end of the mobile screen?
I think you probably want to look at the TouchPhase: http://docs.unity3d.com/ScriptReference/Touch-phase.html
This way you can ignore initial taps on the screen.
Alternatively you can create your own system by comparing input positions to deter$$anonymous$$e if the ball should follow or not. You may find that you have to do this to some degree regardless of the ToughPhase, as tiny movements by your finger are inevitable and may trigger the 'movement' phase. The way to combat this is to look at your initial position and your new position, and if the magnitude of that vector exceeds a threshold, assume the ball needs to follow.
I'll look into it! I'm thinking of making it so when I lift my finger of the screen while moving the player, I have to touch the player again to be able to move, is it possible for the code to be able to check if the TouchInput is on the "character" gameobject?
Answer by mrMYSTERIOUSYT · Mar 09, 2017 at 08:09 AM
, @Internetman the problem is that i your code you are checking for touch count 1 which is wrong you should be checking for touch 0
just change the number to 0