- Home /
Trouble creating knockback when setting velocity on RigidBody2D
I have a player and enemy game object. When the player touches the enemy the player should be knocked back.
I have the following as my horizontal movement handler:
void FixedUpdate()
{
grounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround);
float move = Input.GetAxisRaw("Horizontal");
rb2d.velocity = new Vector2(move * maxSpeed, rb2d.velocity.y);
}
As the knockback I have this method on the player class, being called by the enemy:
void PlayerHit(GameObject enemy)
{
Vector2 knockback = transform.position - enemy.transform.position;
knockback = knockback.normalized;
if(knockback.x >= 0)
rb2d.AddForce(new Vector2(knockbackForce.x, knockbackForce.y), ForceMode2D.Impulse);
else
rb2d.AddForce(new Vector2(-knockbackForce.x, knockbackForce.y), ForceMode2D.Impulse);
rb2d.AddForce(knockback, ForceMode2D.Impulse);
}
The problem is that the player gets knocked back only on the vertical axis, not on the horizontal because the velocity is being set to zero on FixedUpdate.
I tried adding a hurt
variable in PlayerHit()
and set the velocity in FixedUpdate()
only if the player is not hurt but that did not help much because I couldn't figure out how to reset the hurt
state in a proper way - if reset when grounded it would reset instantly because the player is considered grounded when being touched by an enemy.
Your answer
Follow this Question
Related Questions
(2D) Have a player not move through a block 2 Answers
Unity 2D: Properly Implementing Player Movement with a dash, jump, and knockback? 2 Answers
Unintended bounce on 2D platformer 1 Answer
Character animation jerks when moving 1 Answer
How to add a 2D explosion force to players with physics based movement? 0 Answers