# PhysicsMaterial2D and bounciness: Getting weird angles when hitting box collider edges

Hi all,

I’m building a 2D brick breaker game and I’m using PhysicsMaterial2D in the ball. Friction is set to 0 and bounciness is set to 1. The ball has a circle collider and a dynamic rigidbody with continuous collision detection.

The bricks are static rigidbodies with a box collider. The behavior that I want for the collision is to preserve the ball’s rigidbody velocity and invert its X or Y depending if the ball collided with sides or top/bottom of the brick.

The issue is that I’m getting weird angles when the ball hits the edge of the bricks or between two bricks. Here’s a video: PhysicsMaterial2D - Brick Breaker - Ball Bounciness Issue.mp4 - Google Drive

Here’s the code I’m using to debug this:

``````void Update()
{

GetVelocity();

if (brickCollisions > 0)
brickCollisions = 0;
}

void GetVelocity()
{
lastFrameVelocity = rb.velocity;
}
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.tag == "Common Brick")
{

brickCollisions++;
Debug.Log("Brick collisions: " + brickCollisions + " / " + "Velocity before collision: " + lastFrameVelocity + " / " + "Velocity after collision: " + rb.velocity);

}

}
``````

And here’s an example (not the same as video) of what’s happening when the ball hits edges:

``````Brick collisions: 1 / Velocity before collision: (2.0, 2.0) / Velocity after collision: (2.0, -2.0)

Brick collisions: 1 / Velocity before collision: (2.0, -2.0) / Velocity after collision: (2.0, 2.0)

Brick collisions: 1 / Velocity before collision: (2.0, 2.0) / Velocity after collision: (0.2, -2.8)

Brick collisions: 1 / Velocity before collision: (0.2, -2.8) / Velocity after collision: (-0.9, 2.7)

Brick collisions: 1 / Velocity before collision: (-0.9, 2.7) / Velocity after collision: (-0.9, -2.7)
``````

And this is when the ball hits between two bricks (which can very well be the same issue as above):

``````Brick collisions: 1 / Velocity before collision: (2.0, 2.0) / Velocity after collision: (2.0, -2.0)

Brick collisions: 1 / Velocity before collision: (2.0, -2.0) / Velocity after collision: (2.0, 2.0)

Brick collisions: 1 / Velocity before collision: (2.0, 2.0) / Velocity after collision: (2.0, -2.0)

Brick collisions: 1 / Velocity before collision: (2.0, -2.0) / Velocity after collision: (-0.9, 2.7)

Brick collisions: 2 / Velocity before collision: (2.0, -2.0) / Velocity after collision: (-0.9, 2.7)
``````

If anyone has an explanation for this behavior, please let me know.

I don’t expect anyone to write code or give me a solution, I just need to understand why this is happening and how to mitigate that.

Is this fixable if I change Physics2D settings?

Any tutorial, link to the API documentation or ideas are welcome. I’ve been reading old topics about bounciness and circle colliders but I haven’t found a good answer yet.

Okay, so I finally got around this issue with the amazing help of r/unity.

The solution was to replace the circle collider on the ball gameObject with a box collider. I made its size 0.8 so it’s not noticeable for players and the angles I’m getting are consistent. I tested this several times today and I’m happy with the results.