Así que he intentado hacer esto:
void Update() { if (isWalkingTowards) { if (Vector3.Distance(character.transform.position,this.transform.position)<0.7) { **StartCoroutine(Example());** Instantiate(character, new Vector3(-6, 0, -1), Quaternion.identity); Destroy(character); } } } **IEnumerator Example() { yield return new WaitForSecondsRealtime(5); Debug.Log("This function should be read before it is instantiated or destroyed"); }**¡Pero simplemente crea una instancia y destruye el objeto y luego me muestra ese mensaje!
Debería haber hecho esto:
void Update() { if (isWalkingTowards) { if (Vector3.Distance(character.transform.position,this.transform.position)<0.7) { **StartCoroutine(Example());** } } } **IEnumerator Example() { yield return new WaitForSecondsRealtime(5); Debug.Log("This function should be read before it is instantiated or destroyed"); Instantiate(character, new Vector3(-6, 0, -1), Quaternion.identity); Destroy(character); }**Aquí hay un enlace súper útil sobre varias formas de esperar en Unity: Cómo hacer que el script espere/duerme de una manera simple en Unity
Además, creo que el problema con el que se encuentra actualmente es que el código no esperará a que StartCoroutine(Exmaple()) . Tienes que poner el código que quieres ejecutar antes y después en Example .