Это 26-й день моего участия в Gengwen Challenge.Подробности о мероприятии:Обновить вызов
В этом руководстве говорится:
Типы фигур столкновения, доступные в 3D в Godot.
Используйте выпуклую или вогнутую сетку в качестве формы столкновения.
Вопросы производительности для 3D-столкновений.
Godot предлагает различные формы столкновений с различными компромиссами между производительностью и точностью.
Вы можете определить форму PhysicsBody, добавив один или несколько CollisionShapes в качестве дочерних узлов. Обратите внимание, что вы должны добавить объект Shape к узлу формы столкновения в доке Inspector.
Примечания
Когда вы добавляете несколько фигур столкновения в один объект PhysicsBody, вам не нужно беспокоиться об их перекрытии. Они не «сталкиваются» друг с другом.
оригинальная форма столкновения
Godot предоставляет следующие примитивные формы коллизий:
- коробка
- форма сферы
- Форма капсулы
- Цилиндрическая форма. Он доступен только при использовании физического движка Bullet.
Вы можете использовать одну или несколько примитивных форм для представления столкновений для большинства небольших объектов. Однако для более сложных объектов, таких как большие корабли или целые уровни, вы можете использовать выпуклые или вогнутые формы. Подробнее об этом ниже.
Мы рекомендуем использовать примитивные формы для динамических объектов, таких как RigidBodies и KinematicBodies, поскольку они ведут себя наиболее надежно. Они также обычно обеспечивают лучшую производительность.
выпуклая форма столкновения
Выпуклая форма столкновения представляет собой компромисс между исходной формой столкновения и вогнутой формой столкновения. Они могут представлять любую сложную форму с одной важной оговоркой. Как следует из названия, одна фигура может представлять только выпуклые формы. Например, пирамида выпуклая, а полый ящик вогнутый. Чтобы определить вогнутый объект с одной формой столкновения, вам нужно использовать вогнутую форму столкновения.
В зависимости от сложности объекта вы можете повысить производительность, используя несколько выпуклых фигур вместо вогнутых форм столкновения. Godot позволяет использовать выпуклую декомпозицию для создания выпуклых форм, которые примерно соответствуют полым объектам. Обратите внимание, что это преимущество производительности больше не применяется после определенного количества выпуклых фигур. Для больших сложных объектов, таких как целые уровни, мы рекомендуем вместо этого использовать вогнутые формы.
Вы можете создать одну или несколько выпуклых форм столкновения из редактора, выбрав MeshInstance и используя меню Mesh в верхней части окна 3D-просмотра. Редактор предоставляет два режима сборки:
-
Создайте одноуровневое выпуклое столкновениеИспользуйте алгоритм Quickhull. Он создает узел CollisionShape с автоматически сгенерированной выпуклой формой столкновения. Поскольку он генерирует только одну форму, он обеспечивает хорошую производительность и идеально подходит для небольших объектов.
-
Create Multiple Convex Collision SiblingsИспользуйте алгоритм V-HACD. Он создает несколько узлов CollisionShape, каждый из которых имеет выпуклую форму. Поскольку он генерирует несколько форм, он более точен для вогнутых объектов за счет производительности. Для объектов средней сложности это может быть быстрее, чем использование одной вогнутой формы столкновения.
Вогнутые или треугольные формы столкновения
Вогнутые формы столкновения, также известные как треугольные формы столкновения, могут принимать любую форму, от нескольких треугольников до тысяч треугольников. Конкейв — самый медленный вариант, но и самый точный в Годо. Вы можете использовать только вогнутые формы в StaticBodies. Их нельзя использовать с KinematicBodies или RigidBody, если их режим не является Static.
Примечания
Хотя вогнутая форма обеспечивает наиболее точные столкновения, отчеты о контактах могут быть не такими точными, как исходная форма.
Если не использовать GridMaps для дизайна уровней, вогнутые формы — лучший метод для столкновений уровней. Тем не менее, если на вашем уровне есть мелкие детали, вы можете исключить эти детали из столкновений, чтобы улучшить производительность и игровой процесс. Для этого вы можете построить упрощенную сетку столкновений в средстве 3D-моделирования и позволить Godot автоматически генерировать для нее формы столкновений. Подробнее о ниже
Обратите внимание, что в отличие от примитивных и выпуклых форм, вогнутые формы столкновения не имеют фактического «объема». Вы можете размещать объекты снаружи и внутри фигур.
Вы можете создавать вогнутые формы столкновения из редактора, выбрав MeshInstance и используя меню Mesh в верхней части окна 3D-просмотра. Редактор предлагает два варианта:
-
Create Trimesh Static Body
это удобный вариант. Он создает StaticBody, содержащий вогнутую форму, которая соответствует геометрии сетки. -
Create Trimesh Collision Sibling
Создайте узел CollisionShape с вогнутой формой, соответствующей геометрии сетки.
Примечания
Предположим, вам нужно сделать скольжение RigidBody по вогнутой форме столкновения. В этом случае вы можете заметить, что время от времени твердое тело поднимается вверх. Чтобы это исправить, откройте Project > Project Settings и включите Physics > 3d > Smooth Trimesh Collision.
С включенным плавным столкновением тримешей убедитесь, что вогнутая форма является единственной формой для StaticBody и что она находится в начале координат без какого-либо вращения. Таким образом, твердое тело должно идеально скользить по статичному телу.
смотрите также
Godot может автоматически генерировать формы столкновений для ваших импортированных 3D-сцен. Дополнительные сведения см. в разделе «Подсказки по импорту» в документации.
предупреждение о производительности
Вы не ограничены одной формой столкновения на PhysicsBody. Тем не менее, мы рекомендуем использовать как можно меньше фигур для повышения производительности, особенно для динамических объектов, таких как RigidBodies и KinematicBodies. Самое главное, избегайте перемещения, поворота или масштабирования CollisionShapes, чтобы воспользоваться внутренней оптимизацией физического движка.
При использовании одной непреобразованной формы столкновения в StaticBody широкофазный алгоритм движка может отбрасывать неактивные PhysicsBodies. На узком этапе тогда нужно будет учитывать только форму активного тела. Если StaticBody имеет много форм столкновения, широкая фаза не удастся. Более медленный узкий этап должен выполнять проверку на столкновение для каждой формы.
Если вы столкнетесь с проблемами производительности, вам, возможно, придется пожертвовать точностью. В большинстве игр нет 100% точных столкновений. Они нашли творческие способы скрыть его или иным образом сделать незаметным во время обычного игрового процесса.
Если вы действительно узнали что-то новое из этой статьи, ставьте лайк, добавляйте в закладки и делитесь с друзьями. 🤗Наконец, не забудьте поддержать ❤ или 📑