What happens when you Instantiate a GameObject?

I’m continuing work on my 2d platformer. However, In my Respawn script I call to Instantiate a new HeroGuy. When you plunge to your death on the cliff, he respawns successfully, his lives variable ticks down successfully, but he falls through the floor. This time, he doesn’t even trigger my Destroying Collider! He’s equipped with a RigidBody, a Box Collider, and a circle collider, and even inspecting the clone while the application is paused shows the this new (Clone) has all of the components of the old HeroGuy, so what gives?

This is my current Respawn code.
using UnityEngine;
using System.Collections;

public class DestroyOnContact : MonoBehaviour {

	public GameController gc;
	public GameObject heroGuy;
	public bool respawn;
	public Vector2 spawnLocation = new Vector2(0, 1);

	void OnTriggerEnter2D(Collider2D other) {
		if (other.gameObject.layer == 9) { //This is the player layer
			Debug.Log ("Hey, it's HeroGuy!");
			gc.lives = gc.lives - 1;
			respawn = true;
			Debug.Log ("Hey let's get him out of the way");
			Destroy (other.gameObject);
		if (respawn) {
			Instantiate(heroGuy, spawnLocation, Quaternion.identity);
			respawn = false;


Thank you for your time!

Is it possible the spawnLocation is such that the instantiated object is placed partially through the floor. In which case the physics engine will cause it to fall through. Perhaps try adjusting it, say Vector2(0.10) until a value that places it above the floor.