Effet différent entre code touche et code 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
cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

Effet différent entre code touche et code bouton

Message par cortoh » 06 Mai 2018 17:36

Bonjour,
Je suis confronté à un problème que je n'arrive pas à résoudre, peut-être parce que je n'ai pas ouvert Unity depuis un certain temps, j'ai travaillé plus d'un ans sur un projet en AS3, donc il est possible que le problème soit tout bête et qu'il m'échappe tout simplement.

Explication, dans mon jeu le joueur a la possibilité via la touche F8 de changer les textures des objets, le décort et également l'interface, l'ensemble fonctionne parfaitement en utilisant la touche F8, cela dit pour les joueurs utilisant une tablette donc pas de touche F8 j'ai de ce fait crée un bouton dans un canvas pour cet usage, le résulat est similaire mise à part que certains objets bien définis ne change pas de texture, donc pourquoi ça fonctionne avec la touche F8 et pas sur tout l'ensemble avec le bouton, mystère ?
Merci d'avance pour votre aide.

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

Re: Effet différent entre code touche et code bouton

Message par Max » 06 Mai 2018 23:13

Bonsoir,
cortoh a écrit :
06 Mai 2018 17:36
donc pourquoi ça fonctionne avec la touche F8 et pas sur tout l'ensemble avec le bouton, mystère ?
en effet mystère :-/
Moi en l'état je n'ai pas de réponse. Quelqu'un d'autre (un devin) en aura peut-être une.
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

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

Re: Effet différent entre code touche et code bouton

Message par boubouk50 » 07 Mai 2018 09:28

Sans ton code, impossible de savoir... Section code = code.
"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

cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

Re: Effet différent entre code touche et code bouton

Message par cortoh » 07 Mai 2018 13:07

Bonjour,
Pour résumer le code dans l'update est attrribué à la touche F8 tous les textures du jeu sont alors modifiés, ensuite il y a la fonction "btn_Skin" qui à exactement le même code mais résultat certains objets ne changent pas de textures et ce principalement les objets issues d'un préfab.

Voici mon code complet:

Code : Tout sélectionner

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

public class Change_Deco : MonoBehaviour {

	public Material deco_Plateau_1;		// noir
	public Material deco_Plateau_2; 		// Blanc
	public Material deco_Cible_1;		// Jaune
	public Material deco_Cible_2;		// Bleu

	public Material deco_fond_Camera_1;	// Dégradé Vert
	public Material deco_fond_Camera_2;	// Dégradé Bleu

	public Material cube_Ani_yellow;
	public Material cube_Ani_blue;

	public GameObject lights_Sun;
	public GameObject pack_Lights;
	public GameObject pack_Elements;
	public GameObject cible;
	public GameObject cube_Ani_cible;
	public GameObject master;
	public GameObject fond_Camera;

	public GameObject cube_Ghost;
	public Material blue_Ghost;
	public Material yellow_Ghost;
	public Color blueColor;
	public int choix_Deco;

	public Light light_Master;

	public GameObject panel_Main;
	public GameObject panel_Option;
	public GameObject panel_Keyboard;

	public Text text_1;
	public Text text_2;
	public Text text_3;
	public Text text_4;

	public Text text_Number;
	public Text text_Loading;
	public Text text_Stage;

	public Text back;
	public Text option;
	public Text keyboard;
	public Text main;

	public Text music_Graphic;
	public Text vol_0;
	public Text vol_25;
	public Text vol_50;
	public Text vol_100;
	public Text graf_Good;
	public Text graf_Very;
	public Text graf_Extra;
	public Text close;


	// AWAKE //////////////////////////////////////////////////////////////////////////////


	void Awake () {

		choix_Deco 	= PlayerPrefs.GetInt("Sav_Deco"); 		// Je charge la svaleur de "choix_Deco".


	}


	// START //////////////////////////////////////////////////////////////////////////////


	void Start () {


		if (choix_Deco == 0) {  								

							 GetComponent<Renderer> ().material = deco_Plateau_1;
			cible			.GetComponent<Renderer> ().material = deco_Cible_1;
			master			.GetComponent<Renderer> ().material = deco_Cible_1;
			//fond_Camera	.GetComponent<Renderer> ().material = deco_fond_Camera_1;
			fond_Camera		.SetActive (true);
			cube_Ani_cible	.GetComponent<Renderer> ().material = cube_Ani_yellow;
			cube_Ghost		.GetComponent<Renderer> ().material = yellow_Ghost;

			panel_Main		.GetComponent<Image> ().color = Color.black;
			panel_Option		.GetComponent<Image> ().color = Color.black;
			panel_Keyboard	.GetComponent<Image> ().color = Color.black;

			light_Master	.color = Color.yellow;

			text_1			.color = Color.yellow; 	
			text_2			.color = Color.yellow; 	
			text_3			.color = Color.yellow; 	
			text_4			.color = Color.yellow;

			text_Number		.color = Color.yellow;
			text_Loading		.color = Color.yellow;
			text_Stage		.color = Color.yellow;

			main			.color = Color.yellow; 	
			option			.color = Color.yellow; 	
			keyboard			.color = Color.yellow; 	
			back			.color = Color.yellow;

			music_Graphic	.color = Color.yellow; 	
			vol_0			.color = Color.yellow; 	
			vol_25			.color = Color.yellow; 	
			vol_50			.color = Color.yellow; 	
			close			.color = Color.yellow;
			vol_100			.color = Color.yellow; 	
			graf_Good		.color = Color.yellow; 	
			graf_Very		.color = Color.yellow; 	
			graf_Extra		.color = Color.yellow;

			pack_Lights		.SetActive (true);
			lights_Sun		.SetActive (false);
			pack_Elements	.SetActive (true);


		} else if (choix_Deco == 1) {

						 	 GetComponent<Renderer> ().material = deco_Plateau_2;
			cible			.GetComponent<Renderer> ().material = deco_Cible_2;
			master			.GetComponent<Renderer> ().material = deco_Cible_2;
			//fond_Camera	.GetComponent<Renderer> ().material = deco_fond_Camera_2;
			fond_Camera		.SetActive (false);

			cube_Ani_cible	.GetComponent<Renderer> ().material = cube_Ani_blue;
			cube_Ghost		.GetComponent<Renderer> ().material = blue_Ghost;

			panel_Main		.GetComponent<Image> ().color = blueColor;
			panel_Option		.GetComponent<Image> ().color = blueColor;
			panel_Keyboard	.GetComponent<Image> ().color = blueColor;

			light_Master	.color = Color.blue;

			// Panel Keyboard Live
			text_1			.color = blueColor; 	
			text_2			.color = blueColor; 	
			text_3			.color = blueColor;	
			text_4			.color = blueColor;

			// Panel Canvas Stage
			text_Number		.color = blueColor;
			text_Loading		.color = blueColor;
			text_Stage		.color = blueColor;

			// Boutons Panel Main
			main			.color = blueColor; 	
			option			.color = blueColor; 	
			keyboard			.color = blueColor; 	
			back			.color = blueColor;

			// Textes Options
			music_Graphic	.color = blueColor;  	
			vol_0			.color = blueColor;  	
			vol_25			.color = blueColor;  	
			vol_50			.color = blueColor;  	
			close			.color = blueColor; 
			vol_100			.color = blueColor;  	
			graf_Good		.color = blueColor;  	
			graf_Very		.color = blueColor;  	
			graf_Extra		.color = blueColor;

			// Textes Panel Keyboard
			pack_Lights		.SetActive (false);
			lights_Sun		.SetActive (true);
			pack_Elements	.SetActive (false);

		}

	}


	// ECRAN TOUCHE - SKIN

