Ouverture Porte avec la touche E

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
Dommsday
Messages : 5
Inscription : 09 Nov 2014 14:54

Ouverture Porte avec la touche E

Message par Dommsday » 24 Fév 2017 12:12

Bonjour à tous,

Voilà mon problème,

Je souhaite ouvrir une porte en appuyant sur la touche E mais malheureusement quand je rentre le code adéquat(Input.GetKeyDow(KeyCode.E), la porte de fonctionne pas alors que si j’enlève se bout de code la porte s’ouvre au moment ou je rentre dans le Trigger.

Je vous donne le code pour vous montrez.

Code : Tout sélectionner

public GameObject Pivot, Porte;
public int Angle = 130;
private int CurAngle;
public bool Ouverture = false;

private Text Info;

void Start()
{
   Info = GameObject.Find(“Text”).GetComponent<Text>();
}

void Update()
{
   if (Ouverture && Input.GetKeyDown(KeyCode.E))//Si je retire le Code pour la touche E la porte s’ouvre
{
   if(CurAngle < Angle)
{
   CurAngle += 1;
   Porte.transform.RotateAround(Pivot.transform.position, -Vector3.up, CurAngle * Time.deltaTime);
}

}
else
{
   if(CurAngle != 0)
{
   CurAngle -= 1;
   Porte.transform.RotateAround(Pivot.transform.position, Vector3.up, CurAngle * Time.deltaTime);
}
}

}

void OnTriggerEnter(Collider col)
{
   if (col.gameObject.tag == “Player”)
{
   Info.text = “Appuyer sur E pour ouvrir”;

   Ouverture = true;
 }
}

void OnTriggerExit()
{
   Ouverture = false;
}
}
 ! Message de : boubouk50
Tu t'es bien fait chier à mettre des couleurs, du gras et de l'italique alors qu'il y a les balises

Code : Tout sélectionner

... Utilise-les, à l'avenir, c'est plus lisible. Merci.[/mod]

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

Re: Ouverture Porte avec la touche E

Message par boubouk50 » 24 Fév 2017 12:36

Salut,

GetKeyDown, comme écrit dans la documentation, renvoie True uniquement à la frame où la touche a été appuyée. Donc, ta porte s'ouvre bien, mais sur une seule frame.
GetKey renvoie True pendant tout le temps où elle est appuyée.
GetKeyUp renvoie True uniquement à la frame où la touche a été relâchée.

Il te faut donc sortir le GetKeyDown () de la condition pour déclencher l'action d'ouverture.

Code : Tout sélectionner

public GameObject Pivot, Porte;
public int Angle = 130;
private int CurAngle;
public bool Ouverture = false;
private bool keyE = false;

private Text Info;

void Start()
{
	Info = GameObject.Find(“Text”).GetComponent<Text>();
}

void Update()
{
	if (Ouverture && Input.GetKeyDown(KeyCode.E)) 	//Si on est dans le trigger et qu'on appuie sur E
		keyE = true;									//On déclenche l'ouverture
	
	if (keyE) {										//Si l'ouverture est déclenchée on ouvre
		if(CurAngle < Angle)
		{
			CurAngle += 1;
			Porte.transform.RotateAround(Pivot.transform.position, -Vector3.up, CurAngle * Time.deltaTime);
		}
	}

	if (!Ouverture) {									//Si on sort du trigger
		if(CurAngle != 0)
		{
			CurAngle -= 1;
			Porte.transform.RotateAround(Pivot.transform.position, Vector3.up, CurAngle * Time.deltaTime);
		}
	}
}

void OnTriggerEnter (Collider col)
{
	if (col.gameObject.tag == “Player”)
	{
   		Info.text = “Appuyer sur E pour ouvrir”;
  		Ouverture = true;
	}
}

void OnTriggerExit (Collider col)
{
	Ouverture = false;
	keyE = false;					//Remettre aussi le déclencheur à false pour réinitialiser
}
"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

Dommsday
Messages : 5
Inscription : 09 Nov 2014 14:54

Re: Ouverture Porte avec la touche E

Message par Dommsday » 24 Fév 2017 14:13

Merci beaucoup :)

Dpg
Messages : 13
Inscription : 17 Fév 2017 12:07

Re: Ouverture Porte avec la touche E

Message par Dpg » 24 Fév 2017 15:46

Pense parfois à mettre un temps d'action pendant l’exécution de l'action.

Car il peux t'arriver que le temps du clic ou d'une touche, l'action se déclenche plusieurs fois.

(un clic de souris == 3 frames environ dans un Update).

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

Re: Ouverture Porte avec la touche E

Message par boubouk50 » 24 Fév 2017 15:52

Ici, comme expliqué plus haut, il utilise GetKeyDown () qui n'est valide durant qu'une seule frame.
Qui plus est, l'utilisation d'un booléen lors du test permet de couper court également à ce problème. Car au lieu de lancer une action lors d'un clic, tu ouvres une condition. Celle-ci en cas de répétition est déjà ouverte et donc ne répétera pas d'action.

Par contre, pour ce genre de cas, il serait préférable d'utiliser une fonction d'ouverture/fermeture plutôt que l'Update (). L'Update () ne devrait avoir en charge seulement les changements d'états.
Dpg a écrit :un clic de souris == 3 frames environ dans un Update.
Ceci est une mauvaise utilisation des possibilités.
Tu as la fonction GetMouseButtonDown () qui n'est valide que sur une frame. (tu as également GetMouseButtonUp ())
"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

Dpg
Messages : 13
Inscription : 17 Fév 2017 12:07

Re: Ouverture Porte avec la touche E

Message par Dpg » 24 Fév 2017 15:58

Exact après il utilise une fermeture automatique avec le trigger, j'avais pas fait gaff, ca fera un rappel au cas ou :cote:

Répondre

Revenir vers « (C#) CSharp »