!TouchPlatform.isTouch остается false и из-за этого анимация проигрывается не полностью

Рейтинг: 1Ответов: 0Опубликовано: 26.08.2023

При прыжке !TouchPlatform.isTouch на некоторое время остается как false, из-за чего isJump меняется сразу на false и анимация начала прыжка проигрывается не полностью.

private void Update()
{
    if (!isJump && !TouchPlatform.isTouch)
    {
        animator.SetTrigger("isFall");
    }
    isJump = isJump && !TouchPlatform.isTouch;

    if ((Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown(KeyCode.W)) && TouchPlatform.isTouch)
    {
        rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
        animator.SetTrigger("StartJump");
        isJump = true;
    }
}

Вот еще код для проверки положения объекта на платформе

public class TouchPlatform : MonoBehaviour
{
    public bool isTouch;

    private void OnCollisionExit2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Platform"))
        {
            isTouch = false;
        }
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Platform"))
        {
            isTouch = true;
        }
    }
}

Если заменить вот эту строчку isJump = isJump && !TouchPlatform.isTouch; на вот эту isJump = isJump && rb.velocity.y > 0 то все работает как надо, но мне интересно почему все-таки в изначальном варианте объект как будто находится на земле, хотя клавиша для прыжка уже нажата и в меню unity переменная isTouch стоит как false во время прыжка. При дебаггинге все работает как надо.

Ответы

Ответов пока нет.