SkeletonMesh¶
包含骨骼层次结构的节点,用于创建3D骨骼动画。
描述¶
SkeletonMesh提供了一个用于管理骨骼层次结构的界面,包括姿势、休息和动画(参见Animation)。它也可以使用布娃娃物理。
骨骼相对于骨骼的整体变换由骨骼姿势决定。骨架定义了骨骼姿势的初始变换。
请注意,下面的“全局姿势”是指骨骼相对于骨骼的整体变换,因此它不是骨骼的实际全局/世界变换。
属性¶
方法¶
信号¶
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 🔗
已弃用: 未来版本中可能会修改或移除该属性。
如果您遵循推荐的工作流程并明确将PhysicalBoneSimu作为SkeletonMesh的子级,您可以通过其SkeletonRevamp.active控制它是否受到光线投射的影响而无需运行physical_bones_start_simulation()。
但是,对于旧的(已弃用的)配置,SkeletonMesh有一个内部虚拟PhysicalBoneSimu以实现兼容性。此属性控制内部虚拟PhysicalBoneSimu的SkeletonRevamp.active。
ModifierCallbackModeProcess modifier_callback_mode_process = 1 🔗
void set_modifier_callback_mode_process(value: ModifierCallbackModeProcess)
ModifierCallbackModeProcess get_modifier_callback_mode_process()
设置修饰符的处理时间。
乘以3D位置轨迹动画。
注意:除非此值为1.0,否则动画中的键值将与实际位置值不匹配。
如果true,则强制骨骼处于默认的休息姿势,而不管它们的值如何。在编辑器中,这也可以防止骨骼被编辑。
方法说明¶
添加具有给定名称的新骨骼。如果此方法失败,则返回新骨骼的索引,或-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。
返回骨架中骨骼的数量。
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处的姿势位置。返回的Vector3在SkeletonMesh节点的本地坐标空间中。
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 🔗
返回一个包含所有无父级骨骼的数组。另一种看待这一点的方法是,它返回钢架雪车中不依赖或修改其他骨骼的所有骨骼的索引。
返回此骨架中骨骼层次结构更改的次数,包括重命名。
钢架雪车版本未序列化:仅在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_transform的Transform3D.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处骨骼的姿势位置设置为position。position是描述SkeletonMesh节点本地位置的Vector3。
void set_bone_pose_rotation(bone_idx: int, rotation: Quaternion) 🔗
将bone_idx处骨骼的姿势旋转设置为rotation。rotation是一个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处解除骨骼的父母关系,并在重置之前将其静止位置设置为其父骨的静止位置。