Je crée un jeu de plateforme 2D dans lequel si le joueur tombe de la base / du sol, je veux que le joueur réapparaisse au point de contrôle le plus proche. Cependant, je veux qu'il y ait un délai entre le joueur qui tombe du sol et la réapparition. Voici la section de mon code pour atteindre cet objectif:
private void OnTriggerEnter2D(Collider2D collision)
{
Debug.Log(collision.tag);
if (collision.tag.Equals("Kill"))
{
StartCoroutine("Respawn");
}
else if(collision.tag.Equals("Checkpoint"))
{
Animator flag = collision.GetComponent<Animator>();
if (!flag.GetBool("hasCrossed"))
{
flagCounter++;
flag.SetBool("hasCrossed", true);
checkpoint = collision.gameObject.transform.position;
}
}
}
IEnumerator Respawn()
{
yield return new WaitForSeconds(respawnDelay);
transform.position = checkpoint;
}
Cela fonctionne bien pour les petits retards de réapparition comme 1 ou 2 secondes. Mais en augmentant le délai à 5 secondes, le joueur après être apparu au point de contrôle le plus proche disparaît en un instant, puis après plusieurs répétitions, le joueur réapparaît.
C'est pour le délai de 2 secondes
C'est pour le délai de 5 secondes
Comment puis-je réparer cela?
unity
coroutines
Debarun Mukherjee
la source
la source
Réponses:
Cela ne semble avoir rien à voir avec la façon dont vous configurez la coroutine. Ce qui se passe probablement, c'est que le joueur obtient une accélération suffisamment élevée en tombant pour passer devant le sol et le collisionneur de retombées. Lorsque vous déplacez la position pendant la réapparition, elle chutera toujours au même rythme. Dans votre méthode Respawn, quelque temps après votre ligne d'attente, réglez le dos de vitesse à zéro:
GetComponent<Rigidbody2D>().velocity = Vector2.zero
.la source