Unity3D: Wie kann ich dieses Problem beim Respawn verzögern?

2 Antworten

Das dürfte daran liegen, weil dein Code einfach weiterläuft, nachdem die Coroutine gestartet wurde. Daher respawned der Spieler sofort, egal wie lange die Coroutine läuft. Du hast möglicherweise noch nicht ganz verstanden, wie Coroutinen funktionieren, schau dir das nochmal in Ruhe an.

Das müsste dann in diese Richtung gehen:

  public void OnCollisionEnter2D(Collision2D col)
  {
    if (col.transform.CompareTag("Player"))
    {
      StartCoroutine("RespawnCoroutine");
      col.transform.position = spawnPoint.position;
      ScoreScript.ScoreValue++;
    }
  }

  public void Respawn()
  {
     //Aktionen, die beim Respawn passieren sollen
  }

  IEnumerator RespawnCoroutine() 
  {
    // Aktionen, direkt nachdem der Spieler gestorben ist   
    yield return new WaitForSeconds(RespawnDelay);
    Respawn();
  }
}

Was das mit dem Setzen der Position sein soll, verstehe ich nicht.

Du musst dich jetzt noch um einige andere Dinge kümmern, wie zum Beispiel, was mit dem Objekt des Spielers passiert, während der tot ist und auf den Respawn wartet.

Ich denke eher, dass es daran liegt, dass die Respanwnzeit 0 ist.

Wie wäre es mit:

 public float RespawnDelay = 2;

^,^