- Home /
Problems with coding a long press touch c#
I have a few problems when coding a long press in c# for my mobile tablet game. I want to make a selection box for an rts game and the first step is to determine if my user is doing a long press start selection mode.
My current code (the relavent part) is this:
if(Input.GetTouch(0).phase == TouchPhase.Began)
{
guiText.text += "beginning touch...." + "/n";
touch0BeginTime = Time.time;
}
if(Input.touchCount == 1)
{
//guiText.text += " stationary";
//guiText.text += "touchBeginTime: " + touch0BeginTime;
//+ "touchTime: " + (Time.time - touch0BeginTime);
}
if ((allowPan) && Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved && (!ifTouchingGuiTexObjsArray(allObjOnGuiLayer, Input.GetTouch(0))) )
{
//put camera movement code here
}
else if((allowPan) && Input.touchCount == 1 && (ifTouchingGuiTexObjsArray(allObjOnGuiLayer, Input.GetTouch(0)) == false) && Input.GetTouch(0).phase == TouchPhase.Stationary)
{
guiText.text += "selectionBox active";
selectionBoxActive = true;
}
else if((allowPan) && Input.touchCount == 1 && (ifTouchingGuiTexObjsArray(allObjOnGuiLayer, Input.GetTouch(0)) == false) && Input.GetTouch(0).phase == TouchPhase.Stationary)
{
guiText.text += "selectionBox resize";
}
else if (Input.touchCount == 2 && Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved && (ifTouchingGuiTexObjsArray(allObjOnGuiLayer, Input.GetTouch(0)) == false) && (ifTouchingGuiTexObjsArray(allObjOnGuiLayer, Input.GetTouch(1)) == false) ) //start testing 2 fingers
{
My code doesn't seem to detect Touchphase.Began and Touchphase.stationary.
Also in the code block:
if(Input.touchCount == 1)
{
//guiText.text += " stationary";
//guiText.text += "touchBeginTime: " + touch0BeginTime;
//+ "touchTime: " + (Time.time - touch0BeginTime);
}
If i change it to include the lines commented out:
if(Input.touchCount == 1)
{
guiText.text += " stationary";
guiText.text += "touchBeginTime: " + touch0BeginTime + "touchTime: " + (Time.time - touch0BeginTime);
}
My code seems to never execute that line, and seems to skip over my code block for the camera movement. Why would this be? Does it have to deal with checking touch delta movement and phases "out of order" (eg. testing touchphase.end before code for touchphase.began or trying to access touch.deltaMovement before testing or accessing touchphase.moved)?
Does testing / accessing of touch elements matter in what they give? I am curious why my code does not execute when i try to detect stationary touchphase and how to determine if a touch is a long press?
Anybody have ANY kind of answer? This code isnt too bad, just a few if's, just in case a few thought it was daunting.
Is there an incorrect order when testing touch conditions / phases and such? Some of my code keeps skipping over itself when it should be executing.
Your answer
![](https://koobas.hobune.stream/wayback/20220613064917im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Long press stationary 2 Answers
How to instantiate object at touch position? 3 Answers
Delta touch trembling 0 Answers
Double deltaTouch !? 1 Answer