box collider "soupe"

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
Avatar de l’utilisateur
ZJP
Messages : 5745
Inscription : 15 Déc 2009 06:00

Re: box collider "soupe"

Message par ZJP » 17 Jan 2017 15:05

ber_trand07 a écrit :c'est deja fait. Je programme depuis 2-3 ans sur Unity....
et les fondamentaux ne sont pas acquis?!!! :shock:


Image

ber_trand07
Messages : 36
Inscription : 04 Sep 2016 17:35

Re: box collider "soupe"

Message par ber_trand07 » 17 Jan 2017 16:04

Okay merci excusez moi d'avoir posé ma question !

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

Re: box collider "soupe"

Message par boubouk50 » 17 Jan 2017 16:26

On t'a donné la doc et dit comment procéder. On est allé chercher plus loin pour comprendre pourquoi tu n'y arrives pas. On te donne notre meilleur conseil possible.
Le 'problème' n'est pas que tu poses une question simple, mais qu'après tout ce temps, tu ne comprennes pas comment ça marche. Je me suis mis à Unity il y a plus de 3 ans et une fois que j'ai pigé la POO, tout s'est éclairci. Ça m'a pris 2 semaines si ce n'est pas moins.
Si tu veux, on peut te tenir la main pour ton code, mais tu seras bloqué au prochain obstacle simple, ce qui n'est pas dans ton intérêt, sauf si tu veux galérer 10 ans voire plus.

