[RESOLU] 3 conditions vraies simultanement bloquent systématiquement les autres conditions a false

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
le44
Messages : 28
Inscription : 21 Oct 2020 15:15

[RESOLU] 3 conditions vraies simultanement bloquent systématiquement les autres conditions a false

Message par le44 » 26 Mars 2022 16:13

Bonjour a tous, quand 3 conditions sont vraies dans ma fonction update() (en l'occurence l'appui de 3 touche simultanés), elles bloquent toute les autres conditions même celles horrs de la fonction, ces dernières sont bloquées a false meme si elles sont techniquement vraies.

Voici mon code:

Code : Tout sélectionner

    void Update()
    {
            if (Input.GetKey(KeyCode.Z))
            {
                transform.Translate(0, vitesse * Time.deltaTime, 0); 
            }
            if (Input.GetKey(KeyCode.S))
            {
                transform.Translate(0, -vitesse * Time.deltaTime, 0); 
            }
            if (Input.GetKey(KeyCode.Q))
            {
                transform.Translate(vitesse * Time.deltaTime, 0, 0);
                transform.rotation = Quaternion.Euler(0, 180, 0);
            }
            if (Input.GetKey(KeyCode.D))
            {
                transform.Translate(vitesse * Time.deltaTime, 0, 0);
                transform.rotation = Quaternion.Euler(0, 0, 0);
            }
     }

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

Re: 3 conditions vraies simultanement bloquent systématiquement les autres conditions a false

Message par Max » 26 Mars 2022 16:32

Bonjour,

je ne comprends pas trop. Déjà dans le code que tu donnes, je ne vois pas comment tu peux appuyer sur 3 touches en même temps vu qu'il y a 4 tests, et qu'ils sont appairés (Z contre S et Q contre D).
Donc il faut que tu détaille un peu plus ton soucis, car je en l'état je ne vois pas trop ce qui bloque.
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

le44
Messages : 28
Inscription : 21 Oct 2020 15:15

Re: 3 conditions vraies simultanement bloquent systématiquement les autres conditions a false

Message par le44 » 26 Mars 2022 18:58

Max a écrit :
26 Mars 2022 16:32
Bonjour,

