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...
Skeleton3D¶
包含骨骼层级结构的节点,用于创建 3D 骨骼动画。
描述¶
Skeleton3D 提供了管理骨骼层级结构的接口,包括姿势、放松姿势和动画(见 Animation)。它还可以使用布娃娃物理。
骨骼相对于骨架的整体变换由骨骼的姿势决定。骨骼的放松姿势定义的是骨骼姿势的初始变换。
请注意,下文的“全局姿势”是指骨骼相对于骨架的整体变换,因此并不是骨骼的实际全局/世界变换。
教程¶
属性¶
|
||
|
||
|
||
|
方法¶
信号¶
bone_enabled_changed(bone_idx: int) 🔗
当使用 set_bone_enabled 切换 bone_idx
处的骨骼时发出。使用 is_bone_enabled 来检查新值。
bone_list_changed() 🔗
该信号目前没有描述,请帮我们贡献一个吧 !
pose_updated() 🔗
姿势发生更改时发出。
注意:更新过程中不会发出该信号,因此不会检测到 SkeletonModifier3D 的修改。
show_rest_only_changed() 🔗
当 show_rest_only 的值改变时触发。
skeleton_updated() 🔗
当最终姿势计算完成后发出,将在更新过程中应用于皮肤。
这意味着所有 SkeletonModifier3D 处理都已完成。为了检测每个 SkeletonModifier3D 处理的完成情况,请使用 SkeletonModifier3D.modification_processed。
枚举¶
enum ModifierCallbackModeProcess: 🔗
ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_PHYSICS = 0
在物理帧期间处理修改的标志(见 Node.NOTIFICATION_INTERNAL_PHYSICS_PROCESS)。
ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_IDLE = 1
在处理帧期间处理修改的标志(见 Node.NOTIFICATION_INTERNAL_PROCESS)。
常量¶
NOTIFICATION_UPDATE_SKELETON = 50
🔗
骨架的姿势需要更新时收到的通知。每帧只会通过延迟处理调用一次。
属性说明¶
bool animate_physical_bones = true
🔗
已弃用: 未来版本中可能会修改或移除该属性。
If you follow the recommended workflow and explicitly have PhysicalBoneSimulator3D as a child of Skeleton3D, you can control whether it is affected by raycasting without running physical_bones_start_simulation, by its SkeletonModifier3D.active.
However, for old (deprecated) configurations, Skeleton3D has an internal virtual PhysicalBoneSimulator3D for compatibility. This property controls the internal virtual PhysicalBoneSimulator3D's SkeletonModifier3D.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() 🔗
已弃用: This method should only be called internally.
强制更新该骨架中所有骨骼的变换/姿势。
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 🔗
返回指定骨骼相对于骨架的整体变换。相对于骨架帧,这不是骨骼的实际“全局”变换。
注意:这是你在 process 期间为骨架设置的全局姿势,最终全局姿势可能会被延迟 process 期间的修改器覆盖,如果你想访问最终全局姿势,请使用 SkeletonModifier3D.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
骨骼的全局放松变换。
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 🔗
返回指定骨骼的姿势变换。
注意:这是你在 process 期间为骨架设置的姿势,最终姿势可能会被延迟 process 期间的修改器覆盖,如果你想访问最终姿势,请使用SkeletonModifier3D.modification_processed。
Vector3 get_bone_pose_position(bone_idx: int) const 🔗
返回骨骼在 bone_idx
处的姿势位置。返回的 Vector3 位于 Skeleton3D 节点的局部坐标空间中。
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 is_bone_enabled(bone_idx: int) const 🔗
返回位于 bone_idx
的骨骼是否启用了骨骼姿势。
void localize_rests() 🔗
将骨架中的所有骨骼都恢复到放松姿势。
void physical_bones_add_collision_exception(exception: RID) 🔗
已弃用: 未来版本中可能会修改或移除该方法。
向物理骨骼添加一个碰撞例外。
就像 RigidBody3D 节点一样工作。
void physical_bones_remove_collision_exception(exception: RID) 🔗
已弃用: 未来版本中可能会修改或移除该方法。
移除物理骨骼的一个碰撞例外。
就像 RigidBody3D 节点一样工作。
void physical_bones_start_simulation(bones: Array[StringName] = []) 🔗
已弃用: 未来版本中可能会修改或移除该方法。
让 Skeleton 中的 PhysicalBone3D 节点开始仿真模拟,对物理世界做出反应。
可以传入骨骼名称列表,只对传入的骨骼进行仿真模拟。
void physical_bones_stop_simulation() 🔗
已弃用: 未来版本中可能会修改或移除该方法。
让 Skeleton 中的 PhysicalBone3D 节点停止仿真模拟。
SkinReference register_skin(skin: Skin) 🔗
将给定的 Skin 绑定到 Skeleton。
void reset_bone_pose(bone_idx: int) 🔗
将 bone_idx
骨骼设置为放松姿势。
void reset_bone_poses() 🔗
将所有骨骼都设置为放松姿势。
void set_bone_enabled(bone_idx: int, enabled: bool = true) 🔗
如果为 false
则为位于 bone_idx
的骨骼禁用姿势,如果为 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) 🔗
已