2016-08-20 10 views
0

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

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

вот пример моей проблемы:

enter image description here

ответ

1

коллайдер перерасчет стоит дорого, и нет никакого способа вокруг него в Единстве, вы не можете даже сделать это асинхронно.

Это зависит от вашей конкретной ситуации, но для игры типа Worms с динамическим разрушением местности я бы не использовал полигональные коллайдеры/движок физики Unity. Я бы создал свою собственную идеальную систему столкновений, которая будет полагаться только на основную текстуру ландшафта. У вас уже есть данные о местности, проверка на столкновение может быть выполнена с помощью алгоритма Брешенема.

Вот учебник: http://gamedevelopment.tutsplus.com/tutorials/coding-destructible-pixel-terrain-how-to-make-everything-explode--gamedev-45

1

Я хотел бы рекомендовать создание кластера на основе коллайдеров в этом случае. Как вы вычисляете площадь текстуры, которая становится прозрачной? Если он имеет фиксированный размер, вы можете создать один большой коллайдер, который состоит из многих меньших (шестиугольных, возможно?) Размерных коллайдеров, размер которых равен площади текстуры, сделанной прозрачной.

После того, как вы сделаете прозрачную текстуру, вы просто уничтожьте кластер. Хотя вам нужно будет сделать гекс (если эта фигура выберете) сетку для каждой карты.

Это будет сложнее реализовать в процедурно-генерируемых картах, но это все еще возможно, так как на данный момент нет динамических коллайдеров.