Tejas Misra
Tejas Misra

Reputation: 25

Unity2D - Rigidbody not stopping when it reaches a position

I have this code:

public class MoveCard : MonoBehaviour
{
public float speed = 1f;
public Rigidbody2D rb;
public Vector2 pos = new Vector2(6.8f,0);
public bool move = false;
void FixedUpdate(){
    if (move){
           //Stops Rigidbody
           if (rb.position == pos){
               move = false;
            }
            rb.transform.position += -rb.transform.right * speed * Time.fixedDeltaTime;      
    }
}
public void CardMovement(){
    move = true;
}
}

I have it set as so when a button is pressed, CardMovement() initiates and in FixedUpdate I have a if statement that turns move off when the Rigidbody reaches a certain position. The rb moves but it doesn't stop when it reaches the Vector2. I am new to Unity so I don't know if this is the way to do it.

Upvotes: 0

Views: 595

Answers (2)

Rubén Cantón
Rubén Cantón

Reputation: 124

Well your Rb doesn't pass exactly for each point between the initial position and Vector2. It's prtty unlikely to have rb.position == pos because one frame it will not enough, and the next one will be too much :)

Try with MoveTowards. Some like this:

rb.position = Vector3.MoveTowards(rb.position, pos, speed * Time.fixedDeltaTime);

You dont need a statement to stop it because it will do it when reaches pos.

PD: You can do this with transform instead of rigidbody if u are not going to use physics and you only want a movement.

Upvotes: 1

Phillip Schulze
Phillip Schulze

Reputation: 120

Don't compare the 2 vector2D values like this:

if(rb.position == pos)

Rather compare the distance between them with a value that is very small, like this:

if(Vector2.Distance(rb.position,pos) <= 0.01)

Additionally, you can set the position like this rb.postion = pos; if it is close enough so that it snaps to the right location.

Upvotes: 0

Related Questions