[MY-AL] Item et score, ça bugue

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
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
vegetalain
Messages : 89
Inscription : 15 Août 2010 17:18
Localisation : la ferté-milon
Contact :

[MY-AL] Item et score, ça bugue

Message par vegetalain » 07 Juin 2017 10:27

Bonjour, cela fait longtemps que je n'ai pas touché à unity et j'ai envie de m'y remettre. Du coup, les vieux scripts que j'avais ne fonctionne presque plus et j'ai du rebidouiller des lignes... mais en vain, ou presque.

alors voilà j'ai un petit souci de script JS pour collecter des items. :)

J'ai mis des cubes, leur ai donné une box collider etc, puis j'ai glissé sur le Player le script suivant qui est sensé faire ceci :

- lorsqu'on entre dans le box collider une image apparait ("item machin")
- lorsqu'on en sort sans prendre l'item, l'image disparait.
- Si une fois dedans on appuie sur la barre d'espace l'item disparait et l'image aussi.
- Le score est incrémenté de 1.

Seulement... :(

- l'image ne disparait pas toujours lorsque je prends l'item...
- le score s'incrémente de 2 points aulieu de 1...

Quelqu'un pourrait-il voir où ça pêche svp?... Car je ne vois pas x/

Voici le script (désolé mais hm... je ne vois pas de mise en page pour le script :roll: ) :

Code : Tout sélectionner

#pragma strict

	//variables pour le premier item
	var score1 : int;
	var zeinfo1 : Texture;
	var pickupson1:AudioClip;
	private var guiShow1 : boolean = false;
	public var pochette1 : UnityEngine.UI.Text;

	//variables pour le second item
	var score2 : int;
	var zeinfo2 : Texture;
	var pickupson2:AudioClip;
	private var guiShow2 : boolean = false;
	public var pochette2 : UnityEngine.UI.Text;

	//lorsqu'on entre et qu'on reste dans le trigger de l'item
	function OnTriggerStay(other:Collider) {

    if (other.tag == "item1") {
        guiShow1 = true;        
        if (Input.GetKeyUp("space") && other.gameObject.tag == "item1") {
            GetComponent.<AudioSource>().PlayOneShot(pickupson1);
            Destroy(other.gameObject, 0.4);
            score1 ++;
            pochette1.text = score1.ToString();
           	guiShow1 = false;
	    }
    }

    if (other.tag == "item2") {
        guiShow2 = true;        
        if (Input.GetKeyUp("space") && other.gameObject.tag == "item2") {
            GetComponent.<AudioSource>().PlayOneShot(pickupson2);
            Destroy(other.gameObject, 0.4);
            score2 ++;
            pochette2.text = score2.ToString();
           	guiShow2 = false;

        }
    }

}

//-------------------------------------------------------------------------------------------------

function OnTriggerExit (other : Collider) {

    //if(other.tag == "item1") {
    guiShow1 = false;//}
    //if(other.tag == "item2") {
    guiShow2 = false;//}
} 

//-------------------------------------------------------------------------------------------------

function OnGUI() {

    if(guiShow1 == true) {
        GUI.DrawTexture(Rect((Screen.width / 2)-100, (Screen.height / 2)-100, 256, 64), zeinfo1);
    }
    if(guiShow2 == true) {
        GUI.DrawTexture(Rect((Screen.width / 2)-100, (Screen.height / 2)-100, 256, 64), zeinfo2);
    }

}
 ! Message de : boubouk50
Après 85 messages, tu ne sais toujours pas utiliser les balises CODE, merci de faire un effort... Au temps pour les nouveaux je veux bien refaire la mise en page, au temps là, ça me frise les poils de la moustache.
Merci de vos lumières
l'absence de plumes, rend libre

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: [MY-AL] Item et score, ça bugue

Message par simonj » 07 Juin 2017 10:43

Salut,

Franchement ton code n'est pas parfait au niveau optim', mais il devrais marcher. Donc je te conseil juste de mettre des Debug.Log et des points d'arrêts afin de voir ce qu'il se passe réellement.

Je soupçonne que ça viens de tes 2 tests consécutifs et de ton delay du Destroy pour ne pas supprimer l'Audio Source. Mais je ne suis pas sûr et je ne peux pas tester. Tu peux toujours essayer de clean un peu, ça seras plus facile pour comprendre d'où ça viens ;)

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

