Move an object in a specific angle

I’m making a simple 2d brick breaker game, I have a paddle, a ball and some bricks. The ball hits the paddle in certain angle and physics determine the angle the ball should bounce back, but what I want to do, is set up the paddle to give certain angle to the ball depending on tg he part of the paddle the ball hit.
in the picture attached I show the angle I want the ball to bounce off the paddle depending on the part of the paddle the ball hit (fig 1).
In fig 2 the lines represent the normal behaviour of the ball bouncing off the paddle, and the dashed line represents what I want to achieve.
in fig 3 I show the same principle but this time reshaping the paddle’s collider. Still not what I want.
I thought about giving the ball certain angle of bounce regardless of the angle it had before it hit the paddle, but can’t figure a way to do this, specially detecting what part of the paddle the ball hit. Thanks in advance.

To do this, I would calculate an angle based on the distance we hit from the center. To do that:

To calculate an angle, we need the following information.

a: the x/y position of the center of the pad
b: The x/y point of the hit (i.e. where the ball hit the pad)
c: the width of the pad / 2 (i.e. half the pads width)
maxAngle: the angle at which the ball should go out if it hits the far right of the pad.

Then

float delta = b.x - a.x;
float percentage = delta / c; // value between -1 and 1
float angle = percentage * maxAngle;

The output of this would be an angle between -maxAngle at the far left and maxAngle at the far right. (so an angle of 0 is straight up at the center of the pad)

To get the point the ball hit, you could use OnCollisionEnter and the given contacts (which is usually just 1 point). (or OnCollisionEnter2D)

Something like this might work. Basically when the ball hits paddle check the collision point and send it in a direction away from the paddles center going through that point.

Rigidbody rb;   // balls rigidbody

// in the ball script
void OnCollisionEnter(Collision collision) {
    if (collision.gameObject.CompareTag("Paddle")) {
        // assuming paddles position is at center
        Vector3 paddleCenter = collision.collider.transform.position;
        // get first contact point
        Vector3 point = collision.contacts[0].point; 

        rb.velocity = (point - paddleCenter).normalized * rb.velocity.magnitude;
    }
}