0
votes

hey guys i've something here to ask about how does really the velocity on unity works ??? i've been working on a project recently, i want to create the bouncing ball games, so whenever the ball hit the collider, it will be bounced depends on the position that have been hit.

i'm using the getComponent().velocity, but somehow the ball doesn't bounce really well, and whenever the ball hit the middle of collider, it should be bounced back without changing the direction .. please help !!! any help would be grateful ... here's my code :

float getBallPos(Vector2 ballPos, Vector2 boxPos, float boxWide ){

    return (ballPos.x - boxPos.x)/boxWide ; 
} ---> to get the bounce direction


void OnCollisionEnter2D (Collision2D other){
    isHit = true;


    if (other.gameObject.tag == "up") {
        float x = getBallPos (transform.position, other.transform.position, other.collider.bounds.size.x);

        Vector2 dir = new Vector2 (x, 1).normalized;
        Debug.Log ("normalized : " + dir);
        GetComponent<Rigidbody2D> ().velocity = dir * 5f;

    }else if (other.gameObject.tag == "down") {
        float x = getBallPos (transform.position, other.transform.position, other.collider.bounds.size.x);

        Vector2 dir = new Vector2 (x, -1).normalized;
        Debug.Log ("normalized : " + dir);
        GetComponent<Rigidbody2D> ().velocity = dir * 5f;
    } 

}
1

1 Answers

0
votes

You should create a Physics Material 2D with a high bounciness and low friction and apply it to your collider2D (you should see the values until you feel comfortable with it.

You create them in Assets->Create->Physics2D Material.

What you are trying yo do is simulate physics and it requires a somewhat complex mathematical model.