- Home /
Why smoothdamp can not work with TouchPhase.Ended?
I am not sure it's my code problem or the way I am using it is not correct. But I found the Vector3.SmoothDamp works fine under Update(). Here are my code, anyone can tell me what's going on? public class TouchInputSwipeFlick4 : MonoBehaviour {
public float speed=1.5f;
private float currentObjPosX;
private Vector2 touchDeltaPosition;
public float smoothSpeed=0.1f;
public float smoothTime = 0.3F;
private float goalPos;
void Update ()
{
currentObjPosX = transform.position.x;
goalPos = Mathf.Round(transform.position.x/25)*25;
if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
// Get movement of the finger since last frame
touchDeltaPosition = Input.GetTouch(0).deltaPosition;
//P0 to Start Page
if (currentObjPosX>0 && touchDeltaPosition.x>0) GoStart();
//PEnd to Start Page
if (currentObjPosX<-350 && touchDeltaPosition.x<0) GoStart();
// Move object across XY plane by controling the speed, in this case, we are moving the camera
if (currentObjPosX<=0 && currentObjPosX>=-350) //need to be >=-225 otherwise >-225 will let user "stock at that page)
transform.Translate (touchDeltaPosition.x*speed*Time.deltaTime,0,0);
}
if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended)
{
transform.position = Vector3.Lerp(transform.position, new Vector3(goalPos, 0, 0) , Time.time*smoothSpeed);
}
}
Thanks
Answer by farooqaaa · Mar 23, 2012 at 03:46 PM
TouchPhase.Ended is called only once. For smoothdamp to work it has to be called continuously until it reaches the destination.
Use a bool variable and then call it from Update().
bool doSmoothDamp;
void Update()
{
if(doSmoothDamp)
{
// smoothdamp code here
}
if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended)
{
doSmoothDamp = true;
}
}
Thanks for replying so quick. I tried your solution, but unfortunately it didn't work and stuck at the first page. $$anonymous$$aybe something is missing in my code?
Here are my code:
//* public class Test : $$anonymous$$onoBehaviour {
public float speed=1.5f;
private float currentObjPosX;
private Vector2 touchDeltaPosition;
public float smoothSpeed=0.1f;
public float smoothTime = 0.3F;
private float goalPos;
private bool doSmoothDamp=false;
void Update ()
{
if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.$$anonymous$$oved)
{
// Get movement of the finger since last frame
touchDeltaPosition = Input.GetTouch(0).deltaPosition;
//P0 to Start Page
if (currentObjPosX>0 && touchDeltaPosition.x>0) GoStart();
//PEnd to Start Page
if (currentObjPosX<-350 && touchDeltaPosition.x<0) GoStart();
// $$anonymous$$ove object across XY plane by controling the speed, in this case, we are moving the camera
if (currentObjPosX<=0 && currentObjPosX>=-350) //need to be >=-225 otherwise >-225 will let user "stock at that page)
transform.Translate (touchDeltaPosition.x*speed*Time.deltaTime,0,0);
currentObjPosX = transform.position.x;
goalPos = $$anonymous$$athf.Round(transform.position.x/25)*25;
}
if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended)
{
doSmoothDamp = true;
}
if (doSmoothDamp)
{
transform.position = Vector3.Lerp(transform.position, new Vector3(goalPos, 0, 0) , Time.time*smoothSpeed);
}
}
//Fucnctions for moving to each page
public void GoStart()
{
Application.LoadLevel(0);
}
)
//**
Your answer
Follow this Question
Related Questions
SmoothDamp touch look iOS Android 1 Answer
Exception error 1 Answer
Touch Follow 3d. 1 Answer
Drag Object, same speed as mouse/touch 3 Answers
direction/inertia touch system (2d) 1 Answer