IEnumerator not working.WaitForSeconds never continiues.

When my character dies a canvas pops up and i want the sound to stop after 2 seconds.I’ve tried IEnumerator with coroutine but it seems that it never executes.The Debug.Log (“Start”) appears in console,but the End never executes.Any ideas?
Here is the code.

public void makedead ()

{

	Destroy(gameObject);

	Instantiate (DeathFXPrefab, transform.position, transform.rotation);
	AudioSource.PlayClipAtPoint (DeathSound, transform.position);
	health = 0;

	tryAgain.enabled = true;
	Time.timeScale = 0.3f;
	StartCoroutine (soundpause (2.0f));

}

IEnumerator soundpause(float sec)
{
		Debug.Log ("Start");
		yield return new WaitForSeconds (sec);
		AudioListener.pause = true;
		Debug.Log ("End");
}

I’m sure 99% of your problem comes from…

Destroy(gameObject);

You are destroying the game object, while it runs a coroutine. That’s just make the coroutine stopped at the end of the frame when starting a coroutine.

One of the solution is put that destory function after the coroutine finished.

     {
         Instantiate (DeathFXPrefab, transform.position, transform.rotation);
         AudioSource.PlayClipAtPoint (DeathSound, transform.position);
         health = 0;
         tryAgain.enabled = true;
         Time.timeScale = 0.3f;
         StartCoroutine (soundpause (2.0f));
     }
     IEnumerator soundpause(float sec)
     {
             Debug.Log ("Start");
             yield return new WaitForSeconds (sec);
             AudioListener.pause = true;
               Destroy(gameObject);
            Debug.Log ("End");
     }

FYI, Time.timeScale affects WaitForSeconds timing. it will not really 2 seconds, but 2 / 0.3 seconds, which is much longer time.

Thanks to your answer,i finally did it!I placed the Coroutine in a different void which i called in OnTriggerEnter,and because the character had time to die again,i deactivated it’s mesh renderer,speed,and collider.here is the script:

void Awake()

{

	rb = GetComponent<Rigidbody> ();
	tryAgain.enabled = false;
	rend = GetComponent<Renderer> ();
	rend.enabled = true;
	isDead = false;
	coll.enabled = true;

}

void FixedUpdate ()

{

	transform.Translate (Input.acceleration.x * speedx * Time.deltaTime, 0, +Input.acceleration.y * speedy * Time.deltaTime);
	rb.AddForce(0,0,0);
	
}
	
public void makedead ()
{
	health = 0;
	Instantiate (DeathFXPrefab, transform.position, transform.rotation);
	AudioSource.PlayClipAtPoint (DeathSound, transform.position);
	rend.enabled = false;
	isDead = true;
	speedx = 0;
	speedy = 0;
	coll.enabled = false;
}

void Coroutine()
{
	StartCoroutine (death (2.0f));
}

IEnumerator death(float sec)
{
	Debug.Log ("Start");
	yield return new WaitForSeconds (sec);
	Destroy(gameObject);
	tryAgain.enabled = true;
	AudioListener.pause = true;
	Time.timeScale = 0.1f;
	Debug.Log ("End");
}

public void OnTriggerEnter(Collider other)
{
	if (other.tag == "Enemy") {
		Coroutine ();
		makedead ();
	}