Enemies fly everywhere when they collide with each other

I’m making a game where several enemies are chasing you down and you can defend yourself with bombs. When these bombs hit something, they explode. When colliding with an explosion, the enemies fly away with a proportionate “explosion push force”:

	// Push me back from the center of the explosion
	Vector3 fromExplosionToMe = gameObject.transform.position - objHit.transform.position;

gameObject.GetComponent<Rigidbody> ().AddForce (
	fromExplosionToMe * Bomb.ExplosionPushForce * Time.deltaTime,
	ForceMode.Impulse);

The trouble is that, sometimes, when that enemy hits ANOTHER enemy while he flies away from the explosion, that other enemy flies away at massive speeds and away from the screen:

77685-collision-problem.png

I first thought that the problem could be that I was moving the enemies towards the player with translations instead of with forces, so when a force-powered enemy collided with a translation-powered enemy it would result in awkward physics. However, after converting all the translation movements to physics, I’m still having the problem:

	// Non-physics-based movement (OLD)
	//gameObject.transform.position = 
    //      Vector3.MoveTowards(gameObject.transform.position, 
	//      player.transform.position, 
	//      MOVE_SPEED * Time.deltaTime);

	// Physics-based movement (NEW)
	gameObject.GetComponent<Rigidbody> ().MovePosition (
		Vector3.MoveTowards(gameObject.transform.position, 
		player.transform.position, 
		MOVE_SPEED * Time.deltaTime));

Has anyone had a similar experience with collisions that result from other collisons?

Thanks in advance!

One Way to prevent is using by isKinematic Property of Rigidbody Component. When isKinematic is true the objects will not be affected by physics forces. In actual physics when an object in motion in hits another object in motion/rest, it results in force on participating bodies to the acceleration of bodies which depends on the net force and direction of the acceleration depends on the mass of participating objects. This is Newton’s second law of motion. Unity physics behaves the same way.

Other Options:
Layer Based Collision Detection:-

  1. Create a Layer : Edit → Project Setting → Tags and Layer
  2. Put the Fly GameObject/Prefab in the layer you made via Inspector
  3. Goto: Edit-> Project Setting-> Physics/Physics2D(depending upon game you are making)
  4. Look for Layer Collision Matrix.
  5. Uncheck The Collision for your Layer.

77687-layerbasedcollision.png