CsgShape3D
Базовый класс CSG.
Базовый класс CSG.
Это базовый класс РГС, который обеспечивает оперативную поддержку РГС различным узлам РГС в Reckfell.
Performance: Узлы РГС предназначены только для прототипирования, поскольку они сопряжены со значительными затратами на функционирование процессора.
Отдельные результаты по корневому узлу РГС могут быть выжаты в узлы со статическими ресурсами с меню редактора, которое появляется при выборе корневого узла РГС.
Отдельные корневые узлы РГС также могут быть выжаты в статические ресурсы с помощью скриптов CsgShape3D.BakeStaticMesh для визуальной сетки или CsgShape3D.BakeCollisionShape для столкновения физики.
Целые сцены узлов РГС могут быть выпечены до статической геометрии и экспортированы вместе с экспортером сцены редактора gITF: Сцена > Экспорт как... > glTF 2.0 Сцена...
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Свойства9
AutosmoothСвойство
public bool Autosmooth { get; set; }Включает автоматическое сглаживание. Это отменяет любое сглаживание на узле CSG и вместо этого использует CsgShape3D.SmoothingAngle для вычисления нормалей на основе угла между гранями.
Дочерние элементы узла CsgCombiner3D будут рассматриваться как единая сетка.
CalculateTangentsСвойство
public bool CalculateTangents { get; set; }Вычислить касательные для формы CSG, что позволяет использовать карты нормалей и высот. Это применяется только к корневой форме, эта настройка игнорируется для любого дочернего элемента. Установка этого параметра на false может немного ускорить генерацию формы.
CollisionLayerСвойство
public uint CollisionLayer { get; set; }Слои физики, в которых находится эта область. Объекты, способные сталкиваться, могут существовать в любом из 32 различных слоев. Эти слои работают как система тегов и не являются визуальными. Сталкивающийся объект может использовать эти слои для выбора объектов, с которыми он может столкнуться, используя свойство collision_mask. Контакт обнаруживается, если объект A находится в любом из слоев, которые сканирует объект B, или объект B находится в любом слое, сканируемом объектом A. Для получения дополнительной информации см. Слои и маски столкновений в документации.
CollisionMaskСвойство
public uint CollisionMask { get; set; }Слои физики этой формы CSG сканируют на предмет столкновений. Действует только если CsgShape3D.UseCollision равно true. Для получения дополнительной информации см. Слои и маски столкновений в документации.
CollisionPriorityСвойство
public float CollisionPriority { get; set; }Приоритет, используемый для решения столкновения при возникновении проникновения. Действует только если CsgShape3D.UseCollision равно true. Чем выше приоритет, тем ниже будет проникновение в объект. Это может быть использовано, например, для предотвращения прорыва игрока через границы уровня.
OperationСвойство
public CsgShape3D.OperationEnum Operation { get; set; }Операция дочернего CSG-операнда относительно накопленного результата: Union, Intersection или Subtraction. Порядок детей имеет значение. Вычитание отдельного корня из другого корня не выполняется: операнды должны принадлежать одной CSG-композиции.
SmoothingAngleСвойство
public float SmoothingAngle { get; set; }При включении автоматического сглаживания грани с углом между ними, превышающим указанное значение, будут сглаживаться, а грани с меньшим углом останутся острыми. Примечание: угол меньше 0,1 приведет к отключению всего сглаживания; это можно использовать для повышения производительности.
SnapСвойство · Устарело
public float Snap { get; set; }Это свойство ничего не делает.
UseCollisionСвойство
public bool UseCollision { get; set; }Включает физическую коллизию результата корневой CSG-композиции. Дочерние CSG-операнды не становятся отдельными телами. Геометрия и коллизия обновляются отложенно; BakeCollisionShape может создать ресурс и при false, но сам ресурс не добавляет тело в мир.
Методы26
BakeCollisionShapeConcavePolygonShape3D
public ConcavePolygonShape3D BakeCollisionShape();Создаёт ресурс вогнутой формы по результату корневой CSG-композиции. Не требует включённого UseCollision, но требует готовых данных. Для реальной коллизии назначьте результат CollisionShape3D внутри StaticBody3D; не используйте такую форму как универсальную динамическую коллизию.
ConcavePolygonShape3DConcavePolygonShape3D для корня либо null для дочернего операнда. Это отдельный ресурс от ArrayMesh; сохраняйте и назначайте их раздельно.
BakeStaticMeshArrayMesh
public ArrayMesh BakeStaticMesh();Получает текущий меш корневой CSG-композиции после отложенного обновления. Не удаляет исходные Entity, не создаёт MeshInstance3D и не сохраняет файл. Возвращает ресурс текущего root mesh, а не обещанную независимую глубокую копию.
ArrayMeshArrayMesh корня либо null у дочернего операнда или до готовности root mesh. После создания/изменения CSG дождитесь обновления; перед ResourceSaver проверьте результат.
GetCollisionLayeruint
public uint GetCollisionLayer();uintGetCollisionLayerValuebool
public bool GetCollisionLayerValue(int layerNumber);Возвращает, включен ли указанный слой CsgShape3D.CollisionLayer, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
boolGetCollisionMaskuint
public uint GetCollisionMask();uintGetCollisionMaskValuebool
public bool GetCollisionMaskValue(int layerNumber);Возвращает, включен ли указанный слой CsgShape3D.CollisionMask, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
boolGetCollisionPriorityfloat
public float GetCollisionPriority();floatGetMeshesReckfell.Collections.Array
public Reckfell.Collections.Array GetMeshes();Возвращает Reckfell.Collections.Array с двумя элементами, первый из которых — Transform3D этого узла, а второй — корень Mesh этого узла. Работает только в том случае, если этот узел является корневой формой.
Примечание: Обновления данных сетки CSG откладываются, что означает, что они обновляются с задержкой в один отрисованный кадр. Чтобы избежать получения пустой формы или устаревших данных сетки, обязательно вызовите await get_tree().process_frame перед использованием CsgShape3D.GetMeshes в Entity.Ready или после изменения свойств в CsgShape3D.
Reckfell.Collections.ArrayGetOperationCsgShape3D.OperationEnum
public CsgShape3D.OperationEnum GetOperation();CsgShape3D.OperationEnumGetSmoothingAnglefloat
public float GetSmoothingAngle();floatGetSnapfloat
public float GetSnap();floatIsAutosmoothbool
public bool IsAutosmooth();boolIsCalculatingTangentsbool
public bool IsCalculatingTangents();boolIsRootShapebool
public bool IsRootShape();Проверяет, формирует ли эта Entity самостоятельный CSG-результат. Корень определяется иерархией CSG, а не названием объекта. Bake-методы предназначены для этого корня.
booltrue у корня композиции; false у CSG-операнда внутри другого CSG-объекта.
IsUsingCollisionbool
public bool IsUsingCollision();boolSetAutosmoothvoid
public void SetAutosmooth(bool autosmooth);| Имя | Тип | По умолчанию |
|---|---|---|
autosmooth | bool | — |
SetCalculateTangentsvoid
public void SetCalculateTangents(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetCollisionLayervoid
public void SetCollisionLayer(uint layer);| Имя | Тип | По умолчанию |
|---|---|---|
layer | uint | — |
SetCollisionLayerValuevoid
public void SetCollisionLayerValue(int layerNumber, bool value);На основе value включает или отключает указанный слой в CsgShape3D.CollisionLayer, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
value | bool | — |
SetCollisionMaskvoid
public void SetCollisionMask(uint mask);| Имя | Тип | По умолчанию |
|---|---|---|
mask | uint | — |
SetCollisionMaskValuevoid
public void SetCollisionMaskValue(int layerNumber, bool value);На основе value включает или отключает указанный слой в CsgShape3D.CollisionMask при заданном layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
value | bool | — |
SetCollisionPriorityvoid
public void SetCollisionPriority(float priority);| Имя | Тип | По умолчанию |
|---|---|---|
priority | float | — |
SetOperationvoid
public void SetOperation(CsgShape3D.OperationEnum operation);| Имя | Тип | По умолчанию |
|---|---|---|
operation | CsgShape3D.OperationEnum | — |
SetSmoothingAnglevoid
public void SetSmoothingAngle(float smoothingAngle);| Имя | Тип | По умолчанию |
|---|---|---|
smoothingAngle | float | — |
SetSnapvoid
public void SetSnap(float snap);| Имя | Тип | По умолчанию |
|---|---|---|
snap | float | — |
SetUseCollisionvoid
public void SetUseCollision(bool operation);| Имя | Тип | По умолчанию |
|---|---|---|
operation | bool | — |
CsgShape3D.OperationEnum
| Значение | Описание |
|---|---|
Intersection = 1 | Остается только пересекающаяся геометрия, остальное удаляется. |
Subtraction = 2 | Вторая форма вычитается из первой, оставляя вмятину на ее форме. |
Union = 0 | Геометрия обоих примитивов объединяется, пересекающаяся геометрия удаляется. |