SkeletonMesh

继承: Item3D < Item < Object

包含骨骼层次结构的节点,用于创建3D骨骼动画。

描述

SkeletonMesh提供了一个用于管理骨骼层次结构的界面,包括姿势、休息和动画(参见Animation)。它也可以使用布娃娃物理。

骨骼相对于骨骼的整体变换由骨骼姿势决定。骨架定义了骨骼姿势的初始变换。

请注意,下面的“全局姿势”是指骨骼相对于骨骼的整体变换,因此它不是骨骼的实际全局/世界变换。

属性

方法

int

add_bone(name: String)

void

clear_bones()

void

clear_bones_global_pose_override()

Skin

create_skin_from_rest_transforms()

int

find_bone(name: String) const

void

force_update_all_bone_transforms()

void

force_update_bone_child_transform(bone_idx: int)

PackedInt32Array

get_bone_children(bone_idx: int) const

int

get_bone_count() const

Transform3D

get_bone_global_pose(bone_idx: int) const

Transform3D

get_bone_global_pose_no_override(bone_idx: int) const

Transform3D

get_bone_global_pose_override(bone_idx: int) const

Transform3D

get_bone_global_rest(bone_idx: int) const

Variant

get_bone_meta(bone_idx: int, key: StringName) const

Array[StringName]

get_bone_meta_list(bone_idx: int) const

String

get_bone_name(bone_idx: int) const

int

get_bone_parent(bone_idx: int) const

Transform3D

get_bone_pose(bone_idx: int) const

Vector3

get_bone_pose_position(bone_idx: int) const

Quaternion

get_bone_pose_rotation(bone_idx: int) const

Vector3

get_bone_pose_scale(bone_idx: int) const

Transform3D

get_bone_rest(bone_idx: int) const

StringName

get_concatenated_bone_names() const

PackedInt32Array

get_parentless_bones() const

int

get_version() const

bool

has_bone_meta(bone_idx: int, key: StringName) const

bool

is_bone_enabled(bone_idx: int) const

void

localize_rests()

void

physical_bones_add_collision_exception(exception: RID)

void

physical_bones_remove_collision_exception(exception: RID)

void

physical_bones_start_simulation(bones: Array[StringName] = [])

void

physical_bones_stop_simulation()

SkinReference

register_skin(skin: Skin)

void

reset_bone_pose(bone_idx: int)

void

reset_bone_poses()

void

set_bone_enabled(bone_idx: int, enabled: bool = true)

void

set_bone_global_pose(bone_idx: int, pose: Transform3D)

void

set_bone_global_pose_override(bone_idx: int, pose: Transform3D, amount: float, persistent: bool = false)

void

set_bone_meta(bone_idx: int, key: StringName, value: Variant)

void

set_bone_name(bone_idx: int, name: String)

void

set_bone_parent(bone_idx: int, parent_idx: int)

void

set_bone_pose(bone_idx: int, pose: Transform3D)

void

set_bone_pose_position(bone_idx: int, position: Vector3)

void

set_bone_pose_rotation(bone_idx: int, rotation: Quaternion)

void

set_bone_pose_scale(bone_idx: int, scale: Vector3)

void

set_bone_rest(bone_idx: int, rest: Transform3D)

void

unparent_bone_and_rest(bone_idx: int)


信号

bone_enabled_changed(bone_idx: int) 🔗

bone_idx处的骨与set_bone_enabled()切换时发出。使用is_bone_enabled()检查新值。


bone_list_changed() 🔗


pose_updated() 🔗

姿势更新时发出。

注意:在更新过程中,不会触发此信号,因此不会检测到SkeletonRevamp的修改。


rest_updated() 🔗

其余更新时发出。


show_rest_only_changed() 🔗

show_rest_only值变化时发出。


skeleton_updated() 🔗

当已经计算出最终姿势时发出的将在更新过程中应用于皮肤。

这意味着所有SkeletonRevamp处理完成,为了检测每个SkeletonRevamp的处理完成情况,使用SkeletonRevamp.modification_processed


枚举

enum ModifierCallbackModeProcess: 🔗

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_PHYSICS = 0

设置一个标志来处理物理帧期间的修改(参见Item.NOTIFICATION_INTERNAL_PHYSICS_PROCESS)。

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_IDLE = 1

设置一个标志以在进程帧期间处理修改(参见Item.NOTIFICATION_INTERNAL_PROCESS)。


常量

NOTIFICATION_UPDATE_SKELETON = 50 🔗

当需要更新此骨架的姿势时收到通知。在这种情况下,在延迟过程中每帧只调用一次。


属性说明

bool animate_physical_bones = true 🔗

  • void set_animate_physical_bones(value: bool)

  • bool get_animate_physical_bones()

