Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

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 Сцена...

Посібники

Властивості

bool

autosmooth

false

bool

calculate_tangents

true

int

collision_layer

1

int

collision_mask

1

float

collision_priority

1.0

Operation

operation

0

float

smoothing_angle

50.0

float

snap

bool

use_collision

false

Методи

ConcavePolygonShape3D

bake_collision_shape()

ArrayMesh

bake_static_mesh()

bool

get_collision_layer_value(layer_number: int) const

bool

get_collision_mask_value(layer_number: int) const

Array

get_meshes() const

bool

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 autosmooth = false 🔗

  • void set_autosmooth(value: bool)

  • bool is_autosmooth()

Enables automatic smoothing. This overrides any smoothing on the CSG node and instead uses smoothing_angle to calculate normals based on the angle between faces.

Children of a CSGCombiner3D node will be treated as a single mesh.


bool calculate_tangents = true 🔗

  • void set_calculate_tangents(value: bool)

  • bool is_calculating_tangents()

Обчисліть дотичні для фігури CSG, що дозволяє використовувати карти нормалей та висот. Це застосовується лише до кореневої фігури, цей параметр ігнорується для будь-якої дочірньої фігури. Встановлення цього параметра на false може дещо пришвидшити генерацію фігури.


int collision_layer = 1 🔗

  • void set_collision_layer(value: int)

  • int get_collision_layer()

Фізика шарів цієї області знаходиться в.

Виключні об'єкти можуть існувати в будь-якому з 32 різних шарів. Ці шари працюють як система блювоти, і не візуально. З'єднання може використовувати ці шари, щоб вибрати, з якими об'єктами він може з'єднатися, використовуючи зіткнень_маску власності.

Якщо об'єкт A знаходиться в будь-якому з шарів, які об'єкт B сканування, або об'єкт B знаходиться в будь-якому шарі, відскановані об'єктом A. Див. Коллізійні шари та маски в документації для отримання додаткової інформації.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

Фізика шарів цієї форми CSG сканування для зіткнення. true. Див. Коллізійні шари та маски в документації для отримання додаткової інформації.


float collision_priority = 1.0 🔗

  • void set_collision_priority(value: float)

  • float get_collision_priority()

Пріоритет, який використовується для вирішення співвідношенні при виникненні проникнення. true. Чим вище пріоритет, тим нижче проникнення в об'єкт буде. Цей приклад можна використовувати для запобігання розбиття гравця за кордонами рівня.


Operation operation = 0 🔗

Операція, яка виконується за цією формою. Це ігнорується для першого CSG дочірнього вузла, оскільки операція є між цією вершиною і попередньої дитини цього вершини батьків.


float smoothing_angle = 50.0 🔗

  • void set_smoothing_angle(value: float)

  • float get_smoothing_angle()

When autosmooth is enabled, faces with an angle between them greater than this will be smoothed, while faces with a smaller angle will remain sharp.

Note: An angle lower than 0.1 will cause all smoothing to be disabled, this can be used to increase performance.


float snap 🔗

Застаріло: The CSG library no longer uses snapping.

Це властивість нічого не робить.


bool use_collision = false 🔗

  • void set_use_collision(value: bool)

  • bool is_using_collision()

Додає форму зіткнення на фізичний двигун для нашої форми 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() 🔗

Повертає запечений статичний результат операції CSG цього вузла ArrayMesh. Матеріали із задіяних вузлів 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_layer, враховуючи layer_number між 1 і 32.


Array get_meshes() const 🔗

Повертає Array з двома елементами, перший – це Transform3D цього вузла, а другий – корінь Mesh цього вузла. Працює лише тоді, коли цей вузол є кореневою фігурою.

Примітка: Оновлення даних сітки CSG відкладаються, тобто вони оновлюються із затримкою в один кадр візуалізації. Щоб уникнути отримання порожньої фігури або застарілих даних сітки, обов’язково викликайте await get_tree().process_frame перед використанням get_meshes() у Node._ready() або після зміни властивостей CSGShape3D.


bool is_root_shape() const 🔗

Повертає 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.