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...
SpringBoneSimulator3D
继承: SkeletonModifier3D < Node3D < Node < Object
对骨骼链应用惯性摆动的 SkeletonModifier3D。
描述
这种 SkeletonModifier3D 可以用来扭动头发、布料和尾巴,其行为与 PhysicalBoneSimulator3D 不同,修改后会尝试返回到原始姿势。
如果设置了 set_root_bone() 和 set_end_bone() 就会将其视为骨骼链。请注意,不支持像 Y 形链那样的分支链。
创建骨骼链时会根据首尾之间的骨骼生成数组,在关节列表中展示。
每个关节都有许多属性可以应用,例如 set_joint_stiffness()、set_joint_drag() 和 set_joint_gravity()。
为了简化操作,你可以使用 Curve 同时设置所有关节的值。如果你想单独指定详细值,请将 set_individual_config() 设置为 true
。
物理模拟时,SpringBoneSimulator3D 可以有子对象作为独立的碰撞体,这些碰撞体与 PhysicsServer3D 无关,另见 SpringBoneCollision3D。
警告:缩放后的 SpringBoneSimulator3D 可能不会按预期行为。请确保父级 Skeleton3D 及其骨骼没有缩放。
属性
|
方法
枚举
enum BoneDirection: 🔗
BoneDirection BONE_DIRECTION_PLUS_X = 0
+X 轴对应的枚举值。
BoneDirection BONE_DIRECTION_MINUS_X = 1
-X 轴对应的枚举值。
BoneDirection BONE_DIRECTION_PLUS_Y = 2
+Y 轴对应的枚举值。
BoneDirection BONE_DIRECTION_MINUS_Y = 3
-Y 轴对应的枚举值。
BoneDirection BONE_DIRECTION_PLUS_Z = 4
+Z 轴对应的枚举值。
BoneDirection BONE_DIRECTION_MINUS_Z = 5
-Z 轴对应的枚举值。
BoneDirection BONE_DIRECTION_FROM_PARENT = 6
枚举值,表示从父骨骼指向子骨骼的轴。
enum CenterFrom: 🔗
CenterFrom CENTER_FROM_WORLD_ORIGIN = 0
将世界原点定义为中心。
CenterFrom CENTER_FROM_NODE = 1
将 set_center_node() 指定的 Node3D 定义为中心。
如果未找到 Node3D,则将父 Skeleton3D 作为中心。
CenterFrom CENTER_FROM_BONE = 2
将 set_center_bone() 指定的父 Skeleton3D 的骨骼姿势原点定义为中心。
如果未找到 Node3D,则将父 Skeleton3D 作为中心。
enum RotationAxis: 🔗
RotationAxis ROTATION_AXIS_X = 0
枚举值,表示 X 轴的旋转。
RotationAxis ROTATION_AXIS_Y = 1
枚举值,表示 Y 轴的旋转。
RotationAxis ROTATION_AXIS_Z = 2
枚举值,表示 Z 轴的旋转。
RotationAxis ROTATION_AXIS_ALL = 3
枚举值,表示无约束的旋转。
属性说明
设置的数量。
方法说明
bool are_all_child_collisions_enabled(index: int) const 🔗
如果所有子 SpringBoneCollision3D 都包含在设置中索引为 index
的碰撞列表中,则返回 true
。
void clear_collisions(index: int) 🔗
当 are_all_child_collisions_enabled() 为 false
时,清空设置中索引为 index
的碰撞列表中的所有碰撞。
void clear_exclude_collisions(index: int) 🔗
当 are_all_child_collisions_enabled() 为 true
时,清空设置中索引为 index
的碰撞列表中的所有排除碰撞。
void clear_settings() 🔗
清空所有设置。
int get_center_bone(index: int) const 🔗
返回骨骼链中间骨骼的索引。
String get_center_bone_name(index: int) const 🔗
返回骨骼链中间骨骼的名称。
CenterFrom get_center_from(index: int) const 🔗
返回骨骼链中心的来源。
NodePath get_center_node(index: int) const 🔗
返回骨骼链中心节点的路径。
int get_collision_count(index: int) const 🔗
当 are_all_child_collisions_enabled() 为 false
时,返回骨骼链的碰撞列表中的碰撞数量。
NodePath get_collision_path(index: int, collision: int) const 🔗
当 are_all_child_collisions_enabled() 为 false
时,返回骨骼链的碰撞列表中 collision
的 SpringBoneCollision3D 节点路径。
float get_drag(index: int) const 🔗
返回骨骼链的阻力阻尼曲线。
Curve get_drag_damping_curve(index: int) const 🔗
返回骨骼链的阻力阻尼曲线。
int get_end_bone(index: int) const 🔗
返回骨骼链末尾骨骼的索引。
BoneDirection get_end_bone_direction(index: int) const 🔗
当 is_end_bone_extended() 为 true
时,返回骨骼链末端骨骼的尾部方向。
float get_end_bone_length(index: int) const 🔗
当 is_end_bone_extended() 为 true
时,返回骨骼链末端骨骼的尾部长度。
String get_end_bone_name(index: int) const 🔗
返回骨骼链末尾骨骼的名称。
int get_exclude_collision_count(index: int) const 🔗
当 are_all_child_collisions_enabled() 为 true
时,返回骨骼链的排除碰撞列表中的排除碰撞数量。
NodePath get_exclude_collision_path(index: int, collision: int) const 🔗
当 are_all_child_collisions_enabled() 为 true
时,返回骨骼链的排除碰撞列表中 collision
的 SpringBoneCollision3D 节点路径。
float get_gravity(index: int) const 🔗
返回骨骼链的重力强度。
Curve get_gravity_damping_curve(index: int) const 🔗
返回骨骼链的重力强度阻尼曲线。
Vector3 get_gravity_direction(index: int) const 🔗
返回骨骼链的重力方向。
int get_joint_bone(index: int, joint: int) const 🔗
返回骨骼链关节列表中位于 joint
的骨骼的索引。
String get_joint_bone_name(index: int, joint: int) const 🔗
返回骨骼链关节列表中位于 joint
的骨骼的名称。
int get_joint_count(index: int) const 🔗
返回骨骼链关节列表中的关节数量。
float get_joint_drag(index: int, joint: int) const 🔗
返回骨骼链关节列表中 joint
关节的阻力。
float get_joint_gravity(index: int, joint: int) const 🔗
返回骨骼链关节列表中 joint
关节的重力强度。
Vector3 get_joint_gravity_direction(index: int, joint: int) const 🔗
返回骨骼链关节列表中 joint
关节的重力方向。
float get_joint_radius(index: int, joint: int) const 🔗
返回骨骼链关节列表中 joint
关节的半径。
RotationAxis get_joint_rotation_axis(index: int, joint: int) const 🔗
返回骨骼链关节列表中 joint
关节的旋转轴。
float get_joint_stiffness(index: int, joint: int) const 🔗
返回骨骼链关节列表中 joint
关节的刚度力。
float get_radius(index: int) const 🔗
返回骨骼链的关节半径。
Curve get_radius_damping_curve(index: int) const 🔗
返回骨骼链的关节半径阻尼曲线。
int get_root_bone(index: int) const 🔗
返回骨骼链根骨骼的索引。
String get_root_bone_name(index: int) const 🔗
返回骨骼链根骨骼的名称。
RotationAxis get_rotation_axis(index: int) const 🔗
返回骨骼链的旋转轴。
float get_stiffness(index: int) const 🔗
返回骨骼链的刚度力。
Curve get_stiffness_damping_curve(index: int) const 🔗
返回骨骼链的刚度力阻尼曲线。
bool is_config_individual(index: int) const 🔗
如果可以为每个关节单独编辑配置,则返回 true
。
bool is_end_bone_extended(index: int) const 🔗
如果末端骨骼被扩展形成尾部,则返回 true
。
void reset() 🔗
重置与当前骨骼姿势相关的模拟状态。
这样做有助于防止模拟结果变得剧烈。例如在不带渐变调用 AnimationPlayer.play() 之后立即调用该方法,或者在前一个 SkeletonModifier3D.modification_processed 信号中当条件发生显著变化时调用。
void set_center_bone(index: int, bone: int) 🔗
设置骨骼链中心骨骼的索引。
void set_center_bone_name(index: int, bone_name: String) 🔗
设置骨骼链中心骨骼的名称。
void set_center_from(index: int, center_from: CenterFrom) 🔗
设置骨骼链中心的来源。
骨骼的移动是基于中心与骨骼在前后帧之间相对距离的变化来计算的。
例如将父级 Skeleton3D 用作中心,那么 Skeleton3D 在世界中移动时,骨骼就会被视为没有移动。
在这种情况下,只有骨骼姿势的变化才被视为骨骼的移动。
void set_center_node(index: int, node_path: NodePath) 🔗
设置骨骼链中心节点的路径。
void set_collision_count(index: int, count: int) 🔗
当 are_all_child_collisions_enabled() 为 false
时,设置索引为 index
的碰撞列表中的碰撞数量。
void set_collision_path(index: int, collision: int, node_path: NodePath) 🔗
当 are_all_child_collisions_enabled() 为 false
时,设置骨骼链的碰撞列表中 collision
的 SpringBoneCollision3D 节点路径。
void set_drag(index: int, drag: float) 🔗
设置骨骼链的阻力。值越大,摆动越受到抑制。
该值由 set_drag_damping_curve() 进行缩放,并缓存到关节列表中每个关节的设置中。
void set_drag_damping_curve(index: int, curve: Curve) 🔗
设置骨骼链的阻力阻尼曲线。
void set_enable_all_child_collisions(index: int, enabled: bool) 🔗
如果将 enabled
设置为 true
,则所有子级 SpringBoneCollision3D 都会发生碰撞,set_exclude_collision_path() 在设置中的 index
处启用作为排除列表。
如果将 enabled
设置为 false
,则需要手动使用 set_collision_path() 注册所有有效的碰撞。
void set_end_bone(index: int, bone: int) 🔗
设置骨骼链中末端骨骼的索引。
void set_end_bone_direction(index: int, bone_direction: BoneDirection) 🔗
当 is_end_bone_extended() 为 true
时,设置骨骼链中末端骨骼的尾部方向。
void set_end_bone_length(index: int, length: float) 🔗
当 is_end_bone_extended() 为 true
时,设置骨骼链中末端骨骼的尾部长度。
void set_end_bone_name(index: int, bone_name: String) 🔗
设置骨骼链中末端骨骼的名称。
注意: 末端骨骼必须是根骨骼或根骨骼的子骨骼。如果相同,则必须通过 set_extend_end_bone() 扩展尾部,使骨骼产生摆动。
void set_exclude_collision_count(index: int, count: int) 🔗
当 are_all_child_collisions_enabled() 为 true
时,设置索引为 index
的排除碰撞列表中的排除碰撞数量。
void set_exclude_collision_path(index: int, collision: int, node_path: NodePath) 🔗
当 are_all_child_collisions_enabled() 为 true
时,设置骨骼链的排除碰撞列表中 collision
的 SpringBoneCollision3D 节点路径。
void set_extend_end_bone(index: int, enabled: bool) 🔗
如果 enabled
为 true
,则会延伸末端骨骼形成尾部。
扩展的尾部配置会分配给关节列表中的最后一个元素。
换句话说,如果将 enabled
设置为 false
,则关节列表中最后一个元素的配置在模拟结果中将没有效果。
void set_gravity(index: int, gravity: float) 🔗
设置骨骼链的重力强度。该值不是加速度,而是 set_gravity_direction() 的恒定运动速度。
如果 gravity
不为 0
,则修改后的姿势将不会返回到原始姿势,因为它始终受到重力的影响。
该值会被 set_gravity_damping_curve() 缩放,并缓存到关节列表中的每个关节设置中。
void set_gravity_damping_curve(index: int, curve: Curve) 🔗
设置骨骼链的重力强度阻尼曲线。
void set_gravity_direction(index: int, gravity_direction: Vector3) 🔗
设置骨骼链的重力方向。内部会对该值进行归一化,然后乘以 set_gravity()。
该值会被缓存到关节列表中的每个关节设置中。
void set_individual_config(index: int, enabled: bool) 🔗
如果 enabled
为 true
,则可以为每个关节单独编辑配置。
void set_joint_drag(index: int, joint: int, drag: float) 🔗
当 is_config_individual() 为 true
时,设置骨骼链关节列表中 joint
关节的阻力。
void set_joint_gravity(index: int, joint: int, gravity: float) 🔗
当 is_config_individual() 为 true
时,设置骨骼链关节列表中 joint
关节的重力强度。
void set_joint_gravity_direction(index: int, joint: int, gravity_direction: Vector3) 🔗
当 is_config_individual() 为 true
时,设置骨骼链关节列表中 joint
关节的重力方向。
void set_joint_radius(index: int, joint: int, radius: float) 🔗
当 is_config_individual() 为 true
时,设置骨骼链关节列表中 joint
关节的半径。
void set_joint_rotation_axis(index: int, joint: int, axis: RotationAxis) 🔗
当 is_config_individual() 为 true
时,设置骨骼链关节列表中 joint
关节的旋转轴。
void set_joint_stiffness(index: int, joint: int, stiffness: float) 🔗
当 is_config_individual() 为 true
时,设置骨骼链关节列表中 joint
关节的刚度力。
void set_radius(index: int, radius: float) 🔗
设置骨骼链的关节半径,用于在碰撞列表中与 SpringBoneCollision3D 一起移动和滑动。
该值由 set_radius_damping_curve() 进行缩放,并缓存到关节列表中每个关节的设置中。
void set_radius_damping_curve(index: int, curve: Curve) 🔗
设置骨骼链的关节半径阻尼曲线。
void set_root_bone(index: int, bone: int) 🔗
设置骨骼链中根骨骼的索引。
void set_root_bone_name(index: int, bone_name: String) 🔗
设置骨骼链中根骨骼的名称。
void set_rotation_axis(index: int, axis: RotationAxis) 🔗
设置骨骼链的旋转轴。如果设置了特定的轴,效果就会像铰链关节一样。
该值会缓存到关节列表中的每个关节的设置中。
注意:由于 SpringBoneSimulator3D 不考虑扭转力,旋转轴和前进向量不应共线,以避免意外旋转。
void set_stiffness(index: int, stiffness: float) 🔗
设置骨骼链的刚度力。值越大,恢复到初始姿势的速度越快。
如果 stiffness
为 0
,则修改后的姿势不会返回到原始姿势。
该值由 set_stiffness_damping_curve() 进行缩放,并缓存到关节列表中每个关节的设置中。
void set_stiffness_damping_curve(index: int, curve: Curve) 🔗
设置骨骼链的刚度力阻尼曲线。