ICSGShapeBase

继承: GeometryRender < VisualRender < Item3D < Item < Object

派生: ICSGCombiner, ICSGPrimitiveBase

CSG 基类。

描述

这是CSG基类,为I3D Act 中的各种CSG节点提供CSG操作支持。

性能: CSG节点仅用于原型制作,因为它们具有明显的CPU性能成本。

考虑将最终CSG操作结果烘烤成替代CSG节点的静态几何形状。

单个CSG根节点结果可以用静态资源烘烤至节点,并使用编辑器菜单选择CSG root节点时出现。

单个CSG根节点也可以通过调用脚本将其烘烤到静态资源中 bake_static_mesh() 对于视觉网格或 bake_collision_shape() 对于物理碰撞。

CSG节点的整个场景都可以烘烤到静态几何形状,并用编辑GLTF场景出口商导出。

属性

方法


枚举

enum Operation: 🔗

Operation OPERATION_UNION = 0

合并两个图元的几何体,移除相交的几何体。

Operation OPERATION_INTERSECTION = 1

仅保留相交的几何,其余的将被移除。

Operation OPERATION_SUBTRACTION = 2

从第一个形状减去第二个形状,留下一个带有其形状的凹痕。


属性说明

bool calculate_tangents = true 🔗

  • void set_calculate_tangents(value: bool)

  • bool is_calculating_tangents()

计算允许使用法线贴图的 CSG 形状的切线。这仅适用于根部形状,此设置将在所有子级上均被忽略。


int collision_layer = 1 🔗

  • void set_collision_layer(value: int)

  • int get_collision_layer()

物理层该区域所在。

相关的对象可以存在于32个不同层中的任何一个中。 这些层就像标记系统一样工作,并且不是视觉上的。 Colledable可以使用这些图层选择使用Collision_mask属性与哪些对象相撞的对象。 如果对象A位于对象B扫描的任何层中,则检测到接触。 Collision layers and masks 在文档中以获取更多信息。


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

该 CSG 形状扫描碰撞的物理层。仅当 use_collisiontrue 时有效。有关更多信息,请参阅文档中的《碰撞层与掩码》


float collision_priority = 1.0 🔗

  • void set_collision_priority(value: float)

  • float get_collision_priority()

发生穿透时用于解算碰撞的优先级。仅当 use_collisiontrue 时有效。优先级越高,对对象的穿透力就越低。例如,这可以用来防止用户突破关卡的边界。


Operation operation = 0 🔗

在此形状上执行的操作。对于第一个 CSG 子节点,将忽略此操作,因为操作是在此节点与该节点父级的上一个子级之间进行的。


float snap 🔗

已弃用: CSG 库不再使用吸附。

该属性无效。


bool use_collision = false 🔗

  • void set_use_collision(value: bool)

  • bool is_using_collision()

为我们的 CSG 形状向物理引擎添加碰撞形状。这样行为就始终与静态物体类似。请注意,即使 CSG 形状本身被隐藏,碰撞形状仍处于活动状态。另见 collision_maskcollision_priority


方法说明

ConcavePolygonShape3D bake_collision_shape() 🔗

返回烤物理学 ConcavePolygonShape3D 该节点的CSG操作结果。 如果节点不是CSG根节点或没有有效的几何形状,则返回空形状。

Performance: 如果CSG操作产生非常详细的几何形状,那么许多面部的物理性能将非常慢。 通常,凹形形状应仅用于静态级别的几何形状,而不适用于正在移动的动态对象。


ArrayMesh bake_static_mesh() 🔗

返回将该节点 CSG 运算的结果烘焙得到的静态 ArrayMesh。复杂 CSG 节点的材质会添加为额外的网格表面。如果该节点不是 CSG 根节点或没有有效的几何体,则返回空网格。


bool get_collision_layer_value(layer_number: int) const 🔗

返回collision_layer的指定层是否启用,给定介于1和32之间的layer_number


bool get_collision_mask_value(layer_number: int) const 🔗

返回collision_mask的指定层是否启用,给定介于1和32之间的layer_number


Array get_meshes() const 🔗

返回一个包含两个元素的 Array,第一个元素是该节点的 Transform3D,第二个元素是该节点的根 Mesh。仅当该节点是根形状时才有效。


bool is_root_shape() const 🔗

如果这是根形状,因此是渲染的对象,则返回 true


void set_collision_layer_value(layer_number: int, value: bool) 🔗

基于value,启用或禁用collision_layer中的指定层,给定1到32之间的layer_number


void set_collision_mask_value(layer_number: int, value: bool) 🔗

基于value,启用或禁用collision_mask中的指定层,给定1到32之间的layer_number