У меня настроен джойстик, чтобы заставить моего персонажа двигаться.
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» и добавить силу под линией джойстика.