Юнити как сделать задержку?

Столкнулся с проблемой. Звук не успевает проигрываться перед удалением объектов. Как можно сделать задержку чтобы не поломать основную роботу кода? Этот код прикреплен к префабу, который появляется во время игры. И если они сталкиваются то из двух объектов должен появится один новый. метод с проигрыванием звука я сделаю сам.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class colTag : MonoBehaviour
{
    private bool hasExecuted = false;

    public GameObject Olivca;

    public void MarkAsExecuted()
    {
        hasExecuted = true;
    }

    public void OnCollisionEnter2D(Collision2D collision)
    {
        if (!hasExecuted && collision.gameObject.CompareTag("Goroshec"))
        {
            //метод играть звук
            //задержка
            collision.gameObject.GetComponent<colTag>().MarkAsExecuted();
            Vector2 eggPosition1 = collision.gameObject.transform.position;
            Vector2 eggPosition2 = transform.position;
            Destroy(collision.gameObject);
            Destroy(gameObject);
            Vector2 centerPosition = (eggPosition1 + eggPosition2) / 2;
            Instantiate(Olivca, centerPosition, Quaternion.identity);
        }
    }
}

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

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

Я надеюсь это будет работать

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class colTag : MonoBehaviour
{
    private bool hasExecuted = false;

    public GameObject Olivca;

     IEnumerator PlaySoundAndWait()
    {
      //метод играть звук 
      yield return new WaitForSeconds(/*время задержки в секундах*/);
      collision.gameObject.GetComponent<colTag>().MarkAsExecuted();
      Vector2 eggPosition1 = collision.gameObject.transform.position;
      Vector2 eggPosition2 = transform.position;
      Destroy(collision.gameObject);
      Destroy(gameObject);
      Vector2 centerPosition = (eggPosition1 + eggPosition2) / 2;
      Instantiate(Olivca, centerPosition, Quaternion.identity);
        
    }



public void MarkAsExecuted()
    {
        hasExecuted = true;
    }

    public void OnCollisionEnter2D(Collision2D collision)
    {
        if (!hasExecuted && collision.gameObject.CompareTag("Goroshec"))
        {
             StartCoroutine(PlaySoundAndWait());
          
        }
    }
}
→ Ссылка