[RESOLU][DB-AL] Récupérer une valeur dans une zone

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
ludo2vie
Messages : 15
Inscription : 15 Juin 2021 05:43

[RESOLU][DB-AL] Récupérer une valeur dans une zone

Message par ludo2vie » 19 Juin 2021 15:48

Bonjour à tous,
Je sais qu'il y a déjà eu des sujet sur "comment récupérer des variables", mais j'avoue que je ne trouve pas de solution à mon problème.
J'ai un personnage qui peut soit marcher, soit courir. Marcher par la touche Z et courir lorsqu'on appuie sur Z + Q.
J'aimerais que dans certaine zone, il ne puisse que marcher.
J'ai créer une zone avec un script "zonemarche" ou je déclare la fonction "Zonelimite" en true ou false. Cette partie fonctionne, et la variable s'active bien dans la preview du jeu.
Mon soucis se situe au niveau du personnage.
J'aimerais que lorsqu'il est dans cette zone, il ne puisse pas courir. C'est à dire que lorsqu'on maintient la touche Q, la vitesse soit la même que celle de la marche.

Voici mon script du personnage et celui de la zone, j'espère que quelqu'un trouvera où est l'erreur.
J'ai mit en commentaire les parties concernant mon problème.
Merci beaucoup d'avance.
ZONE :

Code : Tout sélectionner

public class zonemarche : MonoBehaviour
{
    public bool Zonelimite;

    void Start()
    {
        Zonelimite = false;
    }

    void OnTriggerEnter()
    {
        Zonelimite = true;
    }
    void OnTriggerExit()
    {
        Zonelimite = false;
    }
}
PERSONNAGE :

Code : Tout sélectionner

public class DeplacementPerso : MonoBehaviour
{
    public float speed = 10.0f;
    public float speedRotation = 180.0f;
    public float minToMove = 0.1f;
    Animator anim;
    public float vitesseplayer;
    public zonemarche Zonelimite; ///////////// RECUPERER LA VARIABLE
    float horizontalSpeed = 2.0f;
    
    void Start()
    {
        anim = GetComponent<Animator>();
        Cursor.visible = false;
        vitesseplayer = speed;
        Zonelimite = GetComponent<zonemarche>();///////////// RECUPERER LA VARIABLE
    }
    void Update()
    {
        vitesseplayer = speed;
        float h = horizontalSpeed * Input.GetAxis("Mouse X");
        transform.Rotate(0,h,0);

        if (Input.GetKey(KeyCode.Z) == true)
        {
            anim.SetBool("walkplayer", true);
            gameObject.transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.Self);
        }
        else
            anim.SetBool("walkplayer", false);

        if (Input.GetKey(KeyCode.S) == true)
        {
            anim.SetBool("arriereplayer", true);
            gameObject.transform.Translate(-Vector3.forward * speed * Time.deltaTime, Space.Self);
        }
        else
            anim.SetBool("arriereplayer", false);

        if (Input.GetKey(KeyCode.Q) == true)
        {
            if (Zonelimite) //// SI ON ENTRE EN ZONE DE MARCHE, IMPOSSIBLE DE COURIR
            {
                speed = 3;
                anim.SetFloat("vitesseplayer", speed);
            }
            else
                speed = 10;
                anim.SetFloat("vitesseplayer", speed);
        }
        else
            speed = 3;
            anim.SetFloat("vitesseplayer", speed);
    }
}
Dernière édition par ludo2vie le 19 Juin 2021 18:54, édité 1 fois.

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

Re: [DB-AL] Récupérer une valeur dans une zone

Message par Max » 19 Juin 2021 17:30

Bonjour,

Je te conseille ce tuto: basique, pas très long et en français: https://www.youtube.com/watch?v=r5ZV9hHiI7o
Tu devrais y voir beaucoup plus clair.
Car dans ton script DeplacementPerso.cs, quand tu écris if (Zonelimite), tu accèdes simplement à la référence du script que tu auras renseigné dans l'inspector, et non pas à la donnée Zonelimite de celui-ci.
Il faudrait écrire dans ton cas plutôt if (Zonelimite.Zonelimite).
Deux commentaires. Attention au nommage de tes classes et données, car tu vois vite que cela peut amener de la confusion et un problème de lisibilité. En suite, dans ce que tu cherches à faire, c'est plutôt à la zone de détection de transmettre l'information d'entré/sortie vers le script du joueur et non l'inverse (au script du joueur d'aller cherche une valeur en permanence), surtout si tu as plusieurs zones à gérer (ce qui est souvent le cas).
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

ludo2vie
Messages : 15
Inscription : 15 Juin 2021 05:43

Re: [DB-AL] Récupérer une valeur dans une zone

Message par ludo2vie » 19 Juin 2021 18:53

Merci beaucoup de ton lien.
Effectivement, j'ai changé de technique et j'ai suivi ton conseil, en attribuant la fonction sur la zone, et non pas sur le personnage.
J'ai créé une "public int marcheapied" dans le perso, et j'ai modifié mon script de zone :

Code : Tout sélectionner

public class Zonemarche : MonoBehaviour
{
    public DeplacementPerso deplacementPerso;
    // Start is called before the first frame update

    void Start()
    {
        deplacementPerso.marcheapied = 0;
    }

    // Update is called once per frame
    void OnTriggerEnter()
    {
        deplacementPerso.marcheapied = 1;
    }

    void OnTriggerExit()
    {
        deplacementPerso.marcheapied = 0;
    }
}
J'avoue que je n'ai pas réussi avec une bool true / false.
Mais le résultat est quand même là puisque ça marche ;-)
Merci pour le tuto qui m'a bien aidé.

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

Re: [DB-AL] Récupérer une valeur dans une zone

Message par Max » 19 Juin 2021 20:45

ludo2vie a écrit :
19 Juin 2021 18:53
J'ai créé une "public int marcheapied" dans le perso, et j'ai modifié mon script de zone :
dans ce cas, tu pourrais donc écrire public bool marcheapied = false;
marcheapied pouvant alors prendre la valeur true (vrai) ou false(faux).
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 »