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.

SkeletonModifier3D

继承: Node3D < Node < Object

派生: BoneConstraint3D, BoneTwistDisperser3D, IKModifier3D, LimitAngularVelocityModifier3D, LookAtModifier3D, ModifierBoneTarget3D, PhysicalBoneSimulator3D, RetargetModifier3D, SkeletonIK3D, SpringBoneSimulator3D, XRBodyModifier3D, XRHandModifier3D

能够修改 Skeleton3D 中骨骼的节点。

描述

SkeletonModifier3D 会将父级 Skeleton3D 节点作为目标 Skeleton3D

如果存在 AnimationMixer,则修改会在 AnimationMixer 的播放处理后执行。

该节点应该用于实现自定义 IK 解算器、约束、骨架物理。

教程

属性

bool

active

true

float

influence

1.0

方法

void

_process_modification() virtual

void

_process_modification_with_delta(delta: float) virtual

void

_skeleton_changed(old_skeleton: Skeleton3D, new_skeleton: Skeleton3D) virtual

void

_validate_bone_names() virtual

Skeleton3D

get_skeleton() const


信号

modification_processed() 🔗

修改完成后通知。

注意:如果要获取修改器修改后的骨骼姿势,必须在触发该信号时使用 Skeleton3D.get_bone_pose()Skeleton3D.get_bone_global_pose()


枚举

enum BoneAxis: 🔗

BoneAxis BONE_AXIS_PLUS_X = 0

+X 轴对应的枚举值。

BoneAxis BONE_AXIS_MINUS_X = 1

-X 轴对应的枚举值。

BoneAxis BONE_AXIS_PLUS_Y = 2

+Y 轴对应的枚举值。

BoneAxis BONE_AXIS_MINUS_Y = 3

-Y 轴对应的枚举值。

BoneAxis BONE_AXIS_PLUS_Z = 4

+Z 轴对应的枚举值。

BoneAxis BONE_AXIS_MINUS_Z = 5

-Z 轴对应的枚举值。


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 SecondaryDirection: 🔗

SecondaryDirection SECONDARY_DIRECTION_NONE = 0

当轴未定义时对应的枚举值。

SecondaryDirection SECONDARY_DIRECTION_PLUS_X = 1

+X 轴对应的枚举值。

SecondaryDirection SECONDARY_DIRECTION_MINUS_X = 2

-X 轴对应的枚举值。

SecondaryDirection SECONDARY_DIRECTION_PLUS_Y = 3

+Y 轴对应的枚举值。

SecondaryDirection SECONDARY_DIRECTION_MINUS_Y = 4

-Y 轴对应的枚举值。

SecondaryDirection SECONDARY_DIRECTION_PLUS_Z = 5

+Z 轴对应的枚举值。

SecondaryDirection SECONDARY_DIRECTION_MINUS_Z = 6

-Z 轴对应的枚举值。

SecondaryDirection SECONDARY_DIRECTION_CUSTOM = 7

可选轴对应的枚举值。


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

枚举值,表示无约束的旋转。

RotationAxis ROTATION_AXIS_CUSTOM = 4

可选旋转轴对应的枚举值。


属性说明

bool active = true 🔗

  • void set_active(value: bool)

  • bool is_active()

如果为 true,则 SkeletonModifier3D 将执行处理。


float influence = 1.0 🔗

  • void set_influence(value: float)

  • float get_influence()

设置修改的影响。

注意:该值由 Skeleton3D 用来混合,因此 SkeletonModifier3D 应始终仅应用结果的 100% 而不进行插值。


方法说明

void _process_modification() virtual 🔗

已弃用: Use _process_modification_with_delta() instead.

覆盖该虚方法可以实现自定义骨架修改器。你应该在这里执行获取 Skeleton3D 的当前姿势、应用姿势之类的操作。

_process_modification() 不得将 influence 应用于骨骼姿势,因为 Skeleton3D 会自动将影响应用于修改器设置的所有骨骼姿势。


void _process_modification_with_delta(delta: float) virtual 🔗

覆盖该虚方法可以实现自定义骨架修改器。你应该在这里执行获取 Skeleton3D 的当前姿势、应用姿势之类的操作。

_process_modification_with_delta() 不得将 influence 应用于骨骼姿势,因为 Skeleton3D 会自动将影响应用于修改器设置的所有骨骼姿势。

delta 是由父级 Skeleton3D 传入的。另见 Skeleton3D.advance()

注意:该方法可以在 Node._process()Node._physics_process() 之外调用,delta0.0,因为修改应该在 Skeleton3D 初始化之后立即处理。


void _skeleton_changed(old_skeleton: Skeleton3D, new_skeleton: Skeleton3D) virtual 🔗

骨架发生改变时调用。


void _validate_bone_names() virtual 🔗

在骨骼名称和索引需要验证时调用,例如进入场景树时或更改骨架时。


Skeleton3D get_skeleton() const 🔗

如果存在父级 Skeleton3D 节点则将其返回。否则,返回 null