Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Unity] Plusieurs conditions sur un même bouton

Sujet résolu
    5 décembre 2018 à 21:55:45

    Bonjour, j'ai actuellement pour projet de réaliser un jeu en 2D et dans l'une des parties de mon jeu, le joueur doit glisser et déposer plusieurs images dans des cases prédéfinis pour pouvoir valider le niveau. S'il met chaque image dans la bonne case on passe au niveau suivant et dans le cas contraire il doit rejouer le niveau (pour faire simple). Pour l'instant ce dont je dispose est d'un script qui me permet de vérifier si une image est bien dans la bonne case. Je peux donc faire en sorte de vérifier pour chaque image une à une si elle est dans la bonne case. Néanmoins mon problème est que je ne sais pas comment faire en sorte qu'après appuie sur un bouton le jeu vérifie toutes les conditions en même temps, et si elles sont toutes vérifiées il passe à la scène suivante. En gros je vois comment vérifier les conditions une à une mais pas comment faire en sorte de vérifier qu'elles soient toutes vérifier en même temps. Je me demandais donc s'il était possible d'affecter plusieurs conditions sur un même bouton, ou bien s'il y avait une autre solutions à mon problème?

    N'hésitez pas à me demander de reformuler si je ne suis pas clair.

    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      6 décembre 2018 à 11:11:16

      Si tu as pour chaque objet "case" une fonction verifie(),il suffit que quand tu appuies sur le bouton, tu récupères tous les objets "case" et que tu testes la fonction verifie() pour chaque objet. Si un des objets renvoie false à l'execution de la fonction verifie(), le joueur n'a pas réussi.

      • Partager sur Facebook
      • Partager sur Twitter
        7 décembre 2018 à 13:14:05

        Merci de votre réponse. Néanmoins je ne vois pas comment faire en sorte justement qu'après appuie sur le bouton je puisse tester la fonction vérifie() pour chaque objet. Je sais faire en sorte de vérifier qu'une fonction renvoie "true" pour un objet, mais pour plusieurs à la fois je ne vois pas du tout comment faire. Pouvez vous détailler la démarche à suivre?
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          7 décembre 2018 à 17:50:53

          On peut par exemple utiliser la fonction FindObjectsOfType qui va récupérer tous les objets ayant le script contenant la fonction verifie(), puis un tour de boucle et c'est joué.
          • Partager sur Facebook
          • Partager sur Twitter
            7 décembre 2018 à 22:19:15

            Encore merci de votre réponse. J'ai donc essayé d'avancer et voir ce que je pouvais faire avec cette fonction et voilà où j'en suis arrivé :

            J'ai créer deux script un premier script qui est le suivant :

            using System.Collections;
            using System.Collections.Generic;
            using UnityEngine;
            
            public class Validation : MonoBehaviour {
            
                public string Tag;
            
                public bool OnTriggerStay2D(Collider2D other)
                {
                    if (other.tag == Tag)
                    {
                        return(true);
                    }
            		else {
            			return(false);
            		}
                }
            }

            Qui me permet donc de vérifier si la fonction détecte bien mon objet, et un deuxième script pour lancer la scène suivante :

            using System.Collections;
            using System.Collections.Generic;
            using UnityEngine;
            using UnityEngine.SceneManagement;
            
            public class VérificationValider : MonoBehaviour {
            
            	private int c;
            	public int nombreCase;
            	private Validation other;
            	private Validation[] liste;
            
            	void Start() {
            		liste=FindObjectsOfType<Validation>();
            	}
            	
            	public void LoadLevel(string LevelToLoad){
            		for(int i = 0; i < liste.Length; i++){
            			if (other.OnTriggerStay2D(liste[i].gameObject.GetComponent<Collider2D>())){
            				c++;
            			}
            		if (c==nombreCase){
            			SceneManager.LoadScene(LevelToLoad);
            		}
            		else{
            			SceneManager.LoadScene("FailScene");
            		}
            		}
            	}
            }	


            J'ai ensuite attaché mon premier script à mes deux cases en leur affectant un rigibody et un box collider 2D, et j'ai créer un bouton sur lequel j'ai attaché mon second script. Mais j'ai encore un problème, lorsque je clique sur le bouton je reçois un message d'erreur dans la console qui m'indique "nullreferenceexception object reference not set to an instance of an object" sur la ligne :

            if (other.OnTriggerStay2D(liste[i].gameObject.GetComponent<Collider2D>())){

            Pourtant j'ai bien vérifié mon script détecte bien mes cases et elles possèdent bien un collider du coup je n'arrive pas à comprendre d'où vient le problème et pourquoi je reçois ce message d'erreur...

            EDIT : J'ai finalement compris d'où vient mon erreur. Le OnTriggerStay2D prend normalement en argument le Collider qui entre en collision avec le collider sur lequel j'ai mis l'objet or là je mettais en argument le collider de ma case... Mais du coup je suis encore plus perdu pour faire ce que je voulais faire...

            -
            Edité par RamiElAmin 8 décembre 2018 à 23:39:16

            • Partager sur Facebook
            • Partager sur Twitter
              9 décembre 2018 à 22:03:49

              J'ai finalement réussi à résoudre mon problème, merci pour l'aide apportée !
              • Partager sur Facebook
              • Partager sur Twitter

              [Unity] Plusieurs conditions sur un même bouton

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown