Image info à l'écran qui ne veut pas disparaître

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 :

Image info à l'écran qui ne veut pas disparaître

Message par vegetalain » 01 Juil 2015 08:00

Bonjour à tout le monde. Alors voilà, j'ai mixé deux ou trois scripts pour faire en sorte de chopper des items "au choix". C'est-à-dire que l'item a un trigger. On entre dans le trigger et une image s'affiche genre "appuyez sur espace pour prendre l'item". Là, ou bien on sort du trigger parce que l'item ne nous intéresse pas et l'image disparait, ou bien on appuye sur la barre d'espace et l'item est détruit, un son est joué, l'inventaire est incrémenté. Le souci c'est dans ce cas, l'image info ne disparait pas, je ne sais pas comme faire :D ...

Si qq'un pouvait zieuter le script et voir si j'ai pas zappé qqchose, ce serait super...
J'ai appelé le fichier chopitems.js, à glisser sur le joueur.

Merci de vos suggestions, et bonne journée

Code : Tout sélectionner

#pragma strict

	private var guiShow1 : boolean = false;
	private var guiShow2 : boolean = false;

	public var pochette1 : UnityEngine.UI.Text;
	public var pochette2 : UnityEngine.UI.Text;
	var chopson1 : AudioClip;
	var chopson2 : AudioClip;
	var score1 : int;
	var score2 : int;
	var zeinfo1 : Texture;
	var zeinfo2 : Texture;



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

	function OnTriggerStay(other:Collider) {
		
		if (other.tag == "Item1") {
			guiShow1 = true;		
			if (Input.GetKeyDown("space") && other.gameObject.tag == "Item1") {
				GetComponent.<AudioSource>().PlayOneShot(chopson1);
				Destroy(other.gameObject, 0.4);
				score1 ++;
				pochette1.text = score1.ToString();
				guiShow1 = false; // j'ai mis ça ici, c'est sensé faire disparaitre l'image si les 2 conditons ci-dessus sont réunis
// a savoir que le son, l'incrémentation et la disparition de l'item fonctionne, donc, je dois m'être gourré dans a "formulation" de guiShow false...
			}
		}

		if (other.tag == "Item2") {
			guiShow2 = true;		
			if (Input.GetKeyDown("space") && other.gameObject.tag == "Item2") {
				GetComponent.<AudioSource>().PlayOneShot(chopson2);
				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, 200, 200), zeinfo1);
		}
		if(guiShow2 == true) {
			GUI.DrawTexture(Rect((Screen.width / 2)-100, (Screen.height / 2)-100, 200, 200), zeinfo2);
		}

	}
	
	
l'absence de plumes, rend libre

Avatar de l’utilisateur
SamothSamoth
Messages : 168
Inscription : 22 Avr 2015 18:03
Localisation : Lyon, Villefranche sur Saone, Parcieux

Re: Image info à l'écran qui ne veut pas disparaître

Message par SamothSamoth » 01 Juil 2015 08:12

Ton problème est tout con...

Vu que tu détruit le GameObject qui a le collider/trigger, tu ne rentres jamais dans la fonction OnTriggerExit. Unity enverra l'evènement pour rentrer dans cette fonction uniquement quand le trigger sortira de ta collision, pas quand il disparait. Si il disparaît, il ne peut pas sortir ! Tu comprends la difference ??!!!.... ;)
------------------------------------------------------------------------------------ LIVE FAST DIE YOUNG -------------------------------------------------------------------------------------

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

Re: Image info à l'écran qui ne veut pas disparaître

Message par vegetalain » 01 Juil 2015 09:02

Oui oui je comprends ton raisonnement mais "guishow1 = false", ce que j'ai mis dans la condition collider + space, c'est le truc à faire contenu dans la function ontriggerexit :), ontriggerexit n'est pas sollicité pour les conditions collider + space... sinon il faudrait que je mette le "contraire" de ça j'imagine :

GUI.DrawTexture(Rect((Screen.width / 2)-100, (Screen.height / 2)-100, 200, 200), zeinfo2);

genre : GUI.DrawTexture(zeinfo1).enabled = false, ou visible = false... x/ du coup même si tu dis que le pb est tout con, la solution ne me saute pas aux yeux :oops:

