Page 1 sur 2

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

Publié : 26 Mars 2022 16:13
par le44
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);
            }
     }

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

Publié : 26 Mars 2022 16:32
par Max
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.

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

Publié : 26 Mars 2022 18:58
par le44
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

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

Publié : 26 Mars 2022 19:12
par Max
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.

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

Publié : 30 Mars 2022 22:07
par le44
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));
        }
    }

}

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

Publié : 31 Mars 2022 09:21
par boubouk50
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...

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

Publié : 01 Avr 2022 18:22
par Max
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 ?

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

Publié : 01 Avr 2022 20:53
par jmhoubre
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.

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

Publié : 01 Avr 2022 22:34
par le44
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

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

Publié : 02 Avr 2022 09:50
par Max
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 ?