CSGShape3D
Наследует: GeometryInstance3D < VisualInstance3D < Node3D < Node < Object
Наследуется от: CSGCombiner3D, CSGPrimitive3D
Базовый класс CSG.
Описание
Это базовый класс CSG, который обеспечивает поддержку операций CSG для различных узлов CSG в Godot.
Производительность: Узлы CSG предназначены только для прототипирования, поскольку они имеют значительные затраты производительности ЦП. Рассмотрите возможность запекания окончательных результатов операций CSG в статическую геометрию, которая заменяет узлы CSG.
Отдельные результаты корневых узлов CSG можно запекать в узлы со статическими ресурсами с помощью меню редактора, которое появляется при выборе корневого узла CSG.
Отдельные корневые узлы CSG также можно запекать в статические ресурсы с помощью скриптов, вызывая bake_static_mesh() для визуальной сетки или bake_collision_shape() для физического столкновения.
Все сцены узлов CSG можно запекать в статическую геометрию и экспортировать с помощью редактора экспортера сцен glTF: Сцена > Экспортировать как... > Сцена glTF 2.0...
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
Методы
get_collision_layer_value(layer_number: int) const |
|
get_collision_mask_value(layer_number: int) const |
|
get_meshes() const |
|
is_root_shape() const |
|
void |
set_collision_layer_value(layer_number: int, value: bool) |
void |
set_collision_mask_value(layer_number: int, value: bool) |
Перечисления
enum Operation: 🔗
Operation OPERATION_UNION = 0
Геометрия обоих примитивов объединяется, пересекающаяся геометрия удаляется.
Operation OPERATION_INTERSECTION = 1
Остается только пересекающаяся геометрия, остальное удаляется.
Operation OPERATION_SUBTRACTION = 2
Вторая форма вычитается из первой, оставляя вмятину на ее форме.
Описания свойств
bool calculate_tangents = true 🔗
Вычислить касательные для формы CSG, что позволяет использовать карты нормалей и высот. Это применяется только к корневой форме, эта настройка игнорируется для любого дочернего элемента. Установка этого параметра на false может немного ускорить генерацию формы.
Слои физики, в которых находится эта область.
Объекты, способные сталкиваться, могут существовать в любом из 32 различных слоев. Эти слои работают как система тегов и не являются визуальными. Сталкивающийся объект может использовать эти слои для выбора объектов, с которыми он может столкнуться, используя свойство collision_mask.
Контакт обнаруживается, если объект A находится в любом из слоев, которые сканирует объект B, или объект B находится в любом слое, сканируемом объектом A. Для получения дополнительной информации см. Слои и маски столкновений в документации.
Слои физики этой формы CSG сканируют на предмет столкновений. Действует только если use_collision равно true. Для получения дополнительной информации см. Слои и маски столкновений в документации.
float collision_priority = 1.0 🔗
Приоритет, используемый для решения столкновения при возникновении проникновения. Действует только если use_collision равно true. Чем выше приоритет, тем ниже будет проникновение в объект. Это может быть использовано, например, для предотвращения прорыва игрока через границы уровня.
Операция, которая выполняется над этой формой. Это игнорируется для первого дочернего узла CSG, поскольку операция выполняется между этим узлом и предыдущим дочерним узлом этого родительского узла.
Устарело: The CSG library no longer uses snapping.
Это свойство ничего не делает.
Добавляет форму столкновения в физический движок для нашей формы CSG. Это всегда будет действовать как статическое тело. Обратите внимание, что форма столкновения все еще активна, даже если сама форма CSG скрыта. См. также collision_mask и collision_priority.
Описания метода
ConcavePolygonShape3D bake_collision_shape() 🔗
Возвращает запеченную физику ConcavePolygonShape3D результата операции CSG этого узла. Возвращает пустую форму, если узел не является корневым узлом CSG или не имеет допустимой геометрии.
Производительность: Если операция CSG приводит к очень подробной геометрии со многими гранями, производительность физики будет очень низкой. Вогнутые формы, как правило, следует использовать только для статической геометрии уровня, а не с динамическими объектами, которые движутся.
Примечание: Обновления данных сетки CSG откладываются, что означает, что они обновляются с задержкой в один отрисованный кадр. Чтобы избежать получения пустой формы или устаревших данных сетки, обязательно вызовите await get_tree().process_frame перед использованием bake_collision_shape() в Node._ready() или после изменения свойств в CSGShape3D.
ArrayMesh bake_static_mesh() 🔗
Возвращает запеченный статический ArrayMesh результата операции CSG этого узла. Материалы из задействованных узлов CSG добавляются как дополнительные поверхности сетки. Возвращает пустую сетку, если узел не является корневым узлом CSG или не имеет допустимой геометрии.
Примечание: Обновления данных сетки CSG откладываются, что означает, что они обновляются с задержкой в один отрисованный кадр. Чтобы избежать получения пустой сетки или устаревших данных сетки, обязательно вызовите await get_tree().process_frame перед использованием bake_static_mesh() в Node._ready() или после изменения свойств на CSGShape3D.
bool get_collision_layer_value(layer_number: int) const 🔗
Возвращает, включен ли указанный слой collision_layer, учитывая layer_number от 1 до 32.
bool get_collision_mask_value(layer_number: int) const 🔗
Возвращает, включен ли указанный слой collision_mask, учитывая layer_number от 1 до 32.
Возвращает Array с двумя элементами, первый из которых — Transform3D этого узла, а второй — корень Mesh этого узла. Работает только в том случае, если этот узел является корневой формой.
Примечание: Обновления данных сетки CSG откладываются, что означает, что они обновляются с задержкой в один отрисованный кадр. Чтобы избежать получения пустой формы или устаревших данных сетки, обязательно вызовите await get_tree().process_frame перед использованием get_meshes() в Node._ready() или после изменения свойств в CSGShape3D.
Возвращает true, если это корневая форма и, следовательно, объект, который визуализируется.
void set_collision_layer_value(layer_number: int, value: bool) 🔗
На основе value включает или отключает указанный слой в collision_layer, учитывая layer_number от 1 до 32.
void set_collision_mask_value(layer_number: int, value: bool) 🔗
На основе value включает или отключает указанный слой в collision_mask при заданном layer_number от 1 до 32.