Я создаю 2D-платформерную игру, в которой, если игрок падает с основания / земли, я хочу, чтобы игрок возродился на ближайшей контрольной точке. Однако я хочу, чтобы между падением игрока и респауном произошла задержка. Это раздел моего кода для достижения этой цели:
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;
}
Это прекрасно работает для небольших задержек респауна, таких как 1 или 2 секунды. Но, увеличив задержку до 5 секунд, игрок после появления на ближайшей контрольной точке исчезает в одно мгновение, а затем после нескольких повторений игрок снова появляется.
Как я могу это исправить?
unity
coroutines
Дебарун Мукерджи
источник
источник
Ответы:
Похоже, это не имеет никакого отношения к настройке сопрограммы. Вероятно, происходит то, что игрок получает достаточно высокое ускорение при падении, чтобы промахнуться через землю и коллайдер радиоактивных осадков. Когда вы перемещаете позицию во время респауна, она все равно будет падать с той же скоростью. В вашем методе Respawn, где- то после ожидания линии, установите скорость обратно к нулю:
GetComponent<Rigidbody2D>().velocity = Vector2.zero
.источник