Двойной прыжок и прыжок в зависимости от долготы зажатия кнопки

Я пытаюсь создать игру с двойным прыжком + прыжок от времени нажатия кнопки. Двойной прыжок должен сработать, когда персонаж входит в триггер другого игрового объекта. Как в игре "Geometry Dash". У меня с этим возникли трудности, сам двойной прыжок не работает.

Вот код другого игрового объекта:

public class CubeController : MyCharacterController
{
    // Start is called before the first frame update
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag == "Player")
        {
            ExtraJump++;
        }
    }
}

Вот код прыжка:

    int extraJump = 0;
    int defaultExtraJump = 1;
    protected int ExtraJump { get => extraJump; set => extraJump = value; }
float littleJumpForce = 20;
    float jumpForce = 60;
    float maxJumpTime=0.1f;
    float defaultMaxJumpTime = 0.1f;

public void CheckGround()
    {
        isGround = Physics2D.OverlapCircle(groundCheck.transform.position, groundRadius, whatIsGround);
    }
 void Start()
    {
        maxJumpTime = defaultMaxJumpTime;
        extraJump = defaultExtraJump;
    }
  private void FixedUpdate()
    {
        Jump();
        CheckGround();
    }
public void Jump()
    {
        if (isGround)
        {
            maxJumpTime = defaultMaxJumpTime;
            extraJump = defaultExtraJump;
        }
    if (extraJump > 0)
    {
        if (isGround && Input.GetKeyDown(KeyCode.UpArrow))
        {
            rb.AddForce(new Vector2(0, littleJumpForce), ForceMode2D.Impulse);
            maxJumpTime = defaultMaxJumpTime;
        }
        if (Input.GetKey(KeyCode.UpArrow) && maxJumpTime >= 0)
        {
            maxJumpTime -= Time.deltaTime * 4;
            rb.AddForce(new Vector2(0, jumpForce), ForceMode2D.Impulse);
        }
        if (Input.GetKeyUp(KeyCode.UpArrow) && !isGround)
        {
            maxJumpTime = -1;
            extraJump--;
        }
    }else if (extraJump == 0 && !isGround)
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            rb.AddForce(new Vector2(0, littleJumpForce), ForceMode2D.Impulse);
            maxJumpTime = defaultMaxJumpTime;
        }

        if (Input.GetKey(KeyCode.UpArrow) && maxJumpTime >= 0)
        {
            maxJumpTime -= Time.deltaTime* 4;
            rb.AddForce(new Vector2(0, jumpForce), ForceMode2D.Impulse);
        }

        if (Input.GetKeyUp(KeyCode.UpArrow) && !isGround)
        {
            maxJumpTime = -1;
            extraJump--;
        }
    }
    animator.SetBool("isGround", false);
}

У меня очень мало опыта в Юнити((( Помогите кто-то пожалуйста.


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