Así sin probarlo, yo como lo programaría sería así:
Código:
public GameObject Explosion; //(El prefrab con la explosión)
private GameObject[] pajaros;
private GameObject objeto; //(Este lo estoy usando como último recurso para hacer pruebas, originalmente no lo utilizaba).
void Start () {
pajaros = GameObject.FindGameObjectsWithTag("Pajaro");
}
void OnTriggerEnter2D(Collider2D other)
{
foreach (GameObject pajaro in pajaros)
{
objeto= (GameObject) Instantiate(Explosion, new Vector3(pajaro.transform.position.x, pajaro.transform.position.y, -1), pajaro.transform.rotation); //-1 simplemente para asegurarme de que la explosión aparezca por delante de los pájaros
objeto.transform.localScale = new Vector3(2, 2, 0); //No lo necesito, pero estoy haciendo pruebas al no funcionarme. Originalmente lanzaba el Instantitate sin usar el GameObject "objeto"
StartCoroutine(destruyePajaro(pajaro)); //La rutina que se carga los pájaros tras la explosión, esta se lanza sin problemas
}
}
Ya no sé lo que hace la corrutina, pero no recomiendo usarlas SALVO para tareas que ocurren en diferentes frames (generalmente para esperar tiempos, hacer una animación "a mano", y siempre desactivando el propio script en la corrutina para que no ejecute código, la activas al terminar la corrutina o llamando a un método del propio script; sí, puedes ejecutar métodos del script aunque este esté deshabilitado, muy útil para usar con OnTriggerEnter).
Según he entendido, la filosofía de Unity te pide que sea el propio pájaro el que genere la explosión al morir, pero en mi experiencia, lo mejor que puedes hacer es que este script de control llame a un método del pájaro que se llame "morir" o algo así, y que haga dos cosas: instanciar la explosión, y autodestruirse (no uses el método OnDestroy, generaría la explosión al salir de la escena).
Usar grandes códigos que controlan varios elementos parece que va en contra de la filosofía de Unity, que es lo opuesto a lo que nos enseñan en programación, pero te tienes que hacer a la idea que lo que controla el juego es el editor gráfico, y los scripts son pequeñas instrucciones para que los objetos actúen por su cuenta. Otra cosa es que quieras mantener tu estilo, cada uno lo hace como le resulta más cómodo.
Marcadores