Page 1 sur 1

[RESOLU] [DB] Ne sauter qu'une fois

Publié : 01 Mai 2019 23:27
par Taekko
Bonjour,
Aujourd'hui j'ai essayer de créer mon premier "jeux" sur unity en suivant ce tuto : https://www.youtube.com/watch?v=_KQFhMpV-Do

C'est la première fois que je fais de la programmation au temps dire que mon niveau est extrémement bas
Je suis au time code : 24:10 (j'ai aussi fait l'étape d'après en mettant le tag de la plateforme en Ground) j'ai excatement le même script que lui mais le problème c'est que mon personnage ne saute plus du tout.
Voici le code :

Code : Tout sélectionner

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

public class CharacterBehaviors : MonoBehaviour
{
    public Rigidbody2D rb;
    public float vitesse;
    public float maxJump;
    private bool isGrounded = false;
    // Start is called before the first frame update
    void Start()
    {
        rb.velocity += new Vector2(vitesse, 0);



    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKeyDown("space") && isGrounded)
        {
            Jump();

        }
    }
    
    void Jump ()
    {
        rb.velocity += new Vector2(0, maxJump);
    }

    private void OnCollisionEnter2D(Collision2D col)
    {
        if (col.gameObject.CompareTag("Ground"))
        {
            isGrounded = false;
        }

    }
}]

Si quelqu'un pourrait m'aider ce serait sympa :langue3:

PS: Ca fait 1h30 que je cherche j'ai regardé plusieurs tuto ect... mais je n'y arrive toujours pas c'est pour ca que je me permet de poster ce topic

Re: [DB] Ne sauter qu'une fois

Publié : 02 Mai 2019 10:42
par Moi 1971
Bonjour,
je pense que votre problème vient que la valeur du booléen isGrounded reste toujours à "false" et ne passe jamais à "true".
En effet le saut du personnage est conditionné par le fait que la touche "space" soit appuyée ET que isGrounded soit égal à "true"

Code : Tout sélectionner

if(Input.GetKeyDown("space") && isGrounded)
        {
            Jump();
 }
Le booléen isGrounded est initialisé "au départ" à "false" (pour dire => Le personnage ne touche pas le sol) et devrait logiquement passer à "true" quand il touche le sol. Et ça, ça devrait se faire dans la fonction "OnCollisionEnter2D".
A mon avis il faut modifier cette fonction comme ceci :

Code : Tout sélectionner

private void OnCollisionEnter2D(Collision2D col)
    {
        if (col.gameObject.CompareTag("Ground"))
        {
            isGrounded = true;
        }

    }
J'ai pas vu la vidéo... Mais après logiquement il faudra modifier le code suivant pour pas que le personnage puisse sauter à l'infini alors qu'il est en l'air, puis après implémentation du double saut avec un booléen etc... ;-)

Code : Tout sélectionner

if(Input.GetKeyDown("space") && isGrounded)
        {
            isGrounded = false;
            Jump();

        }

Re: [DB] Ne sauter qu'une fois

Publié : 02 Mai 2019 18:09
par Taekko
Merci de ta réponse !
En effet c'était bien cela merci de m'avoir aidée.
Bonne continuation :hello: