Сижу часами над одной и той же проблемой. Я делаю игру 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;
}
}
}
}