I’m using smoothdamp in a scene. When i changed scene and return back to scene that i use smoothdamp, velocity returns NaN. How can i solve this problem?
My Script:
void Update()
{
if (transform.position.z == 0)
{
if (Input.GetMouseButtonDown(0))
{
firstPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition).x;
x1 = firstPosition;
}
if (Input.GetMouseButton(0))
{
mouseButtonUp = false;
secondPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition).x;
transform.localPosition += new Vector3(secondPosition - firstPosition, transform.localPosition.y, transform.localPosition.z);
if (transform.localPosition.x > leftLimit.position.x)
{
transform.localPosition = leftLimit.position;
}
else if (transform.localPosition.x < rightLimit.position.x)
{
transform.localPosition = rightLimit.position;
}
firstPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition).x;
}
if (Input.GetMouseButtonUp(0))
{
x2 = Camera.main.ScreenToWorldPoint(Input.mousePosition).x;
distance = x1 - x2;
mouseButtonUp = true;
}
if (mouseButtonUp)
{
if (distance > 5.5f)
{
float xPosition = Mathf.SmoothDamp(transform.localPosition.x, rightLimit.position.x, ref xVelocity, smoothTime);
transform.localPosition = new Vector3(xPosition, transform.localPosition.y, transform.localPosition.z);
if (Mathf.Abs(transform.localPosition.x - rightLimit.position.x) < 0.1f)
{
mouseButtonUp = false;
}
}
else if (distance < 5.5f && distance >= 0 && transform.localPosition.x >= 0)
{
float xPosition = Mathf.SmoothDamp(transform.localPosition.x, leftLimit.position.x, ref x1Velocity, smoothTime2);
transform.localPosition = new Vector3(xPosition, transform.localPosition.y, transform.localPosition.z);
if (Mathf.Abs(transform.localPosition.x - leftLimit.position.x) < 0.1f)
{
mouseButtonUp = false;
}
}
else if (distance < -5.5f)
{
float xPosition = Mathf.SmoothDamp(transform.localPosition.x, leftLimit.position.x, ref x2Velocity, smoothTime3);
transform.localPosition = new Vector3(xPosition, transform.localPosition.y, transform.localPosition.z);
if (Mathf.Abs(transform.localPosition.x - leftLimit.position.x) < 0.1f)
{
mouseButtonUp = false;
}
}
else if (distance > -5.5f && distance < 0 && transform.localPosition.x < 0)
{
float xPosition = Mathf.SmoothDamp(transform.localPosition.x, rightLimit.position.x, ref x3Velocity, smoothTime4);
transform.localPosition = new Vector3(xPosition, transform.localPosition.y, transform.localPosition.z);
if (Mathf.Abs(transform.localPosition.x - rightLimit.position.x) < 0.1f)
{
mouseButtonUp = false;
}
}
x2 = x1;
}
}
}
EDIT: I’ve considered your suggestion and didn’t do the above operations until I pass some frames to get a sensible deltaTime value but that didn’t help. I don’t think deltaTime is 0 here. Maybe that would give a “divided by zero exception”. But I’m getting a NaN value and a respective error.
Thanks for checking out!