A [SkeletonModifier3D] to apply inertial wavering to bone chains.
This [SkeletonModifier3D] can be used to wiggle hair, cloth, and tails. This modifier behaves differently from [PhysicalBoneSimulator3D] as it attempts to return the original pose after modification. If you setup [method set_root_bone] and [method set_end_bone], it is treated as one bone chain. Note that it does not support a branched chain like Y-shaped chains. When a bone chain is created, an array is generated from the bones that exist in between and listed in the joint list. Several properties can be applied to each joint, such as [method set_joint_stiffness], [method set_joint_drag], and [method set_joint_gravity]. For simplicity, you can set values to all joints at the same time by using a [Curve]. If you want to specify detailed values individually, set [method set_individual_config] to [code]true[/code]. For physical simulation, [SpringBoneSimulator3D] can have children as self-standing collisions that are not related to [PhysicsServer3D], see also [SpringBoneCollision3D]. [b]Warning:[/b] A scaled [SpringBoneSimulator3D] will likely not behave as expected. Make sure that the parent [Skeleton3D] and its bones are not scaled.
Returns [code]true[/code] if all child [SpringBoneCollision3D]s are contained in the collision list at [param index] in the settings.
Clears all collisions from the collision list at [param index] in the settings when [method are_all_child_collisions_enabled] is [code]false[/code].
Clears all exclude collisions from the collision list at [param index] in the settings when [method are_all_child_collisions_enabled] is [code]true[/code].
Clears all settings.
Returns the center bone index of the bone chain.
Returns the center bone name of the bone chain.
Returns what the center originates from in the bone chain.
Returns the center node path of the bone chain.
Returns the collision count of the bone chain's collision list when [method are_all_child_collisions_enabled] is [code]false[/code].
Returns the node path of the [SpringBoneCollision3D] at [param collision] in the bone chain's collision list when [method are_all_child_collisions_enabled] is [code]false[/code].
Returns the drag force damping curve of the bone chain.
Returns the drag force damping curve of the bone chain.
Returns the end bone index of the bone chain.
Returns the tail direction of the end bone of the bone chain when [method is_end_bone_extended] is [code]true[/code].
Returns the end bone tail length of the bone chain when [method is_end_bone_extended] is [code]true[/code].
Returns the end bone name of the bone chain.
Returns the exclude collision count of the bone chain's exclude collision list when [method are_all_child_collisions_enabled] is [code]true[/code].
Returns the node path of the [SpringBoneCollision3D] at [param collision] in the bone chain's exclude collision list when [method are_all_child_collisions_enabled] is [code]true[/code].
Returns the gravity amount of the bone chain.
Returns the gravity amount damping curve of the bone chain.
Returns the gravity direction of the bone chain.
Returns the bone index at [param joint] in the bone chain's joint list.
Returns the bone name at [param joint] in the bone chain's joint list.
Returns the joint count of the bone chain's joint list.
Returns the drag force at [param joint] in the bone chain's joint list.
Returns the gravity amount at [param joint] in the bone chain's joint list.
Returns the gravity direction at [param joint] in the bone chain's joint list.
Returns the radius at [param joint] in the bone chain's joint list.
Returns the rotation axis at [param joint] in the bone chain's joint list.
Returns the rotation axis vector for the specified joint in the bone chain. This vector represents the axis around which the joint can rotate. It is determined based on the rotation axis set for the joint. If [method get_joint_rotation_axis] is [constant SkeletonModifier3D.ROTATION_AXIS_ALL], this method returns [code]Vector3(0, 0, 0)[/code].
Returns the stiffness force at [param joint] in the bone chain's joint list.
Returns the joint radius of the bone chain.
Returns the joint radius damping curve of the bone chain.
Returns the root bone index of the bone chain.
Returns the root bone name of the bone chain.
Returns the rotation axis of the bone chain.
Returns the rotation axis vector of the bone chain. This vector represents the axis around which the bone chain can rotate. It is determined based on the rotation axis set for the bone chain. If [method get_rotation_axis] is [constant SkeletonModifier3D.ROTATION_AXIS_ALL], this method returns [code]Vector3(0, 0, 0)[/code].
Returns the stiffness force of the bone chain.
Returns the stiffness force damping curve of the bone chain.
Returns [code]true[/code] if the config can be edited individually for each joint.
Returns [code]true[/code] if the end bone is extended to have a tail.
Resets a simulating state with respect to the current bone pose. It is useful to prevent the simulation result getting violent. For example, calling this immediately after a call to [method AnimationPlayer.play] without a fading, or within the previous [signal SkeletonModifier3D.modification_processed] signal if it's condition changes significantly.
Sets the center bone index of the bone chain.
Sets the center bone name of the bone chain.
Sets what the center originates from in the bone chain. Bone movement is calculated based on the difference in relative distance between center and bone in the previous and next frames. For example, if the parent [Skeleton3D] is used as the center, the bones are considered to have not moved if the [Skeleton3D] moves in the world. In this case, only a change in the bone pose is considered to be a bone movement.
Sets the center node path of the bone chain.
Sets the number of collisions in the collision list at [param index] in the settings when [method are_all_child_collisions_enabled] is [code]false[/code].
Sets the node path of the [SpringBoneCollision3D] at [param collision] in the bone chain's collision list when [method are_all_child_collisions_enabled] is [code]false[/code].
Sets the drag force of the bone chain. The greater the value, the more suppressed the wiggling. The value is scaled by [method set_drag_damping_curve] and cached in each joint setting in the joint list.
Sets the drag force damping curve of the bone chain.
If [param enabled] is [code]true[/code], all child [SpringBoneCollision3D]s are colliding and [method set_exclude_collision_path] is enabled as an exclusion list at [param index] in the settings. If [param enabled] is [code]false[/code], you need to manually register all valid collisions with [method set_collision_path].
Sets the end bone index of the bone chain.
Sets the end bone tail direction of the bone chain when [method is_end_bone_extended] is [code]true[/code].
Sets the end bone tail length of the bone chain when [method is_end_bone_extended] is [code]true[/code].
Sets the end bone name of the bone chain. [b]Note:[/b] End bone must be the root bone or a child of the root bone. If they are the same, the tail must be extended by [method set_extend_end_bone] to jiggle the bone.
Sets the number of exclude collisions in the exclude collision list at [param index] in the settings when [method are_all_child_collisions_enabled] is [code]true[/code].
Sets the node path of the [SpringBoneCollision3D] at [param collision] in the bone chain's exclude collision list when [method are_all_child_collisions_enabled] is [code]true[/code].
If [param enabled] is [code]true[/code], the end bone is extended to have a tail. The extended tail config is allocated to the last element in the joint list. In other words, if you set [param enabled] to [code]false[/code], the config of the last element in the joint list has no effect in the simulated result.
Sets the gravity amount of the bone chain. This value is not an acceleration, but a constant velocity of movement in [method set_gravity_direction]. If [param gravity] is not [code]0[/code], the modified pose will not return to the original pose since it is always affected by gravity. The value is scaled by [method set_gravity_damping_curve] and cached in each joint setting in the joint list.
Sets the gravity amount damping curve of the bone chain.
Sets the gravity direction of the bone chain. This value is internally normalized and then multiplied by [method set_gravity]. The value is cached in each joint setting in the joint list.
If [param enabled] is [code]true[/code], the config can be edited individually for each joint.
Sets the drag force at [param joint] in the bone chain's joint list when [method is_config_individual] is [code]true[/code].
Sets the gravity amount at [param joint] in the bone chain's joint list when [method is_config_individual] is [code]true[/code].
Sets the gravity direction at [param joint] in the bone chain's joint list when [method is_config_individual] is [code]true[/code].
Sets the joint radius at [param joint] in the bone chain's joint list when [method is_config_individual] is [code]true[/code].
Sets the rotation axis at [param joint] in the bone chain's joint list when [method is_config_individual] is [code]true[/code]. The axes are based on the [method Skeleton3D.get_bone_rest]'s space, if [param axis] is [constant SkeletonModifier3D.ROTATION_AXIS_CUSTOM], you can specify any axis. [b]Note:[/b] The rotation axis and the forward vector shouldn't be colinear to avoid unintended rotation since [SpringBoneSimulator3D] does not factor in twisting forces.
Sets the rotation axis vector for the specified joint in the bone chain. This vector is normalized by an internal process and represents the axis around which the bone chain can rotate. If the vector length is [code]0[/code], it is considered synonymous with [constant SkeletonModifier3D.ROTATION_AXIS_ALL].
Sets the stiffness force at [param joint] in the bone chain's joint list when [method is_config_individual] is [code]true[/code].
Sets the joint radius of the bone chain. It is used to move and slide with the [SpringBoneCollision3D] in the collision list. The value is scaled by [method set_radius_damping_curve] and cached in each joint setting in the joint list.
Sets the joint radius damping curve of the bone chain.
Sets the root bone index of the bone chain.
Sets the root bone name of the bone chain.
Sets the rotation axis of the bone chain. If set to a specific axis, it acts like a hinge joint. The value is cached in each joint setting in the joint list. The axes are based on the [method Skeleton3D.get_bone_rest]'s space, if [param axis] is [constant SkeletonModifier3D.ROTATION_AXIS_CUSTOM], you can specify any axis. [b]Note:[/b] The rotation axis vector and the forward vector shouldn't be colinear to avoid unintended rotation since [SpringBoneSimulator3D] does not factor in twisting forces.
Sets the rotation axis vector of the bone chain. The value is cached in each joint setting in the joint list. This vector is normalized by an internal process and represents the axis around which the bone chain can rotate. If the vector length is [code]0[/code], it is considered synonymous with [constant SkeletonModifier3D.ROTATION_AXIS_ALL].
Sets the stiffness force of the bone chain. The greater the value, the faster it recovers to its initial pose. If [param stiffness] is [code]0[/code], the modified pose will not return to the original pose. The value is scaled by [method set_stiffness_damping_curve] and cached in each joint setting in the joint list.
Sets the stiffness force damping curve of the bone chain.
- The constant force that always affected bones. It is equal to the result when the parent [Skeleton3D] moves at this speed in the opposite direction. This is useful for effects such as wind and anti-gravity.
- If [code]true[/code], the solver retrieves the bone axis from the bone pose every frame. If [code]false[/code], the solver retrieves the bone axis from the bone rest and caches it, which increases performance slightly, but position changes in the bone pose made before processing this [SpringBoneSimulator3D] are ignored.
- The number of settings.
The world origin is defined as center.
The [Node3D] specified by [method set_center_node] is defined as center. If [Node3D] is not found, the parent [Skeleton3D] is treated as center.
The bone pose origin of the parent [Skeleton3D] specified by [method set_center_bone] is defined as center. If [Node3D] is not found, the parent [Skeleton3D] is treated as center.