Le gameobject instancié ne se détruit pas si le destroy est dans une coroutine

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
le44
Messages : 16
Inscription : 21 Oct 2020 15:15

Le gameobject instancié ne se détruit pas si le destroy est dans une coroutine

Message par le44 » 21 Déc 2020 17:58

Salut!
J'ai un problème ,j'ai un script de lancement de grenade 2D et quand je la lance et quelle touche un ennemi,et ne se détruit pas alors que jai bien mit destroy (la greande est correctement instanciée en prefab)et quand je le met hors d'une coroutine il se détruit voici le code:

Code : Tout sélectionner

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

public class explosion: MonoBehaviour
{
    public Animator grenade;//ici c'est l'animator que j'ai assigné dans l'inspector des prefab


    void Update()
    {
        if (Input.GetMouseButtonUp(0) && GameObject.Find("core").GetComponent<cor>().canBeginGame)
        {
            transform.position = Vector3.MoveTowards(transform.position, Input.mousePosition, 10 * Time.deltaTime);
        }
    }
    void OnTriggerEnter2D(Collider2D col)
    {
        if (col.gameObject.name == "ENEMIE_0")//Ca c'est quand sa touche un ennemi
        {
        grenade.SetBool("exploser", true);
        Debug.Log("EXPLOSION!",this);
        transform.localScale = Vector3.one * 5;
        Destroy(this.gameObject);
            StartCoroutine(petage());//quand je met mon script dans une coroutine le prefab instancié il se détruit pas alors que si je le met hors dune coroutine il se detruit immédiattemnt
        }
    }
    IEnumerator petage()
    {
        grenade.SetBool("exploser", true);
        Debug.Log("EXPLOSION!", this);
        transform.localScale = Vector3.one * 5;
        yield return new WaitForSeconds(1.95f);
        Destroy(this.gameObject);
    }
}
je suis débutant donc soyez indulgent ,votre aide ne pourra que m'améliorer
MERCI D'AVNCE!

Avatar de l’utilisateur
Max
Messages : 8147
Inscription : 30 Juil 2011 13:57
Contact :

Re: Le gameobject instancié ne se détruit pas si le destroy est dans une coroutine

Message par Max » 21 Déc 2020 18:36

Bonsoir,

première question, est-ce que tu rentre bien dans ta fonction ONTriggerEnter2D() ? Et si oui, la condition col.gameObject.name == "ENEMIE_0" se vérifie-t-elle bien ?
(ne pas hésiter à placer des Debug.Log dans les différente parties pour s'en assurer)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

le44
Messages : 16
Inscription : 21 Oct 2020 15:15

Re: Le gameobject instancié ne se détruit pas si le destroy est dans une coroutine

Message par le44 » 21 Déc 2020 20:13

Salut!
Merci max tu m'aide beaucoup désolé si j'ai beaucoup de problème :/
Oui jai bien verifié et le print (au lieu de Debug.Log) sa marche!
Merci d'avance!

Avatar de l’utilisateur
Max
Messages : 8147
Inscription : 30 Juil 2011 13:57
Contact :

Re: Le gameobject instancié ne se détruit pas si le destroy est dans une coroutine

Message par Max » 22 Déc 2020 11:08

Bonjour,

je ne comprends pas trop le Destroy(this.gameObject); dans la partie OnTriggerEnter2D().
Car là tu détruis l'objet et bien entendu la coroutine ne exécutera pas.
Le Destroy(this.gameObject); en fin de coroutine semble bien plus approprié.

Après, plutôt que de faire appel à une coroutine juste pour temporiser la destruction de ton objet, il te suffit de passer par un Destroy(Object obj, float t = 0.0F); , où 't' représente un délais avant sa destruction.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

le44
Messages : 16
Inscription : 21 Oct 2020 15:15

Re: Le gameobject instancié ne se détruit pas si le destroy est dans une coroutine

Message par le44 » 23 Déc 2020 13:35

Salut!
En fait le GameObject est instancié dans un script externe le voici (le bout qui instancie):

Code : Tout sélectionner

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

public class attack : MonoBehaviour
{
    public bool collided = false;
    public Animator enemi;
    public float pv1 = 100;
    public float pv2 = 30F;
    public int Isp1 = 0;
    public GameObject balle;
    public GameObject enemo;
    public int qui;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.name == "test")
        {
            collided = true;
            enemi.SetBool("tir", true);
            Isp1 = 1;
           

            if (enemi.GetCurrentAnimatorStateInfo(0).IsName("tir") && enemi.GetCurrentAnimatorStateInfo(0).normalizedTime > 1 && Isp1 == 1)
            {
                StartCoroutine(spawn());//voici la coroutine elle marche car le print marche

            }
            else if (collision.gameObject.name == "2p")
            {
                collided = true;
                enemi.SetBool("tir", true);
                if (enemi.GetCurrentAnimatorStateInfo(0).IsName("tir") && enemi.GetCurrentAnimatorStateInfo(0).normalizedTime > 1 && Isp1 == 2)
                {


                }
            }
        }
    }


    private void OnTriggerExit2D(Collider2D collision)
    {
        collided = false;
        Isp1 = 0;
        enemi.SetBool("tir", false);
    }
   
    
    IEnumerator spawn()
    {
        while (collided == false)
        {
            print("commnad prompt");
            Instantiate(balle, enemo.transform.position, Quaternion.identity);
            yield return new WaitForSeconds(0.5f);
        }
    }

Voila c'est tout merci!

Avatar de l’utilisateur
Max
Messages : 8147
Inscription : 30 Juil 2011 13:57
Contact :

Re: Le gameobject instancié ne se détruit pas si le destroy est dans une coroutine

Message par Max » 24 Déc 2020 12:06

Hello,
le44 a écrit :
23 Déc 2020 13:35
En fait le GameObject est instancié dans un script externe le voici (le bout qui instancie):
je t'avoue ne pas trop comprendre cette réponse par rapport à mon message au dessus à propos de ton script explosion.cs et des soucis de Destroy.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

le44
Messages : 16
Inscription : 21 Oct 2020 15:15

Re: Le gameobject instancié ne se détruit pas si le destroy est dans une coroutine

Message par le44 » 24 Déc 2020 17:23

En fait c'est la partie du script qui instancie le gameobject car les autres elements du script ne soccupent pas de ca
J'espere t'avoir aidé

Répondre

Revenir vers « Scripting »