Page 1 sur 1

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

Publié : 14 Avr 2023 20:21
par Kaillou473
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é 636 fois
Si quelqu'un a une solution, je lui serait reconnaissent.

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

Publié : 14 Avr 2023 21:02
par jmhoubre
Bonjour,

le code ci-dessous sert à quoi ?

Code : Tout sélectionner

if (isGrounded)
{
	isJumping = false;
}

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

Publié : 15 Avr 2023 00:52
par Kaillou473
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.