Unity: Как найти пустую дыру в стене для игрока? - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь выяснить простую пользовательскую 2D физику для платформера.В данный момент я использую приведение лучей, чтобы выяснить столкновение между игроком и картой.Однако использование лучей имеет некоторые проблемы.Например, если игрок падает (имеет довольно высокую скорость падения), он не может подхватить отверстия в стене, потому что он проходит мимо них из-за того, что заходит слишком далеко вниз, чтобы быть обнаруженным как пустое пространство.

Одно решениесостоит в том, чтобы перейти к системе на основе плиток вместо использования приведения лучей, но я бы предпочел не делать этого.

Так что мне интересно, есть ли какое-то решение для определения пустых отверстий в стене, даже небольших краевых отверстий безогромное влияние на производительность

1 Ответ

0 голосов
/ 16 июня 2019

Physics2D.BoxCast - вот как я бы занялся этим. Он делает то, что вы ожидаете, вместо луча он рассчитывает, как если бы полный ящик проходил расстояние.

Использование очень похоже на лучевое вещание. Пример:

public Collider2D mainCollider;
public Vector2 velocity;

void Update() {
    Vector2 origin = new Vector2(transform.position.x, transform.position.y);
    Vector2 size = mainCollider.bounds.size;
    Vector2 direction = velocity * Time.deltaTime;
    float maxDist = velocity.magnitude;

    var hit = Physics2D.BoxCast(origin, size, 0, direction, maxDepth);

    if (hit == null) {
        transform.position += direction;
    } else {
        transform.position += direction.normalized * hit.distance;
    }
}

Если коробки не по вкусу, есть также Physics2D.CapsuleCast и Physics2D.CircleCast.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...