Каковы преимущества того, что стена представляет собой плоскость или коробку? Должен ли я использовать самолет с коллайдером вместо сетки?
источник
Каковы преимущества того, что стена представляет собой плоскость или коробку? Должен ли я использовать самолет с коллайдером вместо сетки?
Там будет пара разных вещей, которые вы должны будете рассмотреть.
Обратите внимание: что преимущества от описанных ниже оптимизаций действительно имеют значение только для тонны стен. В этот момент, возможно, было бы целесообразно рассмотреть другое решение, например, разделение двоичного пространства (BSP), для создания стен в игре. Это сделало бы ваши уровни высоко оптимизированными для рендеринга (если он спроектирован правильно) и для физики (поскольку у вас есть очень хорошее определение того, что сталкивается, а что нет.
Ящик будет рендерить больше, чем самолет. В нем больше вершин и треугольников, что означает, что ваш вершинный шейдер и растеризатор должны быть обработаны большим количеством данных. Поэтому используйте поле только тогда, когда вам это нужно с точки зрения видимости. Удалите лица по мере необходимости для того, что игрок должен будет увидеть.
Вы всегда должны использовать, BoxCollider
а не MeshCollider
когда можете. MeshCollider
Нужно применять столкновения на грани (или в виде выпуклого корпуса) сетки и замедлять радиационное вещание и физику (но это незначительная величина только для одного бокса). Другое дело, BoxColliders
что игроку гораздо сложнее проходить через них, когда они идут очень быстро. Даже при постоянных столкновениях, если вы все еще испытываете фазу сквозь стены, вы всегда можете просто расширитьBoxColliders
Если вы намного быстрее работаете с плоскостями MeshColliders
(поскольку вам не нужно настраивать все в BoxColliders
соответствии с их размерами), может быть целесообразно просто использовать их, если вы получите желаемую производительность.
Немного расширив баллы "Кобурна" :
Рендеринг : Если вы визуализируете стену как плоскость, стена будет видна только с одной стороны, так как плоскость (или точнее ее грани) имеет только одну визуализированную сторону. Поэтому, если игрок может перемещаться по стене, вам понадобится несколько плоскостей, чтобы покрыть все стороны, что означает, что вы все равно получите ящик.
Физика . Простые геометрические коллайдеры (сферы, прямоугольники и т. Д.) Всегда быстрее вычисляются по сравнению с коллайдерами с полной сеткой, поскольку не все грани сетки необходимо проверять по отдельности. Вместо этого можно использовать «простые» радиопередачи или расчеты расстояния (например, расстояние до центра сферы минус размер сферы).
Для других физических движков, которые имеют отдельный «плоский коллайдер» (чего нет в Unity), «лучшего» нет. Самолет может быть немного быстрее с точки зрения производительности, но вы можете столкнуться с проблемой быстрых объектов, проходящих через него без фактического столкновения. Затем у вас останется либо более толстый коллайдер (поэтому вместо поля), либо вы перейдете к Обнаружению непрерывного столкновения (CCD), как описано здесь .
Еще одна вещь о рендеринге: если у вас есть собственная реализация отображения теней, стены, сделанные из коробок, могут превосходить стены, сделанные из плоскостей, из -за панорамирования, которое может появляться с плоскостями.
Вот объяснение симптома:
http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/#peter-panning
источник
Мне всегда говорили, что если у вас будут тени, лучше всего сделать их твердыми, чтобы облегчить легкое кровотечение, потому что разница в глубине мала, и она будет кровоточить.
Я могу ошибаться, но я делаю все свои стены и все в таком духе двухсторонними, стена будет всего лишь несколькими вершинами, поэтому она не должна быть такой большой экономией, если иметь плоскость.
Есть некоторые вещи, которые я оставляю по бокам, но в основном это нижняя или верхняя часть материала, вокруг которого есть много материала, помогающего с легким кровотечением.
Я делаю то же самое для физики, не все на самом деле думали об этом, но мне показалось правильным использовать стену в качестве стены и плоскость в качестве плоскости, но это только я
источник