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.
Checking the stable version of the documentation...
CSGShape3D
继承: GeometryInstance3D < VisualInstance3D < Node3D < Node < Object
派生: CSGCombiner3D, CSGPrimitive3D
CSG 基类。
描述
这是 CSG 的基类,为 Godot 中的各种 CSG 节点提供 CSG 运算支持。
性能:CSG 节点仅适用于原型设计,存在显著的 CPU 性能消耗。
请考虑将最终的 CSG 运算结果烘焙为静态几何体,替换 CSG 节点。
使用选中 CSG 根节点后显示的编辑器菜单可以将各个 CSG 根节点的结果烘焙为使用静态资源的节点。
使用脚本也可以将各个 CSG 根节点烘焙为静态资源,可视网格请调用 bake_static_mesh(),物理碰撞请调用 bake_collision_shape()。
使用编辑器的 gltf 场景导出器可以将由 CSG 节点构成的整个场景烘焙为静态几何体。
教程
属性
|
||
|
||
|
||
|
||
|
||
|
方法
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 形状的切线。这仅适用于根部形状,此设置将在所有子级上均被忽略。
这个区域所处的物理层。
可碰撞的物体可以存在于 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() 🔗
返回针对该节点 CSG 运算结果烘焙的物理 ConcavePolygonShape3D。如果该节点不是 CSG 根节点或者不包含有效的几何体,则返回空形状。
性能:如果 CSG 运算得到的是包含大量细节的几何体,面数很多,那么物理性能可能非常慢。一般来说,凹面形状应该只用来制作静态关卡几何体,不应用来制作可以移动的动态物体。
ArrayMesh bake_static_mesh() 🔗
返回将该节点 CSG 运算的结果烘焙得到的静态 ArrayMesh。复杂 CSG 节点的材质会添加为额外的网格表面。如果该节点不是 CSG 根节点或没有有效的几何体,则返回空网格。
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。仅当该节点是根形状时才有效。
如果这是根形状,因此是渲染的对象,则返回 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 之间。