SpringBoneSimu

继承: SkeletonRevamp < Item3D < Item < Object

SkeletonRevamp将惯性摇摆应用于骨链。

描述

这个SkeletonRevamp可以用来摆动头发、布料和尾巴。这个修改器的行为与PhysicalBoneSimu不同,因为它试图在修改后返回原始姿势。

如果设置set_root_bone()set_end_bone(),则将其视为一条骨链。请注意,它不支持像Y形链那样的支链。

创建骨链时,会从存在于两者之间并列在关节列表中的骨骼生成一个数组。

几个属性可以应用于每个关节,例如set_joint_stiffness()set_joint_drag()set_joint_gravity()

为简单起见,您可以使用Curve同时为所有关节设置值。如果要单独指定详细值,请将set_individual_config()设置为true

对于物理模拟,SpringBoneSimu可以将子级作为独立冲突,而这些冲突与PhysicsServer3D无关,参见SpringBoneCollider

警告:缩放的SpringBoneSimu可能不会按预期运行。请确保父SkeletonMesh及其骨骼没有缩放。

属性

方法

bool

are_all_child_collisions_enabled(index: int) const

void

clear_collisions(index: int)

void

clear_exclude_collisions(index: int)

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

ItemPath

get_center_node(index: int) const

int

get_collision_count(index: int) const

ItemPath

get_collision_path(index: int, collision: int) const

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

float

get_end_bone_length(index: int) const

String

get_end_bone_name(index: int) const

int

get_exclude_collision_count(index: int) const

ItemPath

get_exclude_collision_path(index: int, collision: int) const

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

String

get_joint_bone_name(index: int, joint: int) const

int

get_joint_count(index: int) const

float

get_joint_drag(index: int, joint: int) const

float

get_joint_gravity(index: int, joint: int) const

Vector3

get_joint_gravity_direction(index: int, joint: int) const

float

get_joint_radius(index: int, joint: int) const

RotationAxis

get_joint_rotation_axis(index: int, joint: int) const

float

get_joint_stiffness(index: int, joint: int) const

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

bool

is_end_bone_extended(index: int) const

void

reset()

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)

void

set_center_node(index: int, node_path: ItemPath)

void

set_collision_count(index: int, count: int)

void

set_collision_path(index: int, collision: int, node_path: ItemPath)

void

set_drag(index: int, drag: float)

void

set_drag_damping_curve(index: int, curve: Curve)

void

set_enable_all_child_collisions(index: int, enabled: bool)

void

set_end_bone(index: int, bone: int)

void

set_end_bone_direction(index: int, bone_direction: BoneDirection)

void

set_end_bone_length(index: int, length: float)

void

set_end_bone_name(index: int, bone_name: String)

void

set_exclude_collision_count(index: int, count: int)

void

set_exclude_collision_path(index: int, collision: int, node_path: ItemPath)

void

set_extend_end_bone(index: int, enabled: bool)

void

set_gravity(index: int, gravity: float)

void

set_gravity_damping_curve(index: int, curve: Curve)

void

set_gravity_direction(index: int, gravity_direction: Vector3)

void

set_individual_config(index: int, enabled: bool)

void

set_joint_drag(index: int, joint: int, drag: float)

void

set_joint_gravity(index: int, joint: int, gravity: float)

void

set_joint_gravity_direction(index: int, joint: int, gravity_direction: Vector3)

void

set_joint_radius(index: int, joint: int, radius: float)

void

set_joint_rotation_axis(index: int, joint: int, axis: RotationAxis)

void

set_joint_stiffness(index: int, joint: int, stiffness: float)

void

set_radius(index: int, radius: float)

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)

void

set_stiffness(index: int, stiffness: float)

void

set_stiffness_damping_curve(index: int, curve: Curve)


枚举

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()指定的Item3D定义为center。

如果未找到Item3D,则将父级SkeletonMesh视为中心。

CenterFrom CENTER_FROM_BONE = 2

set_center_bone()指定的父SkeletonMesh的骨位姿原点定义为中心。

如果未找到Item3D,则将父级SkeletonMesh视为中心。


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

无约束旋转的枚举值。


属性说明

int setting_count = 0 🔗

  • void set_setting_count(value: int)

  • int get_setting_count()

设置的数量。


方法说明

bool are_all_child_collisions_enabled(index: int) const 🔗

如果所有子SpringBoneCollider都包含在设置中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 🔗

返回骨链中中心的来源。


ItemPath get_center_node(index: int) const 🔗

返回骨链的中心节点路径。


int get_collision_count(index: int) const 🔗

返回are_all_child_collisions_enabled()false时骨链冲突列表的冲突计数。


ItemPath get_collision_path(index: int, collision: int) const 🔗

返回are_all_child_collisions_enabled()false时,骨链冲突列表中collisionSpringBoneCollider的节点路径。


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时,返回骨链的排除冲突列表的排除冲突计数。


ItemPath get_exclude_collision_path(index: int, collision: int) const 🔗

返回are_all_child_collisions_enabled()true时骨链排除冲突列表中collisionSpringBoneCollider的节点路径。


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()后立即调用this而不会衰落,或者在之前的SkeletonRevamp.modification_processed信号中调用this,如果它的条件发生了重大变化。


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) 🔗

设置中心来自骨链中的内容。

骨运动是根据前一帧和下一帧中中心和骨之间的相对距离差来计算的。

例如,如果以父SkeletonMesh为中心,如果SkeletonMesh在世界上移动,则骨骼被认为没有移动。

在这种情况下,只有骨姿势的变化被认为是骨运动。


void set_center_node(index: int, node_path: ItemPath) 🔗

设置骨链的中心节点路径。


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: ItemPath) 🔗

are_all_child_collisions_enabled()false时,在骨链的冲突列表中的collision处设置SpringBoneCollider的节点路径。


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,则所有子SpringBoneCollider将发生冲突,并且在设置中的index处启用set_exclude_collision_path()作为排除列表。

如果将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: ItemPath) 🔗

are_all_child_collisions_enabled()true时,在骨链的排除冲突列表中的collision处设置SpringBoneCollider的节点路径。


void set_extend_end_bone(index: int, enabled: bool) 🔗

如果enabledtrue,则扩展末端骨骼以具有尾部。

扩展尾配置分配给联合列表中的最后一个元素。

换句话说,如果您将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) 🔗

如果enabledtrue,则可以为每个关节单独编辑配置。


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) 🔗

设置骨链的关节半径。它用于与碰撞列表中的SpringBoneCollider一起移动和滑动。

该值按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) 🔗

设置骨链的旋转轴。如果设置特定的轴,它的作用就像铰链关节。

该值缓存在联合列表中的每个联合设置中。

注意:旋转轴和前进矢量不应该是共线的,以避免意外旋转,因为**SpringBoneSimu不考虑扭转力。


void set_stiffness(index: int, stiffness: float) 🔗

设置骨链的刚度力。值越大,它恢复到初始姿势的速度就越快。

如果stiffness0,则修改后的姿势不会返回到原始姿势。

该值按set_stiffness_damping_curve()缩放,并缓存在联合列表中的每个联合设置中。


void set_stiffness_damping_curve(index: int, curve: Curve) 🔗

设置骨链的刚度力阻尼曲线。