У меня есть код для движения персонажа, но функция заземления никогда не возвращает значение null, и хотя я проверяю слой земли, он все еще думает, что нужно проверить столкновение с коллайдером игрока, чтобы я мог продолжать прыгать вечно.
public float jumpVelocity;
private bool keyPressedW;
private bool isGrounded;
private Rigidbody2D rigidbody2d;
private BoxCollider2D boxCollider2d;
void Start()
{
rigidbody2d = transform.GetComponent<Rigidbody2D>();
boxCollider2d = transform.GetComponent<BoxCollider2D>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.W))
keyPressedW = true;
if (IsGrounded())
isGrounded = true;
else isGrounded = false;
}
private void FixedUpdate()
{
if (keyPressedW && isGrounded)
{
rigidbody2d.velocity = Vector2.up * jumpVelocity;
keyPressedW = false;
}
}
private bool IsGrounded()
{
RaycastHit2D raycastHit2d = Physics2D.BoxCast(boxCollider2d.bounds.center,
boxCollider2d.bounds.size, 0f, Vector2.down * 0.1f ,
LayerMask.GetMask("Platform"));
Debug.Log(raycastHit2d.collider);
return raycastHit2d.collider != null;
}