[DB-AL] Comment faire plusieur type de dégat!!!

Pour les scripts écrits en C#
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
Répondre
MGameur
Messages : 15
Inscription : 22 Mars 2020 21:23

[DB-AL] Comment faire plusieur type de dégat!!!

Message par MGameur » 24 Mars 2020 14:44

Bonjour,

Je suis en train de faire un jeu et j'ai des problème sur les dégat. Voici le code:

Code : Tout sélectionner

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

public class Coeur_1 : MonoBehaviour
{
	public Image Coeur;
	public float life;
    public float maxlife;
    public Animator animator;

    private float timer = 0.0f;
    private float timer2 = 0.0f;
    private float waitTime = 0.5f;
    private float waitTime2 = 0.0f;
    private bool degat = false;
    private bool degat2 = false;
    // Start is called before the first frame update
    void Start()
    {
        life = maxlife;
    }

    // Update is called once per frame
    void Update()
    {
        Coeur.fillAmount = life / maxlife;

        timer += Time.deltaTime;
        if(timer2 > waitTime2)
        {
            timer2 = 0.0f;
            if (degat2)
            {
                StartCoroutine(dégat_50());
            }  
        }

        if(timer > waitTime)
        {
            timer = 0.0f;
            if (degat)
            {
                StartCoroutine(dégat_100());
            }  
        }
    }
    

    void OnTriggerEnter2D(Collider2D col){
        if(col.gameObject.CompareTag("Obstacle3"))
        {
			degat2 = true; 
		}

        if(col.gameObject.CompareTag("Obstacle2"))
        {
			degat = true; 
		}
	}

    void OnTriggerExit2D(Collider2D col){
        if(col.gameObject.CompareTag("Obstacle3"))
        {
			degat2 = false; 
		}

		if(col.gameObject.CompareTag("Obstacle2"))
        {
			degat = false;
            
		}
	}

    IEnumerator dégat_100()
    {
        animator.SetBool("dégat", true);
        life = life - 100;
        yield return new WaitForSeconds (0.5f);
        animator.SetBool("dégat", false);
    }
  
    IEnumerator dégat_50()
    {
        animator.SetBool("dégat", true);
        life = life - 50;
        yield return new WaitForSeconds (0.5f);
        animator.SetBool("dégat", false);
    }
}
unity me dit qu'il n'y a pas d'erreur, le problème n'est pas là, le problème c'est que l'obstacle 3 devrai faire des dégat alors qu'il n'en fait pas. J'ai beau changer le waitTime2 mais sa ne change rien, comme c'est un adversaire qui est petit je change donc sa taille ( avec les collision) mais cela ne change rien. L'obstacle deux fonctionne très bien, il m'enlève 100 de vie et fait l’animation de dégat (pour le jouer) mais l'obstacle 3 ne fait rien de tout ça même pas l’animation. Le scrip est placer sur le jouer.

Pouvez vous m'aider a faire en sorte qu'il y est plusieurs type de dégat.
Merci d'avance.

Aelhan
Messages : 65
Inscription : 11 Déc 2019 23:00

Re: [DB-AL] Comment faire plusieur type de dégat!!!

Message par Aelhan » 24 Mars 2020 15:19

Bonjour,

Étant donné que ton code est strictement identique pour tes deux obstacles, le seul point qui semble bloquer serait que tu n'aies pas mis le bon tag à ton obstacle3.
Aussi, fais attention, tu as ton bool "degat", sans accent et dans ta coroutine tu genères un bool "dégat" avec accent. Si tu veux lier les deux, ça ne marchera pas.
Celui qui pose une question risque cinq minutes d'avoir l'air bête.
Celui qui ne pose pas de question restera bête toute sa vie.

MGameur
Messages : 15
Inscription : 22 Mars 2020 21:23

Re: [DB-AL] Comment faire plusieur type de dégat!!!

Message par MGameur » 24 Mars 2020 15:33

Aelhan j'ai enlevé les accent du coroutine (sauf dans le animator.SetBool vue que c'est pour l'animation) et le tag obstacle3 et bien mis et il n'y a pas de faute au caractère près mais sa ne marche toujours pas.

Code : Tout sélectionner

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

public class Coeur_1 : MonoBehaviour
{
	public Image Coeur;
	public float life;
    public float maxlife;
    public Animator animator;

    private float timer = 0.0f;
    private float timer2 = 0.0f;
    private float waitTime = 0.5f;
    private float waitTime2 = 0.0f;
    private bool degat = false;
    private bool degat2 = false;
    // Start is called before the first frame update
    void Start()
    {
        life = maxlife;
    }

    // Update is called once per frame
    void Update()
    {
        Coeur.fillAmount = life / maxlife;

        timer += Time.deltaTime;
        if(timer2 > waitTime2)
        {
            timer2 = 0.0f;
            if (degat2)
            {
                StartCoroutine(degat_50());
            }  
        }

        if(timer > waitTime)
        {
            timer = 0.0f;
            if (degat)
            {
                StartCoroutine(degat_100());
            }  
        }
    }
    

    void OnTriggerEnter2D(Collider2D col){
        if(col.gameObject.CompareTag("Obstacle3"))
        {
			degat2 = true; 
		}

        if(col.gameObject.CompareTag("Obstacle2"))
        {
			degat = true; 
		}
	}

    void OnTriggerExit2D(Collider2D col){
        if(col.gameObject.CompareTag("Obstacle3"))
        {
			degat2 = false; 
		}

		if(col.gameObject.CompareTag("Obstacle2"))
        {
			degat = false;
            
		}
	}

