- Home /
Inconsistent physics with knockback and bouncing.
Hi, I am making a game where the player can bounce from stomping on enemies and can get knocked back from them. However I sometimes get inconsistent results, the player sometimes get knocked back way too far or bounced too high. I figure its probably because my player movements involves changing my character's gravity and the addforce may have been applied multiple times so I did try adjusting the force to be weaker when the character's gravity is lower, and also add a bool to shut off the bounce temporarily and at first it seemed to work but occasionally my character still gets bounced up to the moon and I can't figure out why.
Here are some of my codes:
  private void OnCollisionEnter2D(Collision2D collision)
     {
         if (bouncing == false)
         {
             if ((collision.gameObject.CompareTag("Enemy") && facingRight == true))
             {
                 if (rb.gravityScale == 5)
                 {
                     rb.AddForce(Vector2.right * -10, ForceMode2D.Impulse);
                     rb.AddForce(Vector2.up * 5, ForceMode2D.Impulse);
                 }
                 else
                 {
                     rb.AddForce(Vector2.right * -10, ForceMode2D.Impulse);
                     rb.AddForce(Vector2.up * 3, ForceMode2D.Impulse);
                 }
              
                   Cantmove();
 
 
 
             }
             else if ((collision.gameObject.CompareTag("Enemy") && facingRight == false))
             {
                 if (rb.gravityScale == 5)
                 {
 
 
                     rb.AddForce(Vector2.right * 10, ForceMode2D.Impulse);
                     rb.AddForce(Vector2.up * 5, ForceMode2D.Impulse);
                 }
                 else
                 {
                     rb.AddForce(Vector2.right * 10, ForceMode2D.Impulse);
                     rb.AddForce(Vector2.up * 3, ForceMode2D.Impulse);
                 }
               
                 Cantmove();
 
 
             }
         }
 
 
 
 
    private void OnTriggerEnter2D(Collider2D other)
     {
         
         if (other.gameObject.tag == "Bounce" && rb2d.gravityScale ==5 && MovmentII.bouncing == false)
 
         {
             MovmentII.bouncing = true;
            
             rb2d.AddForce(transform.up * bounceforce, ForceMode2D.Impulse);
             Physics2D.IgnoreLayerCollision(7, 25, true);
             StartCoroutine(stopInvulnerable());
           
 
         }
         else  if (other.gameObject.tag == "Bounce" && rb2d.gravityScale == 1 && MovmentII.bouncing == false)
 
             {
                 MovmentII.bouncing = true;
                 
                 rb2d.AddForce(transform.up * 5, ForceMode2D.Impulse);
                 Physics2D.IgnoreLayerCollision(7, 25, true);
                 StartCoroutine(stopInvulnerable());
 
 
             }
 }
Your answer
 
 
             Follow this Question
Related Questions
Is it ok to use Linear Drag and/or Mass to make an object immovable? 2 Answers
Odd behavior when circle collider is supposed to bounce off wall 1 Answer
Triying to make a character take knockback in a parabolic motion in 2D. 0 Answers
Player Knockback Without Physics 0 Answers
How to manage Physics2D bounciness so an object does not rotate like crazy after the bounce? 2 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
               
 
			 
                