AddForce() on RigidBody2D does not work when called in certain circumstances

Hey everyone. I’ve got a bit of a head-scratcher here. I’m making a game where rockets collide with walls and explode, and that should fling the player around.

I’m attempting to add a force to a RigidBody2D when a rocket collides with something, but the AddForce() function only works in very specific circumstances.

Here’s the important code for my Rocket class:

	void OnCollisionEnter2D (Collision2D col)
	{
		Vector2 explosiveForce = new Vector2(0, -1000);
		m_dude.rigidbody2D.AddForce(explosiveForce);
		Destroy(this.gameObject);
	}

m_dude is a reference to the player character, obviously. Now this does absolutely nothing, for some reason. However, if I for instance call the AddForce() function from inside the Player class, it works fine!

To test this, I did a quick proxy function in the Player class:

public void addForceProxy (Vector2 force)
{
	rigidbody2D.AddForce(force);
}

Again, calling this function from inside the Player class works fine, but calling it from the OnCollisionEnter2D function does absolutely nothing! It’s absolutely infuriating and perplexing so I’m dying for some insight into this.

Some notes:

  • Nothing is kinematic
  • Everything has a gravity scale of 1
  • Nothing is fixed
  • Nothing is parented
  • Everything has rigidbodies and colliders

Solved it myself, stupid me. Wasn’t setting the reference to the player from the rockets correctly.