    IEnumerator degat_100()
    {
        animator.SetBool("dégat", true);
        life = life - 100;
        yield return new WaitForSeconds (0.5f);
        animator.SetBool("dégat", false);
    }
  
    IEnumerator degat_50()
    {
        animator.SetBool("dégat", true);
        life = life - 50;
        yield return new WaitForSeconds (0.5f);
        animator.SetBool("dégat", false);
    }
}

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5292
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: [DB-AL] Comment faire plusieur type de dégat!!!

Message par boubouk50 » 24 Mars 2020 15:36

Accents, caractères spéciaux, tu oublies direct.
Interdit même pour les noms de fichiers/dossiers.
"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

MGameur
Messages : 15
Inscription : 22 Mars 2020 21:23

Re: [DB-AL] Comment faire plusieur type de dégat!!!

Message par MGameur » 24 Mars 2020 15:42

C'est bon j'ai enlever tout les accents mais sa fait pareil.

jmhoubre
Messages : 113
Inscription : 05 Oct 2019 22:05

Re: [DB-AL] Comment faire plusieur type de dégat!!!

Message par jmhoubre » 24 Mars 2020 16:38

Bonjour,
tu devrais mettre dans OnTriggerEnter2D (avant les if) un petit Debug.Log(col.gameObject.name); et vérifier que ton obstacle 3 s'affiche bien dans la console.
Si ce n'est pas le cas, ton obstacle 3 a-t-il un colider ? Avec la case trigger cochée ?

MGameur
Messages : 15
Inscription : 22 Mars 2020 21:23

Re: [DB-AL] Comment faire plusieur type de dégat!!!

Message par MGameur » 24 Mars 2020 18:55

jmhoubre mon obstacle3 a un colider avec la case triger de caucher.
J'ai mie le Debug.Log(col.gameObject.name) et il me marque ceci dans la console
attaque haut
UnityEngine.Debug:Log(Object)
Coeur_1:OnTriggerEnter2D(Collider2D) (at Assets/Script/Personnage/Coeur_1.cs:52)
(pour l'annimation de l'attaque en haut (obstacle3))
Mini Cyborg ennemi
UnityEngine.Debug:Log(Object)
Coeur_1:OnTriggerEnter2D(Collider2D) (at Assets/Script/Personnage/Coeur_1.cs:52)
(nom de l'obstacle 3 (celui qui beug))
attaque devant
UnityEngine.Debug:Log(Object)
Coeur_1:OnTriggerEnter2D(Collider2D) (at Assets/Script/Personnage/Coeur_1.cs:52)
(pour l’animation de l'attaque devant(obstacle3))
attaque arrière
UnityEngine.Debug:Log(Object)
Coeur_1:OnTriggerEnter2D(Collider2D) (at Assets/Script/Personnage/Coeur_1.cs:52)
(pour l’animation de l'attaque arrière(obstacle3))
attaque devant
UnityEngine.Debug:Log(Object)
Coeur_1:OnTriggerEnter2D(Collider2D) (at Assets/Script/Personnage/Coeur_1.cs:52)
(pour l’animation de l'attaque devant(obstacle2))
cyborg ennemi
UnityEngine.Debug:Log(Object)
Coeur_1:OnTriggerEnter2D(Collider2D) (at Assets/Script/Personnage/Coeur_1.cs:52)
(nom de l’obstacle2)
attaque haut
UnityEngine.Debug:Log(Object)
Coeur_1:OnTriggerEnter2D(Collider2D) (at Assets/Script/Personnage/Coeur_1.cs:52)
(pour l’animation de l'attaque haut(obstacle2))
attaque arrière
UnityEngine.Debug:Log(Object)
Coeur_1:OnTriggerEnter2D(Collider2D) (at Assets/Script/Personnage/Coeur_1.cs:52)
(pour l’animation de l'attaque arrière(obstacle2))

Cela signifie a quoi et qu'est-ce que je doit faire de ces information?

djulio74
Messages : 536
Inscription : 19 Déc 2009 22:55
Contact :

Re: [DB-AL] Comment faire plusieur type de dégat!!!

Message par djulio74 » 24 Mars 2020 19:21

En lisant ton code, un question :
pourquoi tu n'incrémente jamais ton timer2? à mon avis le soucis viens de la je pense, jamais ton timer2 n'est > a Waittime2 étant donné qu'il est toujours a 0.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

MGameur
Messages : 15
Inscription : 22 Mars 2020 21:23

Re: [DB-AL] Comment faire plusieur type de dégat!!!

Message par MGameur » 24 Mars 2020 19:41

djulio74 j'ai dit que meme si que kje le changer par exemple en le mettant a 0.1f il ne fessait rien et vue qu'il est a 0.0f il devrai me faire directement des dégat si je rentre sur l'obstacle3 (avec l'obstacle2 c'est ce qui se produit(donc il devrait m'enlever toute ma vie)

MGameur
Messages : 15
Inscription : 22 Mars 2020 21:23

Re: [DB-AL] Comment faire plusieur type de dégat!!!

Message par MGameur » 24 Mars 2020 19:52

j'ai touver c'est juste que j'avais oublier le

Code : Tout sélectionner

timer2 += Time.deltaTime;
Merci djulio74 même si qu'au début je n'avait pas compris ta phrase.

Répondre

Revenir vers « (C#) CSharp »