	public void btn_Skin() {

		if (choix_Deco == 0) {

			choix_Deco = 1;
			PlayerPrefs.SetInt ("Sav_Deco", choix_Deco); 	// J'enregistre la valeur

			GetComponent<Renderer> ().material = deco_Plateau_2;
			cible			.GetComponent<Renderer> ().material = deco_Cible_2;
			master			.GetComponent<Renderer> ().material = deco_Cible_2;
			//fond_Camera	.GetComponent<Renderer> ().material = deco_fond_Camera_2;
			fond_Camera		.SetActive (false);

			cube_Ani_cible	.GetComponent<Renderer> ().material = cube_Ani_blue;
			cube_Ghost		.GetComponent<Renderer> ().material = blue_Ghost;

			panel_Main		.GetComponent<Image> ().color = blueColor;
			panel_Option		.GetComponent<Image> ().color = blueColor;
			panel_Keyboard	.GetComponent<Image> ().color = blueColor;

			light_Master	.color = Color.blue;

			text_1			.color = blueColor; 	
			text_2			.color = blueColor;	
			text_3			.color = blueColor; 	
			text_4			.color = blueColor;

			text_Number		.color = blueColor;
			text_Loading		.color = blueColor;
			text_Stage		.color = blueColor;

			main			.color = blueColor; 	
			option			.color = blueColor; 	
			keyboard			.color = blueColor; 	
			back			.color = blueColor;

			music_Graphic	.color = blueColor;  	
			vol_0			.color = blueColor;  	
			vol_25			.color = blueColor;  	
			vol_50			.color = blueColor;  	
			close			.color = blueColor; 
			vol_100			.color = blueColor;  	
			graf_Good		.color = blueColor;  	
			graf_Very		.color = blueColor;  	
			graf_Extra		.color = blueColor;


			pack_Lights		.SetActive (false);
			lights_Sun		.SetActive (true);
			pack_Elements	.SetActive (false);


		} else if (choix_Deco == 1) {

			choix_Deco = 0;
			PlayerPrefs.SetInt ("Sav_Deco", choix_Deco); 	// J'enregistre la valeur

			GetComponent<Renderer> ().material = deco_Plateau_1;
			cible			.GetComponent<Renderer> ().material = deco_Cible_1;
			master			.GetComponent<Renderer> ().material = deco_Cible_1;
			//fond_Camera	.GetComponent<Renderer> ().material = deco_fond_Camera_1;
			fond_Camera		.SetActive (true);
			cube_Ani_cible	.GetComponent<Renderer> ().material = cube_Ani_yellow;
			cube_Ghost		.GetComponent<Renderer> ().material = yellow_Ghost;

			panel_Main		.GetComponent<Image> ().color = Color.black;
			panel_Option		.GetComponent<Image> ().color = Color.black;
			panel_Keyboard	.GetComponent<Image> ().color = Color.black;


			light_Master	.color = Color.yellow;

			text_1			.color = Color.yellow; 
			text_2			.color = Color.yellow; 	
			text_3			.color = Color.yellow; 	
			text_4			.color = Color.yellow;

			text_Number		.color = Color.yellow;
			text_Loading		.color = Color.yellow;
			text_Stage		.color = Color.yellow;

			main			.color = Color.yellow; 	
			option			.color = Color.yellow; 	
			keyboard			.color = Color.yellow; 	
			back			.color = Color.yellow;

			music_Graphic	.color = Color.yellow; 	
			vol_0			.color = Color.yellow; 	
			vol_25			.color = Color.yellow; 	
			vol_50			.color = Color.yellow; 	
			close			.color = Color.yellow;
			vol_100			.color = Color.yellow; 	
			graf_Good		.color = Color.yellow; 	
			graf_Very		.color = Color.yellow; 	
			graf_Extra		.color = Color.yellow;

			pack_Lights		.SetActive (true);
			lights_Sun		.SetActive (false);
			pack_Elements	.SetActive (true);


		}

	}

	// UPDATE //////////////////////////////////////////////////////////////////////////////


