!TouchPlatform.isTouch остается false и из-за этого анимация проигрывается не полностью
При прыжке !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 во время прыжка. При дебаггинге все работает как надо.
Источник: Stack Overflow на русском