En este momento estás viendo destruir un gameobject específico después de un período de tiempo en unity

 – Unity

destruir un gameobject específico después de un período de tiempo en unity – Unity

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

Deja una respuesta