	void Update () {

		if (Input.GetKeyDown ("f8")) {

			if (choix_Deco == 0) {
				
				choix_Deco = 1;
				PlayerPrefs.SetInt ("Sav_Deco", choix_Deco); 	// J'enregistre la valeur

								 GetComponent<Renderer> ().material = deco_Plateau_2;
				cible			.GetComponent<Renderer> ().material = deco_Cible_2;
				master			.GetComponent<Renderer> ().material = deco_Cible_2;
				//fond_Camera	.GetComponent<Renderer> ().material = deco_fond_Camera_2;
				fond_Camera		.SetActive (false);

				cube_Ani_cible	.GetComponent<Renderer> ().material = cube_Ani_blue;
				cube_Ghost		.GetComponent<Renderer> ().material = blue_Ghost;

				panel_Main		.GetComponent<Image> ().color = blueColor;
				panel_Option		.GetComponent<Image> ().color = blueColor;
				panel_Keyboard	.GetComponent<Image> ().color = blueColor;



				light_Master	.color = Color.blue;

				text_1			.color = blueColor; 	
				text_2			.color = blueColor;	
				text_3			.color = blueColor; 	
				text_4			.color = blueColor;

				text_Number		.color = blueColor;
				text_Loading		.color = blueColor;
				text_Stage		.color = blueColor;

				main			.color = blueColor; 	
				option			.color = blueColor; 	
				keyboard			.color = blueColor; 	
				back			.color = blueColor;

				music_Graphic	.color = blueColor;  	
				vol_0			.color = blueColor;  	
				vol_25			.color = blueColor;  	
				vol_50			.color = blueColor;  	
				close			.color = blueColor; 
				vol_100			.color = blueColor;  	
				graf_Good		.color = blueColor;  	
				graf_Very		.color = blueColor;  	
				graf_Extra		.color = blueColor;
				 

				pack_Lights		.SetActive (false);
				lights_Sun		.SetActive (true);
				pack_Elements	.SetActive (false);


			} else if (choix_Deco == 1) {

				choix_Deco = 0;
				PlayerPrefs.SetInt ("Sav_Deco", choix_Deco); 	// J'enregistre la valeur

								 GetComponent<Renderer> ().material = deco_Plateau_1;
				cible			.GetComponent<Renderer> ().material = deco_Cible_1;
				master			.GetComponent<Renderer> ().material = deco_Cible_1;
				//fond_Camera	.GetComponent<Renderer> ().material = deco_fond_Camera_1;
				fond_Camera		.SetActive (true);
				cube_Ani_cible	.GetComponent<Renderer> ().material = cube_Ani_yellow;
				cube_Ghost		.GetComponent<Renderer> ().material = yellow_Ghost;

				panel_Main		.GetComponent<Image> ().color = Color.black;
				panel_Option		.GetComponent<Image> ().color = Color.black;
				panel_Keyboard	.GetComponent<Image> ().color = Color.black;


				light_Master	.color = Color.yellow;

				text_1			.color = Color.yellow; 
				text_2			.color = Color.yellow; 	
				text_3			.color = Color.yellow; 	
				text_4			.color = Color.yellow;

				text_Number		.color = Color.yellow;
				text_Loading	.color = Color.yellow;
				text_Stage		.color = Color.yellow;

				main			.color = Color.yellow; 	
				option			.color = Color.yellow; 	
				keyboard			.color = Color.yellow; 	
				back			.color = Color.yellow;

				music_Graphic	.color = Color.yellow; 	
				vol_0			.color = Color.yellow; 	
				vol_25			.color = Color.yellow; 	
				vol_50			.color = Color.yellow; 	
				close			.color = Color.yellow;
				vol_100			.color = Color.yellow; 	
				graf_Good		.color = Color.yellow; 	
				graf_Very		.color = Color.yellow; 	
				graf_Extra		.color = Color.yellow;

				pack_Lights		.SetActive (true);
				lights_Sun		.SetActive (false);
				pack_Elements	.SetActive (true);


			}
				
		}

		
	} // FIN UPDATE //////////////////////////////////////////////////////////////////////////////
} // FIN SCRIPT //////////////////////////////////////////////////////////////////////////////

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

Re: Effet différent entre code touche et code bouton

Message par boubouk50 » 07 Mai 2018 13:14

Tu as copier-collé le code de l'Update () dans la fonction btn_Skin ()?
Dans ce cas, dans l'Update (), appelle la fonction btn_Skin () au lieu du reste du code, déjà. Comme ça, tu seras sur que le code partagé est strictement le même (ce qui n'est pas le cas ici).

Ensuite, y'a-t-il plusieurs occurrence de ce script dans ta scène? Si oui, il faut que le bouton lance la fonction sur toutes les occurrences.

Aussi, tu devrais utiliser des tableaux pour éviter toutes les redondances.
"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

cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

Re: Effet différent entre code touche et code bouton

Message par cortoh » 07 Mai 2018 17:03

Alors j'ai simplifié le code pour y voir plus clair, si je ne dis pas de bêtises nous somme bien d'accord que si j'utilise la touche F8 ou bien un bouton avec la fonction btn_Skin je dois obtenir le même résultat, maintenant en testant avec la touche F8 les 2 materials sont bien modifiés donc ça fonctionne mais avec la fonction "btn_Skin" seulement le gameObject "cible" est modifié et pas le gameObject "master" ??? la seule différence que j'ai trouvé c'est que "master" est issu d'un prefab.

