SoftBody3D
继承: MeshInstance3D < GeometryInstance3D < VisualInstance3D < Node3D < Node < Object
可形变的 3D 物理网格。
描述
可形变的 3D 物理网格。用于创建弹性或可形变的对象,例如布料、橡胶或其他柔性材质。
此外,SoftBody3D 受 Area3D 中定义的风力影响(参见 Area3D.wind_source_path、Area3D.wind_force_magnitude 和 Area3D.wind_attenuation_factor)。
注意:使用 SoftBody3D 时建议使用 Jolt Physics,不要使用默认的 GodotPhysics3D,因为 Jolt Physics 的柔体实现更快更可靠。你可以使用 ProjectSettings.physics/3d/physics_engine 项目设置来切换物理引擎。
教程
属性
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
方法
void |
add_collision_exception_with(body: Node) |
void |
apply_central_force(force: Vector3) |
void |
apply_central_impulse(impulse: Vector3) |
void |
apply_force(point_index: int, force: Vector3) |
void |
apply_impulse(point_index: int, impulse: Vector3) |
get_collision_layer_value(layer_number: int) const |
|
get_collision_mask_value(layer_number: int) const |
|
get_physics_rid() const |
|
get_point_transform(point_index: int) |
|
is_point_pinned(point_index: int) const |
|
void |
|
void |
set_collision_layer_value(layer_number: int, value: bool) |
void |
set_collision_mask_value(layer_number: int, value: bool) |
void |
set_point_pinned(point_index: int, pinned: bool, attachment_path: NodePath = NodePath(""), insert_at: int = -1) |
枚举
enum DisableMode: 🔗
DisableMode DISABLE_MODE_REMOVE = 0
当 Node.process_mode 被设置为 Node.PROCESS_MODE_DISABLED 时,从物理仿真中移除,停止与此 SoftBody3D 的所有物理交互。
当该 Node 再次被处理时,会自动重新加入到物理仿真中。
DisableMode DISABLE_MODE_KEEP_ACTIVE = 1
当 Node.process_mode 被设置为 Node.PROCESS_MODE_DISABLED 时,不影响物理仿真。
属性说明
该 SoftBody3D 所在的物理层。碰撞对象可以存在于 32 个不同层中的一个或多个层中。另见 collision_mask。
注意:只有当对象 B 位于对象 A 扫描的任意层中时,对象 A 才能检测到与对象 B 的接触。有关更多信息,请参阅文档中的《碰撞层与掩码》。
该 SoftBody3D 扫描的物理层。碰撞对象可以扫描 32 个不同层中的一个或多个层。另见 collision_layer。
注意:只有当对象 B 位于对象 A 扫描的任何层中时,对象 A 才能检测到与对象 B 的接触。有关更多信息,请参阅文档中的《碰撞层与掩码》。
float damping_coefficient = 0.01 🔗
物体的阻尼系数。当施加力时,较高的值会更明显地减慢物体的速度。
DisableMode disable_mode = 0 🔗
void set_disable_mode(value: DisableMode)
DisableMode get_disable_mode()
定义 Node.process_mode 为 Node.PROCESS_MODE_DISABLED 时的物理行为。
float drag_coefficient = 0.0 🔗
物体的阻力系数。较高的值会增加该物体的空气阻力。
注意:Godot 的默认物理实现当前未使用该值。
float linear_stiffness = 0.5 🔗
值越大得到的物体约坚硬,较低的值会提高物体的弯曲能力。取值范围为 0.0 到 1.0 之间(含端点)。
NodePath parent_collision_ignore = NodePath("") 🔗
指向 CollisionObject3D 的 NodePath,这个 SoftBody3D 应该避免穿过它。
float pressure_coefficient = 0.0 🔗
该软体的压力系数。模拟物体内部的压力积聚。较高的值会增加该效果的强度。
如果为 true,则该 SoftBody3D 会响应 RayCast3D。
float shrinking_factor = 0.0 🔗
缩放 SoftBody3D 的边约束的剩余长度。正值会收缩网格,负值会扩展网格。例如,值为 0.1 会将网格的边缩短 10%,而 -0.1 则会将边扩展 10%。
注意:shrinking_factor 最适用于存在钉固点的表面网格。
int simulation_precision = 5 🔗
增加这个值会改善模拟结果,但会影响性能。请小心使用。
该 SoftBody3D 的质量。
方法说明
void add_collision_exception_with(body: Node) 🔗
将一个物体添加到这个物体不能碰撞的物体列表中。
void apply_central_force(force: Vector3) 🔗
将力分配并施加到所有点上。力是时间相关的,应在每次物理更新时施加。
void apply_central_impulse(impulse: Vector3) 🔗
将冲量分配并施加到所有点上。
冲量与时间无关!如果每帧都施加冲量会得到与帧率相关的力。因此只应在模拟一次性冲击时使用(否则请使用“_force”函数)。
void apply_force(point_index: int, force: Vector3) 🔗
将力施加到某个点上。力是时间相关的,应在每次物理更新时施加。
void apply_impulse(point_index: int, impulse: Vector3) 🔗
将冲量施加到某个点上。
冲量与时间无关!如果每帧都施加冲量会得到与帧率相关的力。因此只应在模拟一次性冲击时使用(否则请使用“_force”函数)。
Array[PhysicsBody3D] get_collision_exceptions() 🔗
返回该物体的碰撞例外节点数组。
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 之间。
返回 PhysicsServer3D 用于该实体的内部 RID。
Vector3 get_point_transform(point_index: int) 🔗
返回表面数组中顶点的局部平移。
bool is_point_pinned(point_index: int) const 🔗
如果顶点设置为固定,则返回 true。
void remove_collision_exception_with(body: Node) 🔗
将一个物体从该物体不能碰撞的物体列表中移除。
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 之间。
void set_point_pinned(point_index: int, pinned: bool, attachment_path: NodePath = NodePath(""), insert_at: int = -1) 🔗
设置表面顶点的固定状态。当设置为 true 时,可选的 attachment_path 可以定义一个 Node3D,该固定顶点将被附加到该节点。