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.

SoftBody3D

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

可形变的 3D 物理网格。

描述

可形变的 3D 物理网格。用于创建弹性或可形变的对象,例如布料、橡胶或其他柔性材质。

此外,SoftBody3DArea3D 中定义的风力影响(参见 Area3D.wind_source_pathArea3D.wind_force_magnitudeArea3D.wind_attenuation_factor)。

注意:SoftBody3D 中有许多已知的问题。因此,不建议用于可能影响游戏玩法的东西上(例如蹦床)。

教程

属性

int

collision_layer

1

int

collision_mask

1

float

damping_coefficient

0.01

DisableMode

disable_mode

0

float

drag_coefficient

0.0

float

linear_stiffness

0.5

NodePath

parent_collision_ignore

NodePath("")

float

pressure_coefficient

0.0

bool

ray_pickable

true

int

simulation_precision

5

float

total_mass

1.0

方法

void

add_collision_exception_with(body: Node)

Array[PhysicsBody3D]

get_collision_exceptions()

bool

get_collision_layer_value(layer_number: int) const

bool

get_collision_mask_value(layer_number: int) const

RID

get_physics_rid() const

Vector3

get_point_transform(point_index: int)

bool

is_point_pinned(point_index: int) const

void

remove_collision_exception_with(body: Node)

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(""))


枚举

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 时,不影响物理仿真。


属性说明

int collision_layer = 1 🔗

  • void set_collision_layer(value: int)

  • int get_collision_layer()

该 SoftBody3D 所在的物理层。碰撞对象可以存在于 32 个不同层中的一个或多个层中。另见 collision_mask

注意:只有当对象 B 位于对象 A 扫描的任意层中时,对象 A 才能检测到与对象 B 的接触。有关更多信息,请参阅文档中的《碰撞层与掩码》


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

该 SoftBody3D 扫描的物理层。碰撞对象可以扫描 32 个不同层中的一个或多个层。另见 collision_layer

注意:只有当对象 B 位于对象 A 扫描的任何层中时,对象 A 才能检测到与对象 B 的接触。有关更多信息,请参阅文档中的《碰撞层与掩码》


float damping_coefficient = 0.01 🔗

  • void set_damping_coefficient(value: float)

  • float get_damping_coefficient()

物体的阻尼系数。当施加力时,较高的值会更明显地减慢物体的速度。


DisableMode disable_mode = 0 🔗

Node.process_mode 被设置为 Node.PROCESS_MODE_DISABLED 时,定义物理行为。有关不同模式的更多详细信息,请参阅 DisableMode


float drag_coefficient = 0.0 🔗

  • void set_drag_coefficient(value: float)

  • float get_drag_coefficient()

物体的阻力系数。较高的值会增加该物体的空气阻力。

注意:Godot 的默认物理实现当前未使用该值。


float linear_stiffness = 0.5 🔗

  • void set_linear_stiffness(value: float)

  • float get_linear_stiffness()

值越大得到的物体约坚硬,较低的值会提高物体的弯曲能力。取值范围为 0.01.0 之间(含端点)。


NodePath parent_collision_ignore = NodePath("") 🔗

  • void set_parent_collision_ignore(value: NodePath)

  • NodePath get_parent_collision_ignore()

指向 CollisionObject3DNodePath,这个 SoftBody3D 应该避免穿过它。


float pressure_coefficient = 0.0 🔗

  • void set_pressure_coefficient(value: float)

  • float get_pressure_coefficient()

该软体的压力系数。模拟物体内部的压力积聚。较高的值会增加该效果的强度。


bool ray_pickable = true 🔗

  • void set_ray_pickable(value: bool)

  • bool is_ray_pickable()

如果为 true,则该 SoftBody3D 会响应 RayCast3D


int simulation_precision = 5 🔗

  • void set_simulation_precision(value: int)

  • int get_simulation_precision()

增加这个值会改善模拟结果,但会影响性能。请小心使用。


float total_mass = 1.0 🔗

  • void set_total_mass(value: float)

  • float get_total_mass()

该 SoftBody3D 的质量。


方法说明

void add_collision_exception_with(body: Node) 🔗

将一个物体添加到这个物体不能碰撞的物体列表中。


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 之间。


RID get_physics_rid() const 🔗

返回 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("")) 🔗

设置表面顶点的固定状态。当设置为 true 时,可选的 attachment_path 可以定义一个 Node3D,该固定顶点将被附加到该节点。