2017-02-02 1 views
1

Я провел некоторое исследование, но не могу найти ответ на который наиболее эффективен, полевой коллайдер 2D или круговой коллайдер 2D?Круглый коллайдер 2D или Box Collider 2D

this question, который получил быстрый ответ, который говорит, что самый быстрый - это сфера коллайдера, а затем коллайдер капсулы, а затем полевой коллайдер, но мне интересно о двумерных коллайдерах.

2500 Коллайдеры

  • Капсула 453-481ms

  • коробка 490-520ms

  • Сфера 190-233ms

У кого-нибудь есть информация о том, что быстрее для компьютера? Спасибо!

+0

Я думаю, вы только что ответили на свой вопрос, нет? Но сфера коллайдера определенно самая быстрая. – maksymiuk

+1

Определение того, находится ли точка внутри круга, является более простым вычислением, чем определение того, находится ли точка в квадрате/прямоугольнике. Но используйте то, что лучше всего подходит для вашей ситуации, и только оптимизируйте эти детали позже, если вам нужно. (Скорее всего, тип коллайдеров, который вы выберете, не будет узким местом в вашей игре.) – Serlite

+0

@maksymiuk, к сожалению, я этого не сделал, информация отображается для 3D-среды, они, скорее всего, вычисляют 2D-обнаружение попадания по-разному, что потенциально может сделать полевой коллайдер 2D быстрее, чем круговой коллайдер 2D. – Alox

ответ

1

Разница в производительности между различными 2D коллайдерах можно сравнить на строго математической основе, относительное представление об их стоимости можно понять путем определения шагов, необходимых для определения того, является ли точка (P) в пределах определенной формы:

Круг коллайдер: Очень простой расчет, просто сравнить расстояние между центром круга и P с радиусом окружности. Если расстояние < радиус, точка находится в пределах круга. (Это даже дешевле вычислить, если предположить, что они сравнение расстояния < радиуса , так что позволяет избежать несколько дорогостоящего квадратного операцию корня.)

Box коллайдер: Также довольно просто, с помощью всего касание линейной алгебры; as per this solution, вам нужно вычислить и сравнить 2 пары точечных произведений между вершинами прямоугольника и точки P. (Теория заключается в том, что P должен образовывать острые углы внутри со всеми вершинами прямоугольника - если это не так, это снаружи.) Это не очень дорого, так как вычисление точечного продукта - это просто умножение и добавление. Однако относительно коллайдера круга все еще много шагов и будет медленнее.

Полигон-коллайдер: Определение того, находится ли точка внутри полигона, где все может быть очень медленным. Поскольку многоугольные коллайдеры Unity могут быть вогнутыми, упрощенный подход, такой как determining which side of each edge P lies on, не будет работать.

Один подход для потенциально вогнутых полигонов равен perform a raycast that passes from outside of the polygon to P и подсчитывает, сколько ребер пересекает его - если оно нечетное, то P находится внутри полигона. (Я реализовал это однажды в 3D раньше, но я не уверен, есть ли более быстрый подход.) Существуют и другие подходы, но они все медленнее, чем предыдущие два обнаружения столкновения; все они требуют сопоставления P с каждым ребром или вершиной многоугольника и требуют нескольких шагов умножения, добавления, а иногда и деления (медленно!), чтобы определить, находится ли P внутри многоугольника.

Edge collider: С этим коллайдером аналогичная аналогия на основе точек не работает. Самый простой способ представить его, чтобы он работал с ним, чтобы отливать луч между каждой парой его вершин, чтобы проверить, пересекаются ли они с любыми коллайдерными фигурами. Это немного сравнение яблок с апельсинами с другими коллайдерами, так как вершины коллайдера не образуют замкнутой формы - внутри «коллайдера» нет «внутренней». В результате ваши варианты использования для этого коллайдера будут ограничены (и, похоже, не применимы к тому, что вы хотите здесь). Анекдотически, this collider performs better than a polygon collider и trades blows with the box collider, но опять же, это только действительные сравнения в конкретных случаях использования (например, статические рельефы/препятствия).

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

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

+0

Wow, thats perfect! Большое спасибо! – Alox

+0

Все, что не является кругом, также становится намного сложнее, как только вы его вращаете, поэтому круг должен быть самым быстрым. – Krucho

0

Sphere> Capsule> Box> Mesh

Circle> Нет 2D Capsule :(> Box> не уверен, что если край или Poly будет самым быстрым.

+0

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

Смежные вопросы