Casse-brique: Problème destruction de briques

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
Gadelan
Messages : 2
Inscription : 25 Nov 2015 19:57

Casse-brique: Problème destruction de briques

Message par Gadelan » 25 Nov 2015 20:09

Bonjour,je suis actuellement en train d'apprendre le C# sur Unity 5.2 avec un cours sur udemy.com et j'essaye de faire un casse brique, mais j'ai un problème, je n'arrive pas à détruire mes briques après un nombre défini de touches. Quand la bille touche la brique, il ne se passe rien. Voilà le programme en question :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Brick : MonoBehaviour {

	public int MaxHits;
	public int timesHit;
	public LevelManager levelManager;

	// Use this for initialization
	void Start () {

		timesHit = 0;
		levelManager = GameObject.FindObjectOfType<LevelManager> ();
	
	}
	
	// Update is called once per frame
	void Update () {

	}

	void OnCollisionEnter2D (Collider2D coll) {
		
		if (timesHit >= MaxHits) {

			Destroy (gameObject);

		}
	
	}

	void SimulateWin (){

		levelManager.loadNextLevel();

	}

}

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

Re: OnCollisionEnter2D ne marche pas (Unity5.2)

Message par boubouk50 » 26 Nov 2015 10:09

Tes briques ont bien des colliders?
Ta balle aussi?
"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

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: OnCollisionEnter2D ne marche pas (Unity5.2)

Message par Moi 1971 » 26 Nov 2015 10:39

Bonjour,
puisque tu es en phase d'apprentissage, tu devrais prendre une habitude pour déboguer : Mettre des Debug.log()
Exemple issu de la Doc Unity :

Code : Tout sélectionner

Debug.Log("Hello", gameObject);

Dans ton code, quand ça merde, il faut en mettre partout:

Et puis aussi, il faut mettre des commentaires explicites.

Moi je ferais cela pour voir ce que ça donne:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Brick : MonoBehaviour {

   public int MaxHits;
   public int timesHit;
   public LevelManager levelManager;

   // Use this for initialization
   void Start () {

      timesHit = 0;
      levelManager = GameObject.FindObjectOfType<LevelManager> ();
    
    Debug.Log("Dans le start : timesHit ="+timesHit);
    Debug.Log("Dans le start : MaxHits ="+MaxHits);
   }
   
   // Update is called once per frame
   void Update () {

   }

   void OnCollisionEnter2D (Collider2D coll) {
    Debug.Log("Dans le OnCollisionEnter2D : timesHit ="+timesHit);
    Debug.Log("Dans le OnCollisionEnter2D : MaxHits ="+MaxHits);
      if (timesHit >= MaxHits) {
	
         Destroy (gameObject);

      }
   
   }

   void SimulateWin (){
      //********** Ici c'est peut-être inutil....
      Debug.Log("Dans le SimulateWin : timesHit ="+timesHit);
      Debug.Log("Dans le SimulateWin : MaxHits ="+MaxHits);
      //********** Ici c'est peut-être inutil....
      levelManager.loadNextLevel();

   }

}

Gadelan
Messages : 2
Inscription : 25 Nov 2015 19:57

Re: OnCollisionEnter2D ne marche pas (Unity5.2)

Message par Gadelan » 26 Nov 2015 20:01

Je viens de trouver la solution, un truc tout bête, j'avais oublié de mettre timesHit++; dans le OnCollisionEnter2D. Merci quand même pour les conseils qui aideront pour mes prochains programmes.
Voilà le programme débogué, et avec commentaires et debug.log :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Brick : MonoBehaviour {

	public int MaxHits; //Nombre de fois que la bille doit toucher la brique pour la détruire
	public int timesHit; //Nombre de fois que la brique a été touchée 
	public LevelManager levelManager; //Accès à LevelManager.cs

	// Use this for initialization
	void Start () {

		timesHit = 0; //initialisation de timeHit
		levelManager = GameObject.FindObjectOfType<LevelManager> (); //levelManager = l'objet dans la scène nommé LevelManager

		Debug.Log("Dans le start : timesHit ="+timesHit);
		Debug.Log("Dans le start : MaxHits ="+MaxHits);
	
	}
	
	// Update is called once per frame
	void Update () {

	}

	void OnCollisionEnter2D (Collision2D coll) {

		timesHit++;

		Debug.Log("Dans le OnCollisionEnter2D : timesHit ="+timesHit);
		Debug.Log("Dans le OnCollisionEnter2D : MaxHits ="+MaxHits);
		
		if (timesHit == MaxHits) { //détruit la brique si elle est touché autant de fois que l'autorise MaxHits

			Destroy (gameObject); 

		}
	
	}

}

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

Re: OnCollisionEnter2D ne marche pas (Unity5.2)

Message par boubouk50 » 27 Nov 2015 10:31

La prochaine fois, mets le bon titre et une meilleure explication.
D'après ce que tu as mis, OnCollisionEnter2D ne marche pas (Unity5.2), pour moi, tu n'entrais pas dans la fonction OnCollisionEnter2D () alors que c'est le code que tu y as fourré qui n'était pas bon.
Merci, d'être plus explicite la prochaine fois.

Je change le titre également pour éviter une recherche stérile à ceux qui n'arrivent pas à faire marche les collisions.
"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

Répondre

Revenir vers « (C#) CSharp »