[RESOLU][DB-AL] Détruires des ennemies

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
izanot
Messages : 11
Inscription : 19 Juil 2015 21:46

[RESOLU][DB-AL] Détruires des ennemies

Message par izanot » 28 Mars 2017 19:15

Bonjour, j'aurais besoin d'aide au niveau de mon script de vie de mes ennemies.

J'ai crée un script ennemi que je vais placer sur mes ennemies dans mon jeu.

J'ai aussi disposer un texte sur le prefab ennemy afin de savoir combien de vie il lui reste et que si sa vie descende en dessous de zéro il meurt...

Mon problème vient du fait que si j'ai plusieurs ennemy en jeu et qui ont donc le même script , si j'en blesse un les deux perdes de la vie et meurt à la fin alors que j'en ai touché q'un !!


Ma question est de savoir s'il existe une solution à ce problème afin que chaque texte et donc vies des différents ennemies soit indépendants , merci d'avance pour les réponses.
Dernière édition par izanot le 30 Mars 2017 14:02, édité 5 fois.

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: [DB-AL] Détruires des ennemies

Message par ZJP » 28 Mars 2017 20:52

izanot a écrit :Bonjour, j'aurais besoin d'aide au niveau de mon script de vie de mes ennemies.

J'ai crée un script ennemi que je vais placer sur mes ennemies dans mon jeu.

Script :

Code : Tout sélectionner

[color=#FF0000]

 public Vector3 pipeVelocity = new Vector3();
 public Vector3 pipeVelocitysaut = new Vector3();
   
    public int delay1;
    public static int trollmort;
    public TextMesh textemorttroll;
    public TextMesh textevietroll;
    public static int vietrolls;

    void Start()
    {
        vietrolls = 100;
        Destroy(gameObject, delay1);
        GetComponent<Rigidbody>().velocity = pipeVelocity;
        trollmort = PlayerPrefs.GetInt("trollmort"); ;
    }

       void OnTriggerEnter(Collider coll)
    {

        if (coll.gameObject.tag == "Balle")
        {
            Main.score += 1;         
            Main.Coins += 3;
            trollmort += 1;
            PlayerPrefs.SetInt("trollmort", trollmort);
            vietrolls -= 25;
        }

        if (coll.gameObject.tag == "ROCKBOBS")
        {

            GetComponent<Rigidbody>().velocity = pipeVelocitysaut;
            Main.Coins += 1;
            trollmort += 1;
            PlayerPrefs.SetInt("trollmort", trollmort);
        }

        if (coll.gameObject.tag == "Arrow")
        {
            GetComponent<Rigidbody>().velocity = pipeVelocitysaut;
            Main.Coins += 2;
            trollmort += 1;
            PlayerPrefs.SetInt("trollmort", trollmort);
        }



        if (coll.gameObject.tag == "perte")
        {

            if (Vague2.WAVE <= 10)
            {
                Destroy(gameObject);
                Main.HP -= 100;              
            }

            if (Vague2.WAVE > 10 && Vague2.WAVE <= 15)
            {
                Destroy(gameObject);
                Main.HP -= 120;               
            }

            if (Vague2.WAVE > 15 && Vague2.WAVE <= 20)
            {
                Destroy(gameObject);
                Main.HP -= 150;               
            }

            if (Vague2.WAVE > 20 && Vague2.WAVE <= 25)
            {
                Destroy(gameObject);
                Main.HP -= 160;         
            }

            if (Vague2.WAVE > 25 && Vague2.WAVE <= 32)
            {
                Destroy(gameObject);
                Main.HP -= 180;  
            }
        }

        if (coll.gameObject.tag == "Rock")
        {

            GetComponent<Rigidbody>().velocity = pipeVelocitysaut;

        }
    }
     


    // Update is called once per frame
    void Update()
    {
        

        if (vietrolls <= 0)
        {
            GetComponent<Rigidbody>().velocity = pipeVelocitysaut;

        }
        textevietroll.text = "HP: " + vietrolls;
        textemorttroll.text = "Kills: " + trollmort;
    }
}

}[/color]

J'ai aussi disposer un texte sur le prefab ennemy afin de savoir combien de vie il lui reste et que si sa vie descende en dessous de zéro il meurt...

Mon problème vient du fait que si j'ai plusieurs ennemy en jeu et qui ont donc le même script , si j'en blesse un les deux perdes de la vie et meurt à la fin alors que j'en ai touché q'un !!


Ma question est de savoir s'il existe une solution à ce problème afin que chaque texte et donc vies des différents ennemies soit indépendants , merci d'avance pour les réponses.
La parfaite compilation des choses à ne pas faire :

a) NEVER EVER use static until you become a great coder. :mrgreen:
b) NO GetComponent in a Update() loop. NEVER
c) USING "PlayerPrefs" LIKE THIS IS BAD..VERY
:mrgreen:

Try again..

izanot
Messages : 11
Inscription : 19 Juil 2015 21:46

Re: [DB-AL] Détruires des ennemies

Message par izanot » 30 Mars 2017 13:46

Merci de t'as réponse mais ça répond pas à ma question, enfin je crois :)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6222
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Détruires des ennemies

Message par boubouk50 » 30 Mars 2017 13:50

Masquée: static.
Une variable statique est partagée par toutes les instances, donc unique.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

izanot
Messages : 11
Inscription : 19 Juil 2015 21:46

Re: [DB-AL] Détruires des ennemies

Message par izanot » 30 Mars 2017 14:01

Enfaîte merci de t'as réponse je vais tester pour voir si c'est plus pratique mais je viens de trouver une solution sur un asset unity ou il y a un EnemyHealth et en faisant comme eux c'est à dire déclarer 2 variables pour la vie tel que :

Code : Tout sélectionner


 public int startingHealth = 100;           
    public int currentHealth;
    void Awake()
    {

        currentHealth = startingHealth;
    }
}
Et en gardant ma public static pour afficher la vie ça marche ^^

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6222
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [RESOLU][DB-AL] Détruires des ennemies

Message par boubouk50 » 30 Mars 2017 14:25

Ça c’est toi qui voit, dans ce nouveau code, la variable n'est pas statique donc propre à chaque script. C’est juste un static à enlever du code...
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Verrouillé

Revenir vers « (Js) Javascript »