Как я могу изменить код, чтобы мой джойстик заставлял моего персонажа изменять скорость прыжка только один раз? - PullRequest
1 голос
/ 24 марта 2020

У меня настроен джойстик, чтобы заставить моего персонажа двигаться.

public Joystick joystick;

 private void Update()
    {
        if (joystick.Horizontal >= .2f)
        {
            horizontalMove = runSpeed;
        }
        else if (joystick.Horizontal <= -0.2f)
        {
            horizontalMove = -runSpeed;
        }
        else
        {
            horizontalMove = 0;
        }

        float verticalMove = joystick.Vertical;

        if (verticalMove >= .8f && controller.m_Grounded)
        {
            jump = true;
        }
        else
        {
            jump = false;
        }
    }

Вертикальная часть прекрасно работает, но всякий раз, когда я прыгаю, она дважды запускает код в операторе if. Однако, если я go перехожу в режим отладки и делаю это кадр за кадром, он запускает строку только один раз. Если я позволю go моего джойстика достаточно быстро, он также запускает строку только один раз.

У меня также есть скрипт контроллера персонажа, на который я ссылаюсь, чтобы заставить джойстик делать вещи.

void FixedUpdate()
    {
        controller.Move(horizontalMove * Time.fixedDeltaTime, crouch, jump);
        jump = false;
    }

Сценарий контроллера моего персонажа выглядит следующим образом

public void Move(float move, bool crouch, bool jump)
    {
        if (knockbackCount <= 0)
        {
            // Move the character by finding the target velocity
            Vector3 targetVelocity = new Vector2(move * 10f, m_Rigidbody2D.velocity.y);
            // And then smoothing it out and applying it to the character
            m_Rigidbody2D.velocity = Vector3.SmoothDamp(m_Rigidbody2D.velocity, targetVelocity, ref velocity, m_MovementSmoothing);
            // If the input is moving the player right and the player is facing left...
            if (move > 0 && !m_FacingRight)
            {
                // ... flip the player.
                Flip();
            }
            // Otherwise if the input is moving the player left and the player is facing right...
            else if (move < 0 && m_FacingRight)
            {
                // ... flip the player.
                Flip();
            }
            // If the player should jump...
            if (m_Grounded == true && jump)
            {
                // Add a vertical force to the player.
                m_Rigidbody2D.AddForce(new Vector2(0f, m_JumpForce));
                animator.SetTrigger("takeOff");
            }

            if (m_Grounded && move != 0)
            {
                m_CapsuleCollider.sharedMaterial = m_Slippery;
            }
            else
            {
                m_CapsuleCollider.sharedMaterial = m_Rigid;
            }
            if (!m_Grounded)
            {
                m_CapsuleCollider.sharedMaterial = m_Slippery;
                animator.SetBool("isJumping", true);
            }
            else
            {
                animator.SetBool("isJumping", false);
            }
        }
        if (knockFromRight && knockbackCount > 0)
        {
            m_Rigidbody2D.velocity = new Vector2(-knockback, knockback / 2);
        }
        if (!knockFromRight && knockbackCount > 0)
        {
            m_Rigidbody2D.velocity = new Vector2(knockback, knockback / 2);
        }
        knockbackCount = -1;
    }

Что я здесь не так делаю? Я попытался переместить все в один сценарий, а также удалить строку «if m_Gounded == true && jump» и добавить силу под линией джойстика.

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