JumpCount сбрасывается сразу после прыжка 2D-платформера - PullRequest
1 голос
/ 07 апреля 2020

Я довольно новичок во всем этом, так что извините за ошибки ладьи ie. Я делаю 2D-платформер. Я проверяю землю с помощью RayCast, и сразу после прыжка игрок jumpCounter сбрасывает в 0, поэтому я получаю бонусный прыжок. Я попытался добавить таймер 0,2 с, прежде чем он сможет сброситься, но это вызвало проблемы при многократном прыжке подряд (прыжок кролика). Любая помощь?

private void FixedUpdate()
    {
        GroundCheck();
        if (state != State.hurt)
        {
            Movement();
            DoubleJump();
            StateMachine();
        }

        HurtCheck();
        anim.SetInteger("state", (int)state);
    }
    private void Movement()
    {
        //Input.GetAxis returns a value between -1 up to 1
        //Edit> Project Settings> Input> Axis> Horizontal
        float hDirection = Input.GetAxisRaw("Horizontal");

        //holding down "D" makes the value positive and vice versa
        if (hDirection < 0)
        {
            rb.velocity = new Vector2(-speed, rb.velocity.y);
            transform.localScale = new Vector2(-1, 1);
        }
        else if (hDirection > 0)
        {
            rb.velocity = new Vector2(speed, rb.velocity.y);
            transform.localScale = new Vector2(1, 1);
        }
        else
        {

        }

        if (Input.GetButtonDown("Jump") && isGrounded == true)
        {
            Jump();
        }
    }
    private void Jump()
    {
        rb.velocity = new Vector2(rb.velocity.x, jumpforce);
        state = State.jumping;
        jumpCount += 1;
    }
    private void GroundCheck()
    {
        Debug.DrawRay(transform.position, Vector2.down * hitDistance, Color.green);
        RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.down, hitDistance, ground);
        if(hit.collider != null)
        {
            isGrounded = true;
            jumpCount = 0;
        }
        else
        {
            isGrounded = false;
        }
    }
    private void DoubleJump()
    {
        if (Input.GetButtonDown("Jump") && isGrounded == false && jumpCount < 2)
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpforce);
            jumpCount += 1;
        }
    }

1 Ответ

0 голосов
/ 08 апреля 2020

Эй. Вы убедились, что слой вашего игрока не является слоем ground, или правильно установили ground layermask или, может быть, hitDistance для raycast слишком велико, оно должно быть очень низким, например 0.1 или меньше? или jumpCount начинается с 0 или 1, пытаясь чередовать это, или, может быть, он начинается с двух, чтобы потерять дополнительный бонусный прыжок ... Это было бы то, где я бы посмотрел, Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...