destruir un gameobject específico después de un período de tiempo en unity
– UnityAssets3Free
bienvenido , me llamo kein y en esta ocasion os traigo
nueva pregunta curiosa
Estoy un poco atascado con mi guión ahora. Cuando un gameObject, con mi script adjunto, tiene un evento desencadenante con un gameObject específico, quiero destruir el gameObject específico después de un período de tiempo.
Así que llegué a esto:
void OnTriggerEnter ( Collider other)
if (other.gameObject.tag == "leaf1")
StartCoroutine (LeafDestruction ());
IEnumerator LeafDestruction()
yield return new WaitForSeconds (5);
Destroy (gameObject);
Sé que es un error de novato, pero creo que me perdí algo, porque cuando ejecuto este script, destruye el gameObject con el script adjunto, no el gameObject específico (con etiquetas).
¿Cómo puedo arreglar esto?
3 respuestas 3
Una solución más simple es usar el segundo parámetro opcional del Para destruir método:
El objeto obj
se destruye inmediatamente después de la corriente Update
ciclo, o t
segundos a partir de ahora si se especifica un tiempo.
Dados los parámetros oficiales:
parámetros
obj |
El objeto a destruir. |
t |
La cantidad opcional de tiempo de demora antes de destruir el objeto. |
Puedes ajustar tu if
declaración para:
if (other.gameObject.tag == "leaf1")
Destroy(other.gameObject, 5.0f);
Básicamente, debe decirle a su rutina que debe destruir el other.gameObject
y no el gameObject que ejecuta este script.
Entonces, lo que podría hacer es agregar un parámetro a su corrutina, pasando el gameObject para que realmente se destruya:
void OnTriggerEnter ( Collider other)
if (other.gameObject.tag == "leaf1")
IEnumerator coroutine = LeafDestruction(other.gameObject);
StartCoroutine (coroutine);
IEnumerator LeafDestruction(GameObject toDestroy)
yield return new WaitForSeconds (5);
Destroy (toDestroy);
Destruiste el objeto en lugar de la hoja. El gameObject es un alias de this.gameObject
, que es el objeto del juego al que se adjunta este componente de secuencia de comandos. Observación MonoBehaviour
hereda de Behaviour
y Behaviour
hereda de Component
.
GameObject leafObject;
void OnTriggerEnter ( Collider other)
if (other.gameObject.tag == "leaf1")
leafObject = other.gameObject;
StartCoroutine (LeafDestruction ());
IEnumerator LeafDestruction()
yield return new WaitForSeconds (5);
Destroy (leafObject);
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
sin mas,espero que te halla servido