Code : Tout sélectionner

// BTN TOUCHE SKIN //////////////////////////////////////////////////////////////////////////////

public void btn_Skin() {

	if (choix_Deco == 0) {

		choix_Deco = 1;

		master.GetComponent<Renderer> ().material = deco_Cible_2;
		cible.GetComponent<Renderer> ().material = deco_Cible_2;


	} else if (choix_Deco == 1) {

		choix_Deco = 0;

		master.GetComponent<Renderer> ().material = deco_Cible_1;
		cible.GetComponent<Renderer> ().material = deco_Cible_1;

		}
	}


// UPDATE //////////////////////////////////////////////////////////////////////////////

void Update () {

	if (Input.GetKeyDown ("f8")) {

		if (choix_Deco == 0) {
				
			choix_Deco = 1;

			master.GetComponent<Renderer> ().material = deco_Cible_2;
			cible.GetComponent<Renderer> ().material = deco_Cible_2;
				

		} else if (choix_Deco == 1) {

			choix_Deco = 0;

			master.GetComponent<Renderer> ().material = deco_Cible_1;
			cible.GetComponent<Renderer> ().material = deco_Cible_1;

		}		
	}

		
	} // FIN UPDATE //////////////////////////////////////////////////////////////////////////////
} // FIN SCRIPT ///////////////////////////////////////////////////////////////////////////////code]
Dernière édition par cortoh le 08 Mai 2018 06:41, édité 1 fois.

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

Re: Effet différent entre code touche et code bouton

Message par boubouk50 » 07 Mai 2018 17:06

Pour avoir exactement la même chose, il faut appeler la même fonction:

Code : Tout sélectionner

// BTN TOUCHE SKIN //////////////////////////////////////////////////////////////////////////////

public void btn_Skin() {

	Debug.Log ("btn_Skin appelé. Test doublon);
	if (choix_Deco == 0) {

		choix_Deco = 1;

		master.GetComponent<Renderer> ().material = deco_Cible_2;
		cible.GetComponent<Renderer> ().material = deco_Cible_2;


	} else if (choix_Deco == 1) {

		choix_Deco = 0;

		master.GetComponent<Renderer> ().material = deco_Cible_1;
		cible.GetComponent<Renderer> ().material = deco_Cible_1;

		}
	}


// UPDATE //////////////////////////////////////////////////////////////////////////////

void Update () {

	if (Input.GetKeyDown ("f8")) {
		btn_Skin()	
	}

		
	} // FIN UPDATE //////////////////////////////////////////////////////////////////////////////
} // FIN SCRIPT ///////////////////////////////////////////////////////////////////////////////code]
N'as-tu pas d'erreur?
J'ai ajouté un debug.log pour vérifier le nombre de fois que la fonction se lance, au cas où.
"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

cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

Re: Effet différent entre code touche et code bouton

Message par cortoh » 08 Mai 2018 08:06

Bonjour,
J'ai effectué les vérifications, donc en activant la fonction "btn_Skin" depuis l'Update comme tu me la proposé, résultat ça fonctionne sans grande surprise, mais toujours pas avec le bouton qui lance la fonction directement, le gameObjet "cible" est bien modifié mais pas "master" et j'ai vérifié il n'y a pas de doublon.

Une idée en passant, est t-il possible de faire un test inverse en activant la touche F8 via la fonction "btn_Skin" ?

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

Re: Effet différent entre code touche et code bouton

Message par Max » 08 Mai 2018 10:07

Bonjour,

je viens de tester avec le code posté, F8 et UI.Button, et (sans surprise) cela fonctionne sans pb. Prefabs ou pas Prefabs.
Comment gères tu ton appel depuis ton bouton ?
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

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

Re: Effet différent entre code touche et code bouton

Message par boubouk50 » 08 Mai 2018 10:10

Si je t'ai mis un Debug.Log c'était pour voir si la fonction n'était pas lancée plusieurs fois simultanément. Cela pourrait entraîner un conflit ente les exécutions et un résultat aléatoire.
Qu'en est-il?
"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

Répondre

Revenir vers « (C#) CSharp »