Персонаж иногда не может прыгать с разбегу

Я новичок и делаю 2d платформер. Не могу понять с чем связано, что персонаж прыгает через раз или вообще не прыгает с разбегу, когда зажата клавиша A или D и нажата клавиша Backspace, но это не постоянно, а только в некоторых ситуациях. Например, когда игра запущена и я двигаюсь вправо, я могу прыгать с разбегу, но стоит мне повернуться налево и я уже теряю эту возможность. Может быть я не в правильном порядке вызываю функции в Update или в FixedUpdate, не знаю. Нужна помощь с отладкой, хотел бы узнать наиболее вероятные причины этой проблемы. Код:

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

public class PlayerController : MonoBehaviour
{  
    private float movementInput; 
    private bool isFacRight = true; 
    private bool isRun;
    private bool isGrounded;
    private bool canPersonJump;
    private Rigidbody2D rigidbody2D;
    private Animator animator;


    public float movementSpeed = 10.0f;
    public float forceJump = 15.0f;
    public float groundCheckRad;
    public Transform groundCheck;
    public Transform wallCheck;
    public LayerMask whatIsGround;

    private bool jumpOrNot;

    void Start()
    {
        rigidbody2D = GetComponent<Rigidbody2D>();
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        CheckIfCanJumpHero();
        CheckInputPlayer();
        CheckDirectionMovement();
        UpdateAnimations();
        
    }
    private void FixedUpdate()
    {
        ApplyMovement();
        CheckSurrndings();
    }

    private void CheckIfCanJumpHero() //Нужна для дого, чтобы ограничить прыжки персонажа
    {
        if(isGrounded && rigidbody2D.velocity.y <= 0)
        {
            canPersonJump = true;
        }
        else
        {
            canPersonJump = false;
        }
    }
    private void CheckSurrndings() // Проверка того касается ли персонаж земли
    {
        isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRad, whatIsGround);
    }
    private void CheckDirectionMovement() //Проверяет направление движения
    {
        if (isFacRight && movementInput < 0)  //Если персонаж смотрит вправо, но пытается двигаться влево, то переворачиваем спрайт персонажа
        {
            Flip();
        }
        else if (!isFacRight && movementInput > 0)
        {
            Flip();
        }
        if (rigidbody2D.velocity.x != 0)
        {
            isRun = true;
        }
        else
        {
            isRun = false;
        }
    }
    private void CheckInputPlayer() //Используется для проверки типа ввода игрока: или нажаты клавиши A и D для движения или пробел
    {
        movementInput = Input.GetAxisRaw("Horizontal");
        if (Input.GetButtonDown("Jump"))
        {
            Jump();
        }
    }

    private void UpdateAnimations() // Для смены анимаций
    {
        animator.SetBool("isRun", isRun);
    }

    private void ApplyMovement() //Изменяет скорость тела 
    {
       rigidbody2D.velocity = new Vector2(movementSpeed * movementInput, rigidbody2D.velocity.y);
    }
    private void Flip() //  Поворачивает персонажа на 180 градусов
    {
          isFacRight = !isFacRight;
          transform.Rotate(0.0f, 180.0f, 0.0f);
    
    }
    private void Jump()
    {
        if (canPersonJump)
        {
           rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x, forceJump);
        }
           
    }
    private void OnDrawGizmos()
    {
        Gizmos.DrawWireSphere(groundCheck.position, groundCheckRad);
    }




}

Ответы (0 шт):