Unity 2D Jump Button Onclick Animation не работает должным образом - PullRequest
0 голосов
/ 14 июля 2020

Сижу часами над одной и той же проблемой. Я делаю игру WebGL, в которую можно играть с помощью мобильного управления (сенсорное управление) или с клавиатуры при игре на P C. В начале игры игрока спрашивают, играет ли он с клавиатурой или мобильным устройством, что затем меняет пользовательский интерфейс на джойстик и кнопки, когда он играет на мобильном телефоне. есть bools, которые управляют анимацией, например, когда anim.SetBool ("Jump", true) запускается анимация прыжка. Когда false и Player не имеет движения, воспроизводится Idle Animation, или когда false и Movement воспроизводится, Walking Animation.

Все это отлично работает, когда я нажимаю «Пробел». Когда я нажимаю Space Jump, вызывается ().

Движение игроков нормальное при игре с клавиатурой, но мне очень трудно заставить работать кнопку прыжка. Персонаж прыгает, но по каким-либо причинам анимация работает только тогда, когда ввод осуществляется с клавиатуры. Кроме того, и кнопка, и клавиатура просто вызывают одну и ту же функцию, посмотрите:

using UnityEngine.UI;

public class PlayerMovement : MonoBehaviour
{
    //...
    public bool isMobile;
    public Joystick joystick;

    GameObject rend;

    public Button buttonJump;

    void Start()
    {
        // HERE Jump() IS INVOKED, WHEN THE JUMP BUTTON IS PRESSED!
        buttonJump.onClick.AddListener(Jump);
    }

    void Update()
    {
        PlayerJump();
        CheckIsGrounded();
    }

    private void FixedUpdate()
    {
        PlayerWalk();
    }

    void PlayerJump()
    {
        if (isGrounded)
        {
            if ( Input.GetKey(KeyCode.Space))
            {
                Jump();
            }
        }
    }

    //WHEN INVOKED VIA JUMP BUTTON, THE PLAYER MOVES UP FINE, BUT THE JUMP ANIMATION DOES NOT START!
    public void Jump()
    {
        if (isGrounded)
        {
            anim.SetBool("Jump", true);
            jumped = true;
            myBody.velocity = new Vector2(myBody.velocity.x, jumpPower);
        }
    }

    void CheckIsGrounded()
    {
        isGrounded = Physics2D.Raycast(groundCheckPosition.position, Vector2.down, 0.1f, groundLayer);

        if (isGrounded)
        {
            if (jumped) 
            {
                anim.SetBool("Jump", false);

                jumped = false;
            }
        }
    }
}

1 Ответ

0 голосов
/ 15 июля 2020

У меня есть обходной путь, я думаю, что в самом Unity есть что-то вроде ошибки (с использованием 2019.3.8f1). Я просто создал собственный скрипт, только для одной кнопки Jump, когда она нажата, устанавливает bool для Animator и добавляет скорость к твердому телу, точно так же, как я писал в старом коде, но в новом скрипте это работает.

...