Альтернативы обновления коллайдера сетки во время выполнения?
Я работаю над игрой, где пользователь генерирует сетку во время выполнения (все время), поэтому сетка имеет много вершин, и в то же время есть GameObject - проигрыватель, которому необходимо вызвать событие, когда оно находится в области этого сгенерированного в среда выполнения.
Камера в этой игре 3D, но эта сгенерированная сетка плоская. В моем прикрепленном чертеже я показываю это в виде сверху, чтобы лучше показать, как это выглядит.
Теперь я обновляю Mesh Collider каждые несколько секунд, но он очень медленный, когда сгенерированная сетка имеет все больше и больше вершин.
Я считаю, что это очень простой метод столкновения, поэтому, возможно, есть какой-либо другой метод для обнаружения этого вместо Mesh Collider, подключенного к динамически сгенерированной сетке?
ОБНОВЛЕНИЕ # 1
Я знаю, что Mesh Collider очень медленный и не должен обновляться во время выполнения. Я также знаю идею, которая должна использовать примитивы, такие как box collider.
Но в этой ситуации, когда эта плоская сетка обновляется каждую секунду (и она растет), это будет тысячи коллайдеров в коробке, и каждая новая необходимость должна добавляться каждую секунду. Этот метод также не будет работать.
ОБНОВЛЕНИЕ # 2
Моя вторая идея - найти ближайшие треугольники для игрока и создать для них коллайдеры (полевые коллайдеры должны быть самыми быстрыми). Но я действительно не знаю, с чего начать, или это даже возможно? Кто-нибудь?
![Рисунок 2, как ответ для @Hristo]()
![Рисование]()
Ответы
Ответ 1
Вы можете использовать raycasting - для этого обычно требуется коллайдер, но я нашел this (script для raycasting на сетке, без коллайдеров), которые, я считаю, вы можете использовать в своем случае.
Затем вы можете ввести невидимый фон в свою сгенерированную сетку и использовать raycasting для обнаружения того, что попадает в первую очередь. Если ваш игрок останется квадратным, вы можете бросить луч из четырех углов, и если все 4 луча попадут в сетку, вы знаете, что вы на нем.
В случае перекрытия, поскольку код из ссылки может обнаруживать множественные треугольники, попадающие на один и тот же луч, если число ударов триаглов больше 1, вы знаете, что у вас есть перекрытие. И вы, вероятно, могли бы использовать порядок в виде z-индекса.
Я не пробовал код, но, похоже, он работал для других. Надеюсь, это поможет!