Проблема с чтением координат через Physics2D.Overlap в Unity3D - PullRequest
0 голосов
/ 05 марта 2020

Вариант 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...