0
\$\begingroup\$

I am working on a very basic test in 2D. The problem I am having is that, when my sprite collides with the ground, it is checking the event too frequently. The sprite stays in limbo, as it doesn't have a chance to leave the ground. By the time it does, the check tells it to turn around, resulting it quickly going up and down. I uploaded an example clip to YouTube.

When contact is made, the sprite needs to change it's Y axis direction. How do I fix this? Please see my code, below:

void Update () 
{
    hitWall = Physics2D.OverlapCircle(wallCheckUp.position, wallCheckRadius, whatIsWall);

    if (hitWall)
    {
        moveUp = !moveUp;
    }

    if (moveUp)
    {
        transform.localScale = new Vector3(-1f, 1f, 1f);
        GetComponent<Rigidbody2D>().velocity 
            = new Vector2(speed, GetComponent<Rigidbody2D>().velocity.x);
    }
    else
    {
        transform.localScale = new Vector3(1f, 1f, 1f);
        GetComponent<Rigidbody2D>().velocity 
            = new Vector2(-speed, GetComponent<Rigidbody2D>().velocity.x);
    }
}

Here is my object:

enter image description here

\$\endgroup\$
0
\$\begingroup\$

You could apply a timeout to prevent the collision from being acknowledged the second++ times. For instance, you know it won't collide again for 1s, so make a float and decrement it to 0 when the boolean gets switched. Don't when it gets to 0, turn the boolean back to receive and react to collision again.

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .