Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

SoftBody3D

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

可形变的 3D 物理网格。

描述

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

注意: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 ( Node body )

PhysicsBody3D[]

get_collision_exceptions ( )

bool

get_collision_layer_value ( int layer_number ) const

bool

get_collision_mask_value ( int layer_number ) const

RID

get_physics_rid ( ) const

Vector3

get_point_transform ( int point_index )

bool

is_point_pinned ( int point_index ) const

void

remove_collision_exception_with ( Node body )

void

set_collision_layer_value ( int layer_number, bool value )

void

set_collision_mask_value ( int layer_number, bool value )

void

set_point_pinned ( int point_index, bool pinned, NodePath attachment_path=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 ( int value )

  • int get_collision_layer ( )

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

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


int collision_mask = 1

  • void set_collision_mask ( int value )

  • int get_collision_mask ( )

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

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


float damping_coefficient = 0.01

  • void set_damping_coefficient ( float value )

  • 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 ( float value )

  • float get_drag_coefficient ( )

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

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


float linear_stiffness = 0.5

  • void set_linear_stiffness ( float value )

  • float get_linear_stiffness ( )

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


NodePath parent_collision_ignore = NodePath("")

  • void set_parent_collision_ignore ( NodePath value )

  • NodePath get_parent_collision_ignore ( )

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


float pressure_coefficient = 0.0

  • void set_pressure_coefficient ( float value )

  • float get_pressure_coefficient ( )

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


bool ray_pickable = true

  • void set_ray_pickable ( bool value )

  • bool is_ray_pickable ( )

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


int simulation_precision = 5

  • void set_simulation_precision ( int value )

  • int get_simulation_precision ( )

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


float total_mass = 1.0

  • void set_total_mass ( float value )

  • float get_total_mass ( )

该 SoftBody3D 的质量。


方法说明

void add_collision_exception_with ( Node body )

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


PhysicsBody3D[] get_collision_exceptions ( )

返回该物体的碰撞例外节点数组。


bool get_collision_layer_value ( int layer_number ) const

返回 collision_layer 中是否启用了指定的层,给定的 layer_number 应在 1 和 32 之间。


bool get_collision_mask_value ( int layer_number ) const

返回 collision_mask 中是否启用了指定的层,给定的 layer_number 应在 1 和 32 之间。


RID get_physics_rid ( ) const

返回 PhysicsServer3D 用于该实体的内部 RID


Vector3 get_point_transform ( int point_index )

返回表面数组中顶点的局部平移。


bool is_point_pinned ( int point_index ) const

如果顶点设置为固定,则返回 true


void remove_collision_exception_with ( Node body )

将一个物体从该物体不能碰撞的物体列表中移除。


void set_collision_layer_value ( int layer_number, bool value )

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


void set_collision_mask_value ( int layer_number, bool value )

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


void set_point_pinned ( int point_index, bool pinned, NodePath attachment_path=NodePath("") )

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