Подтвердить что ты не робот

Альтернативы обновления коллайдера сетки во время выполнения?

Я работаю над игрой, где пользователь генерирует сетку во время выполнения (все время), поэтому сетка имеет много вершин, и в то же время есть GameObject - проигрыватель, которому необходимо вызвать событие, когда оно находится в области этого сгенерированного в среда выполнения.

Камера в этой игре 3D, но эта сгенерированная сетка плоская. В моем прикрепленном чертеже я показываю это в виде сверху, чтобы лучше показать, как это выглядит.

Теперь я обновляю Mesh Collider каждые несколько секунд, но он очень медленный, когда сгенерированная сетка имеет все больше и больше вершин.

Я считаю, что это очень простой метод столкновения, поэтому, возможно, есть какой-либо другой метод для обнаружения этого вместо Mesh Collider, подключенного к динамически сгенерированной сетке?

ОБНОВЛЕНИЕ # 1

Я знаю, что Mesh Collider очень медленный и не должен обновляться во время выполнения. Я также знаю идею, которая должна использовать примитивы, такие как box collider.

Но в этой ситуации, когда эта плоская сетка обновляется каждую секунду (и она растет), это будет тысячи коллайдеров в коробке, и каждая новая необходимость должна добавляться каждую секунду. Этот метод также не будет работать.

ОБНОВЛЕНИЕ # 2

Моя вторая идея - найти ближайшие треугольники для игрока и создать для них коллайдеры (полевые коллайдеры должны быть самыми быстрыми). Но я действительно не знаю, с чего начать, или это даже возможно? Кто-нибудь?

Рисунок 2, как ответ для @Hristo

Рисование

4b9b3361

Ответ 1

Вы можете использовать raycasting - для этого обычно требуется коллайдер, но я нашел this (script для raycasting на сетке, без коллайдеров), которые, я считаю, вы можете использовать в своем случае.

Затем вы можете ввести невидимый фон в свою сгенерированную сетку и использовать raycasting для обнаружения того, что попадает в первую очередь. Если ваш игрок останется квадратным, вы можете бросить луч из четырех углов, и если все 4 луча попадут в сетку, вы знаете, что вы на нем.

В случае перекрытия, поскольку код из ссылки может обнаруживать множественные треугольники, попадающие на один и тот же луч, если число ударов триаглов больше 1, вы знаете, что у вас есть перекрытие. И вы, вероятно, могли бы использовать порядок в виде z-индекса.

Я не пробовал код, но, похоже, он работал для других. Надеюсь, это поможет!