Page 1 sur 1

[DB-AL]empecher le doublement instance

Publié : 11 Mai 2019 00:49
par jetonpeche
Bonjour

Depuis 2 jours je cherche comment empêche le doublement d'un objet instancier.

La 1erre partie sert a déclancher le piège

Code : Tout sélectionner

    public GameObject carapace;

    //acces au script arme_piege
    private Arme_piege newCarapace;

    // Start scene
    private void Start()
    {
        //acces script Arme_piege
        newCarapace = GameObject.Find("Arme_piege").GetComponent<Arme_piege>();

        //initialisation components
        carapace.GetComponent<SpriteRenderer>().enabled = false;
        carapace.GetComponent<Rigidbody2D>().isKinematic = true;
        carapace.GetComponent<BoxCollider2D>().isTrigger = true;
    }

    private void Update()
    {
        if (newCarapace.obj != null)
        {
            carapace = newCarapace.obj;
        }
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.name == "Robot")
        {
            //modification des components
            carapace.GetComponent<SpriteRenderer>().enabled = true;
            carapace.GetComponent<Rigidbody2D>().isKinematic = false;
            carapace.GetComponent<BoxCollider2D>().isTrigger = false;
        }
        
    }
Cette partie sert a le rearmé

Code : Tout sélectionner

//ne rien attribuer (sa ne sert a rien)
    public GameObject obj = null;

    //sencer empeche le spawn multiple (marche pas)
    public bool aSpawner = false;

    //Ajout d'une image au gameObject (soucis image)
    public Sprite image;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.name == "Robot" && obj == null && !aSpawner)
        {

            aSpawner = true;

            //creation d"une nouvelle carapace (va etre modifier)
            obj = new GameObject("caparace");

            //ajout d'un tag
            obj.tag = "piege";

            //ajout des components et parametrage
            obj.AddComponent<BoxCollider2D>();

            //atribution de l'image au gameObject
            obj.AddComponent<SpriteRenderer>().sprite = image;
            obj.AddComponent<Rigidbody2D>().isKinematic = true;

            //initilasiton suplementaire des components
            obj.transform.localScale = new Vector3(0.4846875f, 0.41f, 1);
            obj.GetComponent<Rigidbody2D>().mass = 500;
            obj.GetComponent<SpriteRenderer>().enabled = false;
            obj.GetComponent<BoxCollider2D>().isTrigger = true;

            //position de depart
            obj.transform.position = new Vector2(15, 4);
puis l'objet est détruit dans une zone.

Mais l'objet instancier se double et je n'arrive pas à en faire instancier que 1
du coup la 1ere instance prend les paramètres mais se declanche pas mais la 2e instance prend pas le sprite = image mais se déclanche correctement.

Je n'est aucune erreur dan la console.

PS: Je sait que Unity instancie autrement mais pas trop compris et se n'es pas le problème enfin je pense

Si quelqu'un sait comment faire merci beaucoup ! :-D

Re: [DB-AL]empecher le doublement instance

Publié : 11 Mai 2019 10:45
par Max
B onjour,

Déjà première question: pourquoi ne passes-tu pas par les prefabs ?
Ton second code par exemple, avec ces valeurs en dur, se réduirait à une seule ligne au lieu de 10, et les choses seraient tellement plus claires. Tu aurais juste à écrire obj = Instantiate(carapace) , "carapace" étant un prefab.

Re: [DB-AL]empecher le doublement instance

Publié : 11 Mai 2019 14:07
par jetonpeche
8| MERCI beaucoup c’était juste sa qui me bloquai MERCI :amen:

Maintenant après quelque test l’objet clone ne veut pas aller dans la variable carapace
newCarapace.obj n'est plus null donc logiquement sa devrait marcher

Code : Tout sélectionner

if (newCarapace.obj != null)
        {
            print("nouvelle attribution");
            carapace = newCarapace.obj;
        }

Re: [DB-AL]empecher le doublement instance

Publié : 13 Mai 2019 14:29
par zebilamouche
Hello,

c'est possible de nous envoyer ton nouveau code en entier ?

merci.