@devialar

Как коллайдеры выбрать?

Делаю песочнику по типу террарии. Есть мир, поделённый на чанки. Для каждого чанка генерируется примерно такой объект: 284f8d919f9c4256b2f40f85a9b80b76.png
Т. е. меш с нужными мне uv координатами.
Теперь вопрос. Как именно мне делать коллайдеры для каждого блока, да так, чтобы была хорошая производительность?
Mesh collider, 2d polygon collider, box2d collider(для каждого блока отдельно) или может что-то ещё? Может воообще реализовать свою коллизию? Так наверное будет наиболее производительно, т. к. я знаю где находится игрок, поэтому могу проверять коллизию только с самыми близкими блоками, коллайдеры блока и игрока прямоугольные, поэтому будет легко рассчитать соприкасаются они или нет. Но, как по мне сделать всё это достаточно сложно, а мне всё таки хочется простого решения которое будет работать здесь и сейчас.
  • Вопрос задан
  • 718 просмотров
Решения вопроса 1
@GreatRash
Нагуглил статейку. Есть мнение, что вам нужно при помощи этого метода выделить контур чанка. Вершины контура будут вершинами полигонального коллайдера. Правда не знаю на сколько это быстрей получится, особенно если у вас будет разрушаемый уровень как в Террарии.

Например вот в этой статье парень похожим методом рассчитывает поверхности. Правда у него левел не разрушабельный.

Ещё как вариант: находить ближайшие от главного героя (моба) N тайлов и включать их коллайдеры, всё, что не попадает в определённый радиус отключать. В Юнити, если не ошибаюсь можно "фризить" объект, т.е. совсем выключать его из физических расчётов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Я бы начал с обычных BoxCollider2D и посмотрел на производительность. В каждой последней версии движка обновляли двадэшную физику, думаю, статичные квадраты много ресурсов зажирать не должны, тем более, если вы используете чанки. Если вы при этом генерацию коллайдеров изолируете в отдельном классе, то в будущем сможете с лёгкостью поменять алгоритм, чтобы он использовал PolygonCollider2D или EdgeCollider2D. Свою физику не рекомендую писать, маловероятно, что вы напишете лучше Box2D.
Ответ написан
@devialar Автор вопроса
Вообщем, сделал так:
d742af3d83744fc9b599c162eef5f0c4.png
Это BoxCollider2D
Пробовал все решения и это оказалось самым производительным. В коде пришлось добавить всего пару строк, потому как у меня блоки объединяются и там как раз есть проверка на то, есть ли рядом другие блоки. Просто сделал так, что если хотя бы с 1 стороны нет блока, то коллайдер генерируется.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы