Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Skeleton3D

继承: Node3D < Node < Object

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

描述

Skeleton3D 提供了管理骨骼层级结构的接口,包括姿势、放松姿势和动画(见 Animation)。它还可以使用布娃娃物理。

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

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

教程

属性

bool

animate_physical_bones

true

float

motion_scale

1.0

bool

show_rest_only

false

方法

void

add_bone ( String name )

void

clear_bones ( )

void

clear_bones_global_pose_override ( )

Skin

create_skin_from_rest_transforms ( )

int

find_bone ( String name ) const

void

force_update_all_bone_transforms ( )

void

force_update_bone_child_transform ( int bone_idx )

PackedInt32Array

get_bone_children ( int bone_idx ) const

int

get_bone_count ( ) const

Transform3D

get_bone_global_pose ( int bone_idx ) const

Transform3D

get_bone_global_pose_no_override ( int bone_idx ) const

Transform3D

get_bone_global_pose_override ( int bone_idx ) const

Transform3D

get_bone_global_rest ( int bone_idx ) const

String

get_bone_name ( int bone_idx ) const

int

get_bone_parent ( int bone_idx ) const

Transform3D

get_bone_pose ( int bone_idx ) const

Vector3

get_bone_pose_position ( int bone_idx ) const

Quaternion

get_bone_pose_rotation ( int bone_idx ) const

Vector3

get_bone_pose_scale ( int bone_idx ) const

Transform3D

get_bone_rest ( int bone_idx ) const

PackedInt32Array

get_parentless_bones ( ) const

int

get_version ( ) const

bool

is_bone_enabled ( int bone_idx ) const

void

localize_rests ( )

void

physical_bones_add_collision_exception ( RID exception )

void

physical_bones_remove_collision_exception ( RID exception )

void

physical_bones_start_simulation ( StringName[] bones=[] )

void

physical_bones_stop_simulation ( )

SkinReference

register_skin ( Skin skin )

void

reset_bone_pose ( int bone_idx )

void

reset_bone_poses ( )

void

set_bone_enabled ( int bone_idx, bool enabled=true )

void

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

void

set_bone_name ( int bone_idx, String name )

void

set_bone_parent ( int bone_idx, int parent_idx )

void

set_bone_pose_position ( int bone_idx, Vector3 position )

void

set_bone_pose_rotation ( int bone_idx, Quaternion rotation )

void

set_bone_pose_scale ( int bone_idx, Vector3 scale )

void

set_bone_rest ( int bone_idx, Transform3D rest )

void

unparent_bone_and_rest ( int bone_idx )


信号

bone_enabled_changed ( int bone_idx )

当使用 set_bone_enabled 切换 bone_idx 处的骨骼时发出。使用 is_bone_enabled 来检查新值。


bone_pose_changed ( int bone_idx )

当该 Skeleton3D 节点中的任一骨骼,改变了它们的姿势时,就会发出这个信号。这用于通知依赖骨骼位置的节点,Skeleton3D 中的任一骨骼已经改变了它们的变换/姿势。


pose_updated ( )

收到 NOTIFICATION_UPDATE_SKELETON 后更新姿势时触发。


show_rest_only_changed ( )

show_rest_only 的值改变时触发。


常量

NOTIFICATION_UPDATE_SKELETON = 50

当该骨架的姿势需要更新时收到的通知。

该通知是在相关 pose_updated 信号之前接收的。


属性说明

bool animate_physical_bones = true

  • void set_animate_physical_bones ( bool value )

  • bool get_animate_physical_bones ( )

目前没有这个属性的描述。请帮我们贡献一个


float motion_scale = 1.0

  • void set_motion_scale ( float value )

  • float get_motion_scale ( )

与 3D 位置轨道动画相乘。

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


bool show_rest_only = false

  • void set_show_rest_only ( bool value )

  • bool is_show_rest_only ( )

如果为 true,则无论其值如何,强制骨骼处于默认放松姿势。在编辑器中,这也会阻止骨骼被编辑。


方法说明

void add_bone ( String name )

添加骨骼,名称为 nameget_bone_count 将成为该骨骼的索引。


void clear_bones ( )

清除这个骨架上的所有骨骼。


void clear_bones_global_pose_override ( )

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


Skin create_skin_from_rest_transforms ( )