Pourtant voici le script d'où je suis parti pour le côté "Affichage d'image depuis un trigger", ce script était à glisser sur un objet, un cube, etc... qui avait un trigger. J'ai juste inversé la chose en glissant ma version sur le joueur... mais mon "mix" a un peu cassé le truc...

Code : Tout sélectionner

#pragma strict

private var guiShow : boolean = false;

var zeinfo : Texture;

function OnTriggerStay (Col : Collider)
{
	if(Col.tag == "Player")
	{
		guiShow = true;
	}
}

function OnTriggerExit (Col : Collider)
{
	if(Col.tag == "Player")
	{
		guiShow = false;
	}
}

function OnGUI()
{
	if(guiShow == true)
	{
		GUI.DrawTexture(Rect((Screen.width / 2)-100, (Screen.height / 2)-100, 200, 200), zeinfo);
	}
}
l'absence de plumes, rend libre

Avatar de l’utilisateur
SamothSamoth
Messages : 168
Inscription : 22 Avr 2015 18:03
Localisation : Lyon, Villefranche sur Saone, Parcieux

Re: Image info à l'écran qui ne veut pas disparaître

Message par SamothSamoth » 01 Juil 2015 10:36

vegetalain a écrit :....mais "guishow1 = false", ce que j'ai mis dans la condition collider + space, c'est le truc à faire contenu dans la function ontriggerexit :)
Oui... Effectivement.... Mais vu que l'objet est détruit peut être qu'il y a un gros Binz...Essaye de détruire l'objet après avoir assigné ton booléen à false.... Genre:

Code : Tout sélectionner

if (Input.GetKeyDown("space") && other.gameObject.tag == "Item1")
{
            GetComponent.<AudioSource>().PlayOneShot(chopson1);
            score1 ++;
            pochette1.text = score1.ToString();
            guiShow1 = false;
            Destroy(other.gameObject, 0.4);
}
------------------------------------------------------------------------------------ LIVE FAST DIE YOUNG -------------------------------------------------------------------------------------

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

Re: Image info à l'écran qui ne veut pas disparaître

Message par vegetalain » 01 Juil 2015 11:20

Le truc de mettre guiShow1 avant, ne marchait pas tout à fait, alors gardant à l'esprit qu'il fallait déplacer guiShow false qqpart, j'ai testé un truc et ça marche :D

Dans OnTriggerStay, j'ai viré le fait que l'image s'affiche (guiShow1 = true; et guiShow2 = true;), par contre j'ai créé un OnTriggerEnter juste avant et c'est là que je les ai mis.

Comme quand on entre, la seule chose qui arrive c'est l'affichage de l'info... le son, le score, la suppression de l'image et le fait que l'item soit détruit se passe après...

Bref, ça fonctionne comme ça :) cool

Voilà le script final :

Code : Tout sélectionner

#pragma strict

	private var guiShow1 : boolean = false;
	private var guiShow2 : boolean = false;

	public var pochette1 : UnityEngine.UI.Text;
	public var pochette2 : UnityEngine.UI.Text;
	var chopson1 : AudioClip;
	var chopson2 : AudioClip;
	var score1 : int;
	var score2 : int;
	var zeinfo1 : Texture;
	var zeinfo2 : Texture;



//-------------------------------------------------------------------------------------------------
	function OnTriggerEnter(other:Collider) {
		if (other.tag == "Item1") {guiShow1 = true;}
		if (other.tag == "Item2") {guiShow2 = true;}
	}
		
	function OnTriggerStay(other:Collider) {
		
		if (other.tag == "Item1") {
			if (Input.GetKeyDown("space") && other.gameObject.tag == "Item1") {
				guiShow1 = false;
				GetComponent.<AudioSource>().PlayOneShot(chopson1);
				score1 ++;
				pochette1.text = score1.ToString();
				Destroy(other.gameObject, 0.4);
			}
		}

		if (other.tag == "Item2") {
			if (Input.GetKeyDown("space") && other.gameObject.tag == "Item2") {
				guiShow2 = false;
				GetComponent.<AudioSource>().PlayOneShot(chopson2);
				score2 ++;
				pochette2.text = score2.ToString();
				Destroy(other.gameObject, 0.4);
			}
		}

	}

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

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

	}
	
	
Et merci :)
l'absence de plumes, rend libre

Verrouillé

Revenir vers « (Js) Javascript »