Comprendre le fonctionnement d'un booléen est très simple, c'est un interrupteur OUI ou NON:
Si tous les interrupteurs sont sur OUI alors j'allume sinon c'est éteint. (Ce qui est différent de: j'éteins)
Il ne faut juste pas oublier d'éteindre pour pouvoir rallumer.

Dans ton cas, lorsque tu 'allumes', tu laisses allumé. Eteins une fois que tu as fini ce que tu étais venu faire et tu pourras recommencer le processus. Ce qui ce traduit par remettre les booléens à false.
"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

ber_trand07
Messages : 36
Inscription : 04 Sep 2016 17:35

Re: box collider "soupe"

Message par ber_trand07 » 17 Jan 2017 16:31

Oui c'est sur. je vais regarder du coté du POO merci

je connais le principe des bool int float et string mais c'est plus pour détruire mes objets (poireaux, carottes). Tu as dit qu'il faut récupérer cette objet, mais j'utilise quel principe pour les récupérer ? car si je détruit en cherchant le gameObject qui à le tag "poireaux" ca va tout me les détruires. C'est la que je ne comprend pas (pour vous c'est tout simple mais je suis vraiment bloqué ici)...

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

Re: box collider "soupe"

Message par boubouk50 » 17 Jan 2017 16:51

Ton code de départ:

Code : Tout sélectionner

public GameObject Soupe; 
public Transform transform;
public bool Carotte = false;
public bool Poireau = false;


void OnTriggerEnter (Collider col) 
{
    if (col.gameObject.tag == "Carotte") 
    {
        Carotte = true;
    }

    if (col.gameObject.tag == "Poireau")
    {
        Poireau = true;
    }

    if (Poireau == true && Carotte == true) 
    {
        Instantiate (Soupe, transform.position, Quaternion.identity);
        //Destroy Carotte et poireau
    }

}
Reprenons depuis le départ. Voici ton code. Tu as tout ce dont tu as besoin dedans.
Lorsqu'un gameObject rentre en collision avec ta soupe, la fonction OnTriggerEnter () est appelée. Ce Collider est récupéré par cette fonction pour l'identifier: Collider col. Il s'agit du Collider de ton gameObject donc du GameObject entré en collision. Celui que tu chercheras à détruire par la suite.
Comme tu as besoin d'attendre que toutes les conditions soient réunies, il te faut donc le garder dans un coin, en le stockant dans une variable.
Ensuite, tu attends que la seconde condition soit remplie et à ce moment là tu pourras détruire les gameObjects de ton choix.

Code : Tout sélectionner

public GameObject soupe;  //Par convention les variables commencent par une minuscule et les fonction par une Majuscule.
//public Transform transform; <-- Qu'as tu essayé de faire? transfom est le transform de this, le gameObject qui possède ce script donc tu ne peux pas normalement utiliser ce nom de variable.
private bool carotte = false; //As-tu besoin de les voir dans l'inspector? ils pourraient être private pour réduire le scope
private bool poireau = false;
private gameObject stockGO; //le GameObject qui va être stocké

void OnTriggerEnter (Collider col) 
{
	if (col.gameObject.tag == "Carotte") 
	{
		carotte = true;
		if (!poireau) //vérifier que le poireau n'a pas encore été stocké
			stockGo = col.gameObject;
	}
	else 
	{
		if (col.gameObject.tag == "Poireau") 
		{
			poireau = true;
			if (!carotte) //vérifier que la carotte n'a pas encore été stocké
				stockGo = col.gameObject;
		}
  	}
	
	if (poireau && carotte) //Pas besoin de comparer un booléen, il est lui même le résultat
	{
		//Remettre les booléens à false, puisque la soupe a été créée. Sinon, tu créeras une soupe à chaque collision
		poireau = false;
		carotte = false;
		Instantiate (soupe, transform.position, Quaternion.identity);
		//Destroy Carotte et poireau
		Destroy (stockGo); //Détruire le premier élément stocké
		Destroy (col.gameObject); //Détruire le second élément
	}
}
Code fait de tête, il se peut que des erreurs arrivent mais l'algo est là.
"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

ber_trand07
Messages : 36
Inscription : 04 Sep 2016 17:35

Re: box collider "soupe"

Message par ber_trand07 » 17 Jan 2017 16:59

Ah oui j'ai compris
c'étais simplement stockGo = col.gameObject; que je ne savais pas comment mettre en place mais j'ai compris merci !

public Transform transform;
est la pour pouvoir positionner la soupe à l'endroit voulus sur ce transform ^^'

Je n'ai pas compris par contre "ils pourraient être private pour réduire le scope" c'est quoi le scope ? (peut être une question bête...)

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

Re: box collider "soupe"

Message par boubouk50 » 17 Jan 2017 17:10

ber_trand07 a écrit :Ah oui j'ai compris
c'étais simplement stockGo = col.gameObject; que je ne savais pas comment mettre en place mais j'ai compris merci !
Tu l'utilises toi même dans ta condition col.gameObject.tag...
public Transform transform;
est la pour pouvoir positionner la soupe à l'endroit voulus sur ce transform ^^'
J'ai bien compris ce que ça fait, mais j'ai pas compris pourquoi tu fais ça. Qui est ce transform? Comme indiqué dans le commentaire, ce nom de variable est déjà utilisé et réservé, tu ne devrais pas l'utiliser (d'ailleurs ça gueule pas en console? étrange...) S'il s'agit du même gameObject que celui qui possède ce script alors il est inutile.
Je n'ai pas compris par contre "ils pourraient être private pour réduire le scope" c'est quoi le scope ? (peut être une question bête...)
C'est la portée des variables. Les variables publiques sont accessibles a tout le monde alors que les privées le sont seulement par la classe.
"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

ber_trand07
Messages : 36
Inscription : 04 Sep 2016 17:35

Re: box collider "soupe"

Message par ber_trand07 » 17 Jan 2017 17:29

Je vais changer ça merci ^^

Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

Re: box collider "soupe"

Message par DevAmat » 18 Jan 2017 10:49

En passant je te donne un p'tit conseil si tu le permet. Pour comparer les tag dans tes "if" utilise plutôt la fonction CompareTag("tonTag") ce qui est bien plus optimisé ;) .

https://docs.unity3d.com/ScriptReferenc ... reTag.html

ber_trand07
Messages : 36
Inscription : 04 Sep 2016 17:35

Re: box collider "soupe"

Message par ber_trand07 » 21 Jan 2017 10:35

merci mais le problème est lorsque je rajoute une autre condition avec un troisième gameObject comme par exemple en rajoutant pomme de terre et si pommeDeTerre && carotte on instantie une soupe différentes. Sa pose problème car ça m'instantie toujours la soupe1..

Répondre

Revenir vers « (C#) CSharp »