je ne comprends pas trop. Déjà dans le code que tu donnes, je ne vois pas comment tu peux appuyer sur 3 touches en même temps vu qu'il y a 4 tests, et qu'ils sont appairés (Z contre S et Q contre D).
Donc il faut que tu détaille un peu plus ton soucis, car je en l'état je ne vois pas trop ce qui bloque.
Désolé je me suis mal exprimé, alors quand j'appuie sur au moins 3 touche en même temps (en gros quand 3 des tests sont vrais, mais ne fait pas attention au code a l'intérieur), les autres "if" ne sont pas éxécutés (dans mon script entier il ya une coroutine qui boucle et qui vérifie une condition, le "if" n'est pas éxécuté sur cette dernière) bref je me suis peut-être mal exprimé encore
A plus

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

Re: 3 conditions vraies simultanement bloquent systématiquement les autres conditions a false

Message par Max » 26 Mars 2022 19:12

je ne vois pas pourquoi les autres tests ne s'effectueraient pas. Il doit y avoir une autre raison.
le44 a écrit :
26 Mars 2022 18:58
(dans mon script entier il ya une coroutine qui boucle et qui vérifie une condition, le "if" n'est pas éxécuté sur cette dernière)
poste ton code complet dans ce cas, cela permettra de mieux comprendre le soucis.
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

le44
Messages : 28
Inscription : 21 Oct 2020 15:15

Re: 3 conditions vraies simultanement bloquent systématiquement les autres conditions a false

Message par le44 » 30 Mars 2022 22:07

Voici mon code entier:

Code : Tout sélectionner

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

public class Joueur2 : MonoBehaviour
{
    public Animator J2Anim;
    public bool joue = false;
    public float cadence;
    public Sprite tir;
    public bool manette;
    public float vitesse = 5;
    public GameObject balle;
    // Start is called before the first frame update
    IEnumerator Start()
    {
        J2Anim = GetComponent<Animator>();
        //print("attends...");
        yield return new WaitForSeconds(1.54f);
        //print("joueur 2 a rejoint!");
        joue = true;
        while (true)
        {
            if (Input.GetKey(KeyCode.E))
            {
                print("joueur 2 a tiré");
                GameObject flashDeTir = new GameObject();
                flashDeTir.AddComponent<SpriteRenderer>();
                flashDeTir.GetComponent<SpriteRenderer>().sprite = tir;
                flashDeTir.name = "Flash";
                flashDeTir.transform.SetPositionAndRotation(new Vector2((transform.rotation.y == 0) ? transform.position.x + 1.46f : transform.position.x - 1.46f, transform.position.y + 0.05f), transform.rotation) ;
                Instantiate(balle, transform.position, transform.rotation);
                Destroy(flashDeTir, 0.1f);
                yield return new WaitForSeconds(cadence);
            }
            print("boucle coroutine éxécutée");
            yield return null;
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (joue)
        {
            if (Input.GetKey(KeyCode.Z))
            {
                transform.Translate(0, vitesse * Time.deltaTime, 0); 
                print("éxécuté haut");
            }
            if (Input.GetKey(KeyCode.S))
            {
                transform.Translate(0, -vitesse * Time.deltaTime, 0); 
                print("éxécuté bas");
            }
            if (Input.GetKey(KeyCode.Q))
            {
                transform.Translate(vitesse * Time.deltaTime, 0, 0);
                transform.rotation = Quaternion.Euler(0, 180, 0);
                print("éxécuté gauche");
            }
            if (Input.GetKey(KeyCode.D))
            {
                transform.Translate(vitesse * Time.deltaTime, 0, 0);
                transform.rotation = Quaternion.Euler(0, 0, 0);
                print("éxécuté droite");
            }
            J2Anim.SetBool("avance", Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.Q) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.Z));
        }
    }

}

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

Re: 3 conditions vraies simultanement bloquent systématiquement les autres conditions a false

Message par boubouk50 » 31 Mars 2022 09:21

Mis à part que les transformations s'annulent, je ne vois pas où ça pourrait ne pas passer.
Je ne vois pas non plus de lien entre les conditions.
Es-tu en train de dire que si tu restes appuyer sur QSDZ, puis appuies sur E, alors la condition de la coroutine n'est pas validée?
Tes messages doivent être noyés dans la masse avec boucle coroutine exécutée qui s'écrit à chaque frame...
"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

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

Re: 3 conditions vraies simultanement bloquent systématiquement les autres conditions a false

Message par Max » 01 Avr 2022 18:22

moi ce qui m'interpelle c'est comment en es-tu arrivé à lancer un Start en coroutine infinie pour tester ton GetKey(KeyCode.E) ?
Cette approche, en parallèle des autres tests effectués eux dans l'Update est peut-être à l'origine de ton problème ?
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
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

Re: 3 conditions vraies simultanement bloquent systématiquement les autres conditions a false

Message par jmhoubre » 01 Avr 2022 20:53

Bonsoir,

il me semble que le nombre de touches simultanément utilisables est un paramètre du BIOS. J'ai trouvé quelques posts parlant de 3 ou 4 touches par défaut.
Mais je n'arrive pas à reproduire ce problème.

le44
Messages : 28
Inscription : 21 Oct 2020 15:15

Re: 3 conditions vraies simultanement bloquent systématiquement les autres conditions a false

Message par le44 » 01 Avr 2022 22:34

Max a écrit :
01 Avr 2022 18:22
moi ce qui m'interpelle c'est comment en es-tu arrivé à lancer un Start en coroutine infinie pour tester ton GetKey(KeyCode.E) ?
Cette approche, en parallèle des autres tests effectués eux dans l'Update est peut-être à l'origine de ton problème ?
Ce n'est pas fait par hazard, le tir a une cadence et on doit attendre un certain temps a chaque fois que l'on tire

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

Re: 3 conditions vraies simultanement bloquent systématiquement les autres conditions a false

Message par Max » 02 Avr 2022 09:50

Ok, je comprend mieux effectivement.
Je viens de tester, et en effet il ne prend pas l'appui sur E quand tu as par exemple Q/S/D d'appuyé.
Avec deux cela fonctionne par exemple.
Autre chose, si je remplace l'appui sur E par un appui sur H par exemple, dans ce cas cela fonctionne.
Comme le souligne jmhoubre, y a t il certaines limitations liées au hardware et au maillage clavier ?
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

Répondre

Revenir vers « Scripting »