[Resolu] [DB-AL] Vérification du retour de plusieurs scripts sur differents objets sur appuie d'un seul bouton

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
Syp
Messages : 8
Inscription : 25 Nov 2018 14:54

[Resolu] [DB-AL] Vérification du retour de plusieurs scripts sur differents objets sur appuie d'un seul bouton

Message par Syp » 09 Déc 2018 21:14

Bonjour, je reviens vers vous dans la réalisation de mon jeu 2D, puisque j'ai de nouveau un problème... Dans un des niveaux 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 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. J'ai essayé quelques scripts pour vérifier les conditions mais je n'arrive pas vraiment à les faire fonctionner, surtout pour vérifier que la condition dans mon OnTriggerStay est vérifier. Voici les scripts dont je dispose pour l'instant :

Le premier me permet de vérifier que l'image est bien sur la bonne case(et il est fonctionnel) :

Code : Tout sélectionner

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

public class Validation1Objet : MonoBehaviour {

    public string name;

    public bool OnTriggerStay2D(Collider2D other)
    {
        if (other.name == name)
        {
            Debug.Log("objet détécté");
            return(true);
        }
		else {
			return(false);
		}
    
    }
}
Pour le second (qui pose problème) voilà où j'en suis :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class VérificationValider : MonoBehaviour {

	private int c;
	public int nombreCase;
	private Validation1Objet[] liste;

	void Start() {
		liste=FindObjectsOfType<Validation1Objet>();
	}
	
	public void LoadLevel(string LevelToLoad){
		for(int i = 0; i < liste.Length; i++){

			if (liste[i].OnTriggerStay2D()){
				c++;
			}
		if (c==nombreCase){
			SceneManager.LoadScene(LevelToLoad);
		}
		else{
			SceneManager.LoadScene("FailScene");
		}
		}
	}
}	
Le problème comme vous pouvez le voir c'est que je ne sais pas ce que je suis censé mettre en argument de mon OnTriggerStay ( puisqu'il prend normalement lui même le collider qui entre en collision avec mon objet qui porte le script ). Je ne sais pas non plus sur quel objet je suis censé mettre le second script.
J'aurais donc besoin de votre aide pour me débloquer parce que je ne vois pas comment me sortir de cette situation :/

Merci d'avance !
Dernière édition par Syp le 09 Déc 2018 23:02, édité 1 fois.

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-AL] Vérification du retour de plusieurs scripts sur differents objets sur appuie d'un seul bouton

Message par Max » 09 Déc 2018 22:01

Bonsoir,

Première chose. Pour ce qui est de ton script Validation1Objet, la fonction OnTriggerStay2D est un callback que tu n'est pas censé 'appeler'. C'est l'engine qui se charge de sa gestion, et son déclenchement est commandé uniquement lors d'une détection de collision entre deux objets 2D avec colliders. D'ailleurs définir un paramètre de retour ne sert à rien. Ce que tu peux faire par contre, c'est par exemple ajouter dans cette classe un boolean qui passera à true en cas de détection. En restant sur le code que tu as déjà écris, cela pourrait donner:

Code : Tout sélectionner

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

public class Validation1Objet : MonoBehaviour {

    public string name;
    public bool okdetection=false;

    void OnTriggerStay2D(Collider2D other)
    {
        if (other.name == name)
        {
            Debug.Log("objet détécté");
            okdetection=true;
        }   
    }
}
En suite, dans ton second code, en reprenant ce que tu as déjà écrit:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class VérificationValider : MonoBehaviour {

	private int c;
	public int nombreCase;
	private Validation1Objet[] liste;

	void Start() 
	{
		liste=FindObjectsOfType<Validation1Objet>();
	}
	
	public void LoadLevel(string LevelToLoad)
	{
		for(int i = 0; i < liste.Length; i++)
		{
			if (liste[i].okdetection)
			{
				c++;
			}
		if (c==nombreCase)
		{
			SceneManager.LoadScene(LevelToLoad);
		}
		else{
			SceneManager.LoadScene("FailScene");
		}
		}
	}
}	
Il te manque encore quelques bases concernant les composants et autres mécanismes de fonctionnement de l'engine, ainsi qu'une bonne interprétation de la doc.
Bouffer quelques tuto de bases serait grandement profitable ;)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Syp
Messages : 8
Inscription : 25 Nov 2018 14:54

Re: [DB-AL] Vérification du retour de plusieurs scripts sur differents objets sur appuie d'un seul bouton

Message par Syp » 09 Déc 2018 23:02

Effectivement, je pense que je vais retourner travailler mes bases, il semblerait que j'ai mal compris le fonctionnement des callback :gene:
En tout cas encore une fois merci beaucoup de ton aide !

Répondre

Revenir vers « (C#) CSharp »