Re: [MY-AL] Item et score, ça bugue

Message par boubouk50 » 07 Juin 2017 10:49

Tu devrais activer le GUI sur la phase d'entrée seulement:
OnTriggerEnter -> Afficher la GUI

Pour le OnTriggerStay: La fonction est appelée à chaque frame puisque tu restes dedans donc:
Lorsque tu appuies sur 'Espace', tu entres dans la condition non pas une seule fois mais le temps de l'appui qui peut durer plusieurs frames, d'où l'ajout successif de points au score. Tu détruis bien l'objet mais avec un délai, donc tu peux bien entrer plusieurs fois dans cette boucle.

Code : Tout sélectionner

function OnTriggerEnter (other:Collider) {
	//Tes variables d'affichage prennent le résultat de la condition
	guiShow1 = (other.tag == "item1");
	guiShow2 = (other.tag == "item2");
}

function OnTriggerStay(other:Collider) {
	//On n'agit seulement si la touche Espace est enfoncée
	if (Input.GetKeyUp("space") {
		//Test de l'item: 1 ou 2?
		if (other.gameObject.tag == "item1" && guiShow1) { //Soit tu enlèves le délai du Destroy, soit tu testes la GUI: si elle est affichée alors l'objet est présent, sinon il a déjà été détruit.
			GetComponent.<AudioSource>().PlayOneShot(pickupson1);
			Destroy(other.gameObject, 0.4);
			score1 ++;
			pochette1.text = score1.ToString();
			guiShow1 = false;
		}
		else {
			if (other.gameObject.tag == "item2" && guiShow2) {
				GetComponent.<AudioSource>().PlayOneShot(pickupson2);
				Destroy(other.gameObject, 0.4);
				score2 ++;
				pochette2.text = score2.ToString();
				guiShow2 = false;
			}
		}
	}
}

function OnTriggerExit (other : Collider) {
    guiShow1 = false;
    guiShow2 = false;
} 

function OnGUI() {

    if(guiShow1) {
        GUI.DrawTexture(Rect((Screen.width / 2)-100, (Screen.height / 2)-100, 256, 64), zeinfo1);
    }
    if(guiShow2) {
        GUI.DrawTexture(Rect((Screen.width / 2)-100, (Screen.height / 2)-100, 256, 64), zeinfo2);
    }
"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

vegetalain
Messages : 89
Inscription : 15 Août 2010 17:18
Localisation : la ferté-milon
Contact :

Re: [MY-AL] Item et score, ça bugue

Message par vegetalain » 07 Juin 2017 11:03

Oui c'est vrai que c'est un peu de la bricole et l'optimisation n'a pas fait partie de mes préoccupations... mais tant que ça marche... on croise les doigts.

Dsl pour la balise code mais je ne suis pas super à l'aise avec ce genre de choses ; mon truc c'est le dessin, mais pas ce que j’appellerai l'adn informatique mdr... Un point d'amélioration à travailler ;-)


Merci de votre aide, je vais voir tout ça une fois chez moi :)

Bonne journée
l'absence de plumes, rend libre

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

Re: [MY-AL] Item et score, ça bugue

Message par boubouk50 » 07 Juin 2017 11:06

vegetalain a écrit :Dsl pour la balise code mais je ne suis pas super à l'aise avec ce genre de choses ; mon truc c'est le dessin, mais pas ce que j’appellerai l'adn informatique mdr... Un point d'amélioration à travailler ;-)
Mouais, tu te sers des balises de couleur et police, c'est exactement la même chose...Au lieu d'appuyer sur le bouton couleur ou police, tu appuies sur le bouton Code... Enfin bon.
"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

vegetalain
Messages : 89
Inscription : 15 Août 2010 17:18
Localisation : la ferté-milon
Contact :

Re: [MY-AL] Item et score, ça bugue

Message par vegetalain » 08 Juin 2017 11:30

J'ai testé ce que tu as mis boubouk50 et ça marche nickel, super :-D merci
l'absence de plumes, rend libre

Verrouillé

Revenir vers « (Js) Javascript »