не могу дать время через которое выполняется функция

у меня проблема в том что я не могу дать время через которое выполняется функция. Начнём с начала: я хотел что бы при смерти игрока, высвечивался "game over" через не большой промежуток времени, но по каким то не ведомым причинам ни "Coroutine" ни "Invoke" не хотят работать в "void OnTriggerEnter2D", а в игре просто не появляется "game over". Я неделю пытался всеми возможными методами заставить работать эту задержку перед выполнением, но угробил время в пустую. код:

void OnTriggerEnter2D(Collider2D other)
{
    if (other.CompareTag("damage"))
    {

        StartCoroutine(wait());


        IEnumerator wait()
        {
            yield return new WaitForSeconds(2f);
            
            game_over.SetActive(true);
        }
        
        Destroy(gameObject);
        
    }
}

кто найдёт решение моей проблемы буду очень благодарен)


Ответы (1 шт):

Автор решения: aepot

Вы уничтожаете объект раньше времени, очевидно же

void OnTriggerEnter2D(Collider2D other)
{
    if (other.CompareTag("damage"))
    {
        StartCoroutine(wait());

        IEnumerator wait()
        {
            yield return new WaitForSeconds(2f);
            
            game_over.SetActive(true);
            Destroy(gameObject);
        }
    }
}

На уничтоженном объекте скрипты не выполняются, корутины в том числе.

→ Ссылка