Вариант Physics2D.OverlapBox
Я хотел сделать проверку на прыжки на землю через радиус нижней точки ног (коллайдер всего тела) через Physics2D .OverlapBox, но была проблема, которая всегда возвращала false - переход не удался.
private bool CheckLegsCollision()
{
Vector2 legsPoint;
legsPoint.x = CharachterBoxCollider.transform.position.x - (CharachterBoxCollider.size.x * Mathf.Abs(CharachterBoxCollider.transform.localScale.x)) / 2;
legsPoint.y = CharachterBoxCollider.transform.position.y + (CharachterBoxCollider.size.y * Mathf.Abs(CharachterBoxCollider.transform.localScale.y)) / 2;
Vector2 legsArea;
legsArea.x = CharachterBoxCollider.size.x * Mathf.Abs(CharachterBoxCollider.transform.localScale.x);
legsArea.y = 0.1f;
return Physics2D.OverlapBox(legsPoint, legsArea, 0f) != null;
}
Variant Physics2D.OverlapCircle
Все работало хорошо, но я заметил, что если в «transform.scale» объекта, к которому я использую сценарий, Y больше X, то CheckLegsCollision () всегда ложно и также невозможно перейти. Но если Y меньше, чем X, то все в порядке - если радиус равен земле, то возвращается true и скачок получается
private bool CheckLegsCollision()
{
Vector2 legsPoint;
legsPoint.x = CharachterBoxCollider.transform.position.x;
legsPoint.y = CharachterBoxCollider.transform.position.y + (CharachterBoxCollider.size.y * Mathf.Abs(CharachterBoxCollider.transform.localScale.y)) / 2;
float radius = (CharachterBoxCollider.size.x * Mathf.Abs(CharachterBoxCollider.transform.localScale.x)) / 2;
return Physics2D.OverlapCircle(legsPoint, radius, WhatIsGround) != null;
}