CSGShape3D

继承: GeometryInstance3D < VisualInstance3D < Node3D < Node < Object

派生: CSGCombiner3D, CSGPrimitive3D

CSG 基类。

描述

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

注意:CSG 节点旨在用于关卡原型设计。与使用 PrimitiveMesh 创建 MeshInstance3D 相比,创建 CSG 节点具有显著的 CPU 成本。在一个 CSG 节点中移动另一个 CSG 节点也会产生显著的 CPU 消耗,所以应当在游戏过程中避免进行类似的操作。

教程

属性

bool

calculate_tangents

true

int

collision_layer

1

int

collision_mask

1

float

collision_priority

1.0

Operation

operation

0

float

snap

0.001

bool

use_collision

false

方法

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 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 个不同层中的任何一个。这些层的工作就像一个标签系统,而不是可视化的。一个可碰撞物体可以使用这些层来选择它可以与哪些物体碰撞,使用 collision_mask 属性。

如果对象 A 在对象 B 所扫描的任何层中,或者对象 B 在对象 A 所扫描的任何层中,就会检测到接触。详情请参阅文档中的《碰撞层与掩码》


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 = 0.001 🔗

Snap makes the mesh vertices snap to a given distance so that the faces of two meshes can be perfectly aligned. A lower value results in greater precision but may be harder to adjust. The top-level CSG shape’s snap value is used for the entire CSG tree.


bool use_collision = false 🔗

  • void set_use_collision(value: bool)

  • bool is_using_collision()

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


方法说明

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 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 中指定的层,给定的 layer_number 应在 1 和 32 之间。


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

根据 value,启用或禁用 collision_mask 中指定的层,给定的 layer_number 应在 1 和 32 之间。