Page 1 sur 1

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

Publié : 24 Mars 2020 14:44
par MGameur
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.

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

Publié : 24 Mars 2020 15:19
par Aelhan
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.

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

Publié : 24 Mars 2020 15:33
par MGameur
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);
    }
}

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

Publié : 24 Mars 2020 15:36
par boubouk50
Accents, caractères spéciaux, tu oublies direct.
Interdit même pour les noms de fichiers/dossiers.

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

Publié : 24 Mars 2020 15:42
par MGameur
C'est bon j'ai enlever tout les accents mais sa fait pareil.

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

Publié : 24 Mars 2020 16:38
par jmhoubre
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 ?

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

Publié : 24 Mars 2020 18:55
par MGameur
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?

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

Publié : 24 Mars 2020 19:21
par djulio74
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.

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

Publié : 24 Mars 2020 19:41
par MGameur
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)

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

Publié : 24 Mars 2020 19:52
par MGameur
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.