已弃用: 未来版本中可能会修改或移除该属性。

如果您遵循推荐的工作流程并明确将PhysicalBoneSimu作为SkeletonMesh的子级,您可以通过其SkeletonRevamp.active控制它是否受到光线投射的影响而无需运行physical_bones_start_simulation()

但是,对于旧的(已弃用的)配置,SkeletonMesh有一个内部虚拟PhysicalBoneSimu以实现兼容性。此属性控制内部虚拟PhysicalBoneSimuSkeletonRevamp.active


ModifierCallbackModeProcess modifier_callback_mode_process = 1 🔗

设置修饰符的处理时间。


float motion_scale = 1.0 🔗

  • void set_motion_scale(value: float)

  • float get_motion_scale()

乘以3D位置轨迹动画。

注意:除非此值为1.0,否则动画中的键值将与实际位置值不匹配。


bool show_rest_only = false 🔗

  • void set_show_rest_only(value: bool)

  • bool is_show_rest_only()

如果true,则强制骨骼处于默认的休息姿势,而不管它们的值如何。在编辑器中,这也可以防止骨骼被编辑。


方法说明

int add_bone(name: String) 🔗

添加具有给定名称的新骨骼。如果此方法失败,则返回新骨骼的索引,或-1

注意:骨名应该是唯一的、非空的,并且不能包含/字符。


void clear_bones() 🔗

清除这具骨架中的所有骨头。


void clear_bones_global_pose_override() 🔗

已弃用: 未来版本中可能会修改或移除该方法。

删除骨架中所有骨骼上的全局姿势覆盖。


Skin create_skin_from_rest_transforms() 🔗


int find_bone(name: String) const 🔗

返回与name匹配的骨索引作为其名称。如果不存在具有此名称的骨,则返回-1


void force_update_all_bone_transforms() 🔗

已弃用: 这个方法只应在内部调用。

力更新骨骼中所有骨骼的骨骼变换/姿势。


void force_update_bone_child_transform(bone_idx: int) 🔗

强制更新bone_idx处的骨及其所有子级的骨变换。


PackedInt32Array get_bone_children(bone_idx: int) const 🔗

返回一个数组,其中包含传入骨的所有子节点的骨索引bone_idx


int get_bone_count() const 🔗

返回骨架中骨骼的数量。


Transform3D get_bone_global_pose(bone_idx: int) const 🔗

返回指定骨骼相对于骨架的整体变换。相对于骨架框架,这不是骨骼的实际“全局”变换。

注意:这是您在流程中设置到骨架的全局姿势,最终的全局姿势可以在延迟流程中被修饰符覆盖,如果您想访问最终的全局姿势,请使用SkeletonRevamp.modification_processed


Transform3D get_bone_global_pose_no_override(bone_idx: int) const 🔗

已弃用: 未来版本中可能会修改或移除该方法。

返回指定骨骼相对于骨架的整体变换,但没有任何全局姿势覆盖。相对于骨架框架,这不是骨骼的实际“全局”变换。


Transform3D get_bone_global_pose_override(bone_idx: int) const 🔗

已弃用: 未来版本中可能会修改或移除该方法。

返回bone_idx的全局姿势覆盖变换。


Transform3D get_bone_global_rest(bone_idx: int) const 🔗

返回bone_idx的全局休息变换。


Variant get_bone_meta(bone_idx: int, key: StringName) const 🔗

使用key返回bone_idx的骨元数据。


Array[StringName] get_bone_meta_list(bone_idx: int) const 🔗

返回bone_idx的所有元数据键的列表。


String get_bone_name(bone_idx: int) const 🔗

返回索引bone_idx处的骨的名称。


int get_bone_parent(bone_idx: int) const 🔗

返回骨索引,它是bone_idx处骨的父级。如果为-1,则骨没有父级。

注意:返回的父骨将始终小于bone_idx


Transform3D get_bone_pose(bone_idx: int) const 🔗

返回指定骨骼的姿势变换。

注意:这是您在流程中设置到骨架的姿势,最终姿势可以在延迟流程中被修饰符覆盖,如果您想访问最终姿势,请使用SkeletonRevamp.modification_processed


Vector3 get_bone_pose_position(bone_idx: int) const 🔗

返回骨骼在bone_idx处的姿势位置。返回的Vector3SkeletonMesh节点的本地坐标空间中。


Quaternion get_bone_pose_rotation(bone_idx: int) const 🔗

返回骨骼在bone_idx处的姿势旋转。返回的Quaternion相对于任何父骨骼的旋转是骨骼的局部。


Vector3 get_bone_pose_scale(bone_idx: int) const 🔗

返回骨骼在bone_idx处的姿势比例。


Transform3D get_bone_rest(bone_idx: int) const 🔗

返回骨bone_idx的其余变换。


StringName get_concatenated_bone_names() const 🔗

将所有与逗号()连接的骨骼名称作为单个StringName返回。

将其设置为枚举属性的提示很有用。


PackedInt32Array get_parentless_bones() const 🔗

返回一个包含所有无父级骨骼的数组。另一种看待这一点的方法是,它返回钢架雪车中不依赖或修改其他骨骼的所有骨骼的索引。


int get_version() const 🔗

返回此骨架中骨骼层次结构更改的次数,包括重命名。

钢架雪车版本未序列化:仅在Skeleton3D的单个实例中使用。

用于使IK求解器和其他处理骨骼的节点中的缓存无效。


bool has_bone_meta(bone_idx: int, key: StringName) const 🔗

使用keykey返回bone_idx是否存在任何骨元数据。


bool is_bone_enabled(bone_idx: int) const 🔗

返回是否启用bone_idx处骨骼的骨骼姿势。


void localize_rests() 🔗

将骨架中的所有骨骼恢复到它们的静止姿势。


void physical_bones_add_collision_exception(exception: RID) 🔗

已弃用: 未来版本中可能会修改或移除该方法。

向物理骨骼添加碰撞异常。

就像RigidBulk节点一样工作。


void physical_bones_remove_collision_exception(exception: RID) 🔗

已弃用: 未来版本中可能会修改或移除该方法。

移除物理骨骼的碰撞异常。

就像RigidBulk节点一样工作。


void physical_bones_start_simulation(bones: Array[StringName] = []) 🔗

已弃用: 未来版本中可能会修改或移除该方法。

告诉钢架雪车中的PhysicalBone节点开始模拟和响应物理世界。

可选地,可以传入骨名称列表,只允许模拟传入的骨。


void physical_bones_stop_simulation() 🔗

已弃用: 未来版本中可能会修改或移除该方法。

告诉钢架雪车中的PhysicalBone节点停止模拟。


SkinReference register_skin(skin: Skin) 🔗

将给定的皮肤绑定到钢架雪车。


void reset_bone_pose(bone_idx: int) 🔗

将骨骼姿势设置为bone_idx


void reset_bone_poses() 🔗

将所有骨骼姿势设置为休息。


void set_bone_enabled(bone_idx: int, enabled: bool = true) 🔗

bone_idxiffalse处禁用骨骼姿势,如果true则启用骨骼姿势。


void set_bone_global_pose(bone_idx: int, pose: Transform3D) 🔗

bone_idx处为骨骼设置全局姿势变换pose

注意:如果其他骨骼姿势已经改变,此方法执行脏姿势重新计算,并将导致性能下降。如果您知道将应用多个全局姿势,请考虑使用带有预计算的set_bone_pose()


void set_bone_global_pose_override(bone_idx: int, pose: Transform3D, amount: float, persistent: bool = false) 🔗

已弃用: 未来版本中可能会修改或移除该方法。

bone_idx处为骨骼设置全局姿势变换pose

amount是应用姿势时将使用的插值强度,persistent确定应用的姿势是否保持不变。

注意:姿势变换需要是全局姿势!要将世界变换从Item3D转换为全局骨骼姿势,请将节点的Item3D.global_transformTransform3D.affine_inverse()乘以所需的世界变换。


void set_bone_meta(bone_idx: int, key: StringName, value: Variant) 🔗

bone_idx设置骨元数据,将key元设置为value


void set_bone_name(bone_idx: int, name: String) 🔗

bone_idx处的骨设置骨名称name


void set_bone_parent(bone_idx: int, parent_idx: int) 🔗

将骨索引parent_idx设置为bone_idx处骨的父级。如果为-1,则骨没有父级。

注意:parent_idx必须小于bone_idx


void set_bone_pose(bone_idx: int, pose: Transform3D) 🔗

bone_idx处为骨骼设置姿势变换pose


void set_bone_pose_position(bone_idx: int, position: Vector3) 🔗

bone_idx处骨骼的姿势位置设置为positionposition是描述SkeletonMesh节点本地位置的Vector3


void set_bone_pose_rotation(bone_idx: int, rotation: Quaternion) 🔗

bone_idx处骨骼的姿势旋转设置为rotationrotation是一个Quaternion,描述骨骼局部坐标空间中相对于任何父骨骼旋转的旋转。


void set_bone_pose_scale(bone_idx: int, scale: Vector3) 🔗

bone_idx处骨骼的姿势比例设置为scale


void set_bone_rest(bone_idx: int, rest: Transform3D) 🔗

设置骨bone_idx的其余变换。


void unparent_bone_and_rest(bone_idx: int) 🔗

bone_idx处解除骨骼的父母关系,并在重置之前将其静止位置设置为其父骨的静止位置。