目前没有这个方法的描述。请帮我们贡献一个


int find_bone ( String name ) const

返回名称与 name 匹配的骨骼的索引。


void force_update_all_bone_transforms ( )

强制更新该骨架中所有骨骼的变换/姿势。

已废弃。请勿使用。


void force_update_bone_child_transform ( int bone_idx )

强制更新索引为 bone_idx 的骨骼及其所有子项的变换/姿势。


PackedInt32Array get_bone_children ( int bone_idx ) const

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


int get_bone_count ( ) const

返回骨架中骨骼的数量。


Transform3D get_bone_global_pose ( int bone_idx ) const

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


Transform3D get_bone_global_pose_no_override ( int bone_idx ) const

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


Transform3D get_bone_global_pose_override ( int bone_idx ) const

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


Transform3D get_bone_global_rest ( int bone_idx ) const

返回 bone_idx 骨骼的全局放松变换。


String get_bone_name ( int bone_idx ) const

返回索引为 bone_idx 的骨骼的名称。


int get_bone_parent ( int bone_idx ) const

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

注意:返回的父骨骼索引总是小于 bone_idx


Transform3D get_bone_pose ( int bone_idx ) const

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


Vector3 get_bone_pose_position ( int bone_idx ) const

返回骨骼在 bone_idx处的姿势位置。返回的 Vector3 位于 Skeleton3D 节点的局部坐标空间中。


Quaternion get_bone_pose_rotation ( int bone_idx ) const

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


Vector3 get_bone_pose_scale ( int bone_idx ) const

返回 bone_idx 处骨骼的姿态缩放。


Transform3D get_bone_rest ( int bone_idx ) const

返回骨骼 bone_idx 的放松变换。


PackedInt32Array get_parentless_bones ( ) const

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


int get_version ( ) const

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

骨架版本没有被序列化:只能在 Skeleton3D 的单个实例中使用。

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


bool is_bone_enabled ( int bone_idx ) const

返回位于 bone_idx 的骨骼是否启用了骨骼姿势。


void localize_rests ( )

将骨架中的所有骨骼都恢复到放松姿势。


void physical_bones_add_collision_exception ( RID exception )

向物理骨骼添加一个碰撞例外。

就像 RigidBody3D 节点一样工作。


void physical_bones_remove_collision_exception ( RID exception )

移除物理骨骼的一个碰撞例外。

就像 RigidBody3D 节点一样工作。


void physical_bones_start_simulation ( StringName[] bones=[] )

让 Skeleton 中的 PhysicalBone3D 节点开始仿真模拟,对物理世界做出反应。

可以传入骨骼名称列表,只对传入的骨骼进行仿真模拟。


void physical_bones_stop_simulation ( )

让 Skeleton 中的 PhysicalBone3D 节点停止仿真模拟。


SkinReference register_skin ( Skin skin )

将给定的 Skin 绑定到 Skeleton。


void reset_bone_pose ( int bone_idx )

bone_idx 骨骼设置为放松姿势。


void reset_bone_poses ( )

将所有骨骼都设置为放松姿势。


void set_bone_enabled ( int bone_idx, bool enabled=true )

如果为 false 则为位于 bone_idx 的骨骼禁用姿势,如果为 true 则启用该骨骼姿势。


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

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

amount 是应用姿势时将使用的插值强度,persistent 决定应用的姿势是否会保留。

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


void set_bone_name ( int bone_idx, String name )

目前没有这个方法的描述。请帮我们贡献一个


void set_bone_parent ( int bone_idx, int parent_idx )

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

注意:parent_idx 必须小于 bone_idx


void set_bone_pose_position ( int bone_idx, Vector3 position )

bone_idx 处的骨骼姿势位置设置为 positionposition 是一个 Vector3,描述局部于 Skeleton3D 节点的位置。


void set_bone_pose_rotation ( int bone_idx, Quaternion rotation )

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


void set_bone_pose_scale ( int bone_idx, Vector3 scale )

bone_idx 处骨骼的姿势缩放设置为 scale


void set_bone_rest ( int bone_idx, Transform3D rest )

设置骨骼 bone_idx 的放松变换。


void unparent_bone_and_rest ( int bone_idx )

让位于 bone_idx 的骨骼不再有父级,并将其放松位置设置为之前父级放松时的位置。