problème d'animation de saut(jeu de plateforme)

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Kaillou473
Messages : 2
Inscription : 13 Avr 2023 15:58

problème d'animation de saut(jeu de plateforme)

Message par Kaillou473 » 14 Avr 2023 20:21

Bonjour tous le monde, j'ai besoin d'aide pour régler un problème d'animation, occasionnellement l'animation de saut ne se joue pas et reste sur l'animation d'attente ou de marche. Je préfère préciser je suis un GROS débutant, sa fait que 1 mois que je m'y suis mis. Sa fait quelque jour que cherche une solution, j'ai essayer des truc que j'ai vu dans des tuto mais rien a faire.

Voici mon code

Code : Tout sélectionner

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed;
    public float jumpForce;

    private bool isGrounded;
    private bool isJumping = false;

    public Transform groundCheck;
    public float groundCheckRadius;
    public LayerMask collisionLayers;

    public Rigidbody2D rb;
    public Animator animator;
    public SpriteRenderer spriteRenderer;

    private Vector3 velocity = Vector3.zero;
    private float horizontalMovement;
    private float verticalMovement;

    void Update()
    {
        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            isJumping = true;
            rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
            animator.SetTrigger("Jump");
        }

        Flip(rb.velocity.x);

        float characterVelocity = Mathf.Abs(rb.velocity.x);
        float verticalVelocity = rb.velocity.y;
        animator.SetFloat("VerticalVelocity", verticalVelocity);
        animator.SetFloat("Speed", characterVelocity);
        animator.SetBool("IsGrounded", isGrounded);
        animator.SetBool("IsJumping", isJumping);
    }

    void FixedUpdate()
    {
        horizontalMovement = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
        verticalMovement = rb.velocity.y;

        isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, collisionLayers);

        if (isGrounded)
        {
            isJumping = false;
        }

        MovePlayer(horizontalMovement, verticalMovement);

        if (rb.velocity.y < 0)
        {
            rb.velocity += Vector2.up * Physics2D.gravity.y * Time.deltaTime;
        }
    }

    void MovePlayer(float _horizontalMovement, float _verticalMovement)
    {
        Vector3 targetVelocity = new Vector2(_horizontalMovement, _verticalMovement);
        rb.velocity = Vector3.SmoothDamp(rb.velocity, targetVelocity, ref velocity, .05f);
    }

    void Flip(float _velocity)
    {
        if (_velocity > 0.1f)
        {
            spriteRenderer.flipX = false;
        }
        else if (_velocity < -0.1f)
        {
            spriteRenderer.flipX = true;
        }
    }

    private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(groundCheck.position, groundCheckRadius);
    }
}

Et mon Animator, j'utilise le isJumping dans les transition de l'idle et run à jump et le isgrounded de la jump à l'idle et run.
Capture d'écran 2023-04-14 201534.png
Capture d'écran 2023-04-14 201534.png (76.78 Kio) Consulté 606 fois
Si quelqu'un a une solution, je lui serait reconnaissent.

Avatar de l’utilisateur
jmhoubre
Messages : 860
Inscription : 05 Oct 2019 22:05

Re: problème d'animation de saut(jeu de plateforme)

Message par jmhoubre » 14 Avr 2023 21:02

Bonjour,

le code ci-dessous sert à quoi ?

Code : Tout sélectionner

if (isGrounded)
{
	isJumping = false;
}

Kaillou473
Messages : 2
Inscription : 13 Avr 2023 15:58

Re: problème d'animation de saut(jeu de plateforme)

Message par Kaillou473 » 15 Avr 2023 00:52

Salut, ce code si j'ai bien compris c pour s'assurer que isjumping repasse bien sur false. Isjumping sert à confirmer que le joueur saute. Dans mon code, il est égal à = false, il passe à true dans la fonction update,

Code : Tout sélectionner

private bool isJumping = false;
 
 if (Input.GetButtonDown("Jump") && isGrounded)
        {
            isJumping = true;
            rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
            animator.SetTrigger("Jump");
        }
et le code if(isGrounded) confirme que isjumping est bien repasser a false. j'ai lu sa sur un tuto mais sa a pas régler mon problème.

Répondre

Revenir vers « Unity le logiciel »