mirror of
https://github.com/godotengine/godot-docs-l10n.git
synced 2025-12-31 09:49:22 +03:00
461 lines
17 KiB
ReStructuredText
461 lines
17 KiB
ReStructuredText
:github_url: hide
|
|
|
|
.. _class_SkeletonModifier3D:
|
|
|
|
SkeletonModifier3D
|
|
==================
|
|
|
|
**继承:** :ref:`Node3D<class_Node3D>` **<** :ref:`Node<class_Node>` **<** :ref:`Object<class_Object>`
|
|
|
|
**派生:** :ref:`BoneConstraint3D<class_BoneConstraint3D>`, :ref:`BoneTwistDisperser3D<class_BoneTwistDisperser3D>`, :ref:`IKModifier3D<class_IKModifier3D>`, :ref:`LimitAngularVelocityModifier3D<class_LimitAngularVelocityModifier3D>`, :ref:`LookAtModifier3D<class_LookAtModifier3D>`, :ref:`ModifierBoneTarget3D<class_ModifierBoneTarget3D>`, :ref:`PhysicalBoneSimulator3D<class_PhysicalBoneSimulator3D>`, :ref:`RetargetModifier3D<class_RetargetModifier3D>`, :ref:`SkeletonIK3D<class_SkeletonIK3D>`, :ref:`SpringBoneSimulator3D<class_SpringBoneSimulator3D>`, :ref:`XRBodyModifier3D<class_XRBodyModifier3D>`, :ref:`XRHandModifier3D<class_XRHandModifier3D>`
|
|
|
|
能够修改 Skeleton3D 中骨骼的节点。
|
|
|
|
.. rst-class:: classref-introduction-group
|
|
|
|
描述
|
|
----
|
|
|
|
**SkeletonModifier3D** 会将父级 :ref:`Skeleton3D<class_Skeleton3D>` 节点作为目标 :ref:`Skeleton3D<class_Skeleton3D>`\ 。
|
|
|
|
如果存在 :ref:`AnimationMixer<class_AnimationMixer>`\ ,则修改会在 :ref:`AnimationMixer<class_AnimationMixer>` 的播放处理后执行。
|
|
|
|
该节点应该用于实现自定义 IK 解算器、约束、骨架物理。
|
|
|
|
.. rst-class:: classref-introduction-group
|
|
|
|
教程
|
|
----
|
|
|
|
- `3D 骨架修改器的设计 <https://godotengine.org/article/design-of-the-skeleton-modifier-3d/>`__
|
|
|
|
.. rst-class:: classref-reftable-group
|
|
|
|
属性
|
|
----
|
|
|
|
.. table::
|
|
:widths: auto
|
|
|
|
+---------------------------+---------------------------------------------------------------+----------+
|
|
| :ref:`bool<class_bool>` | :ref:`active<class_SkeletonModifier3D_property_active>` | ``true`` |
|
|
+---------------------------+---------------------------------------------------------------+----------+
|
|
| :ref:`float<class_float>` | :ref:`influence<class_SkeletonModifier3D_property_influence>` | ``1.0`` |
|
|
+---------------------------+---------------------------------------------------------------+----------+
|
|
|
|
.. rst-class:: classref-reftable-group
|
|
|
|
方法
|
|
----
|
|
|
|
.. table::
|
|
:widths: auto
|
|
|
|
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
|
| |void| | :ref:`_process_modification<class_SkeletonModifier3D_private_method__process_modification>`\ (\ ) |virtual| |
|
|
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
|
| |void| | :ref:`_process_modification_with_delta<class_SkeletonModifier3D_private_method__process_modification_with_delta>`\ (\ delta\: :ref:`float<class_float>`\ ) |virtual| |
|
|
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
|
| |void| | :ref:`_skeleton_changed<class_SkeletonModifier3D_private_method__skeleton_changed>`\ (\ old_skeleton\: :ref:`Skeleton3D<class_Skeleton3D>`, new_skeleton\: :ref:`Skeleton3D<class_Skeleton3D>`\ ) |virtual| |
|
|
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
|
| |void| | :ref:`_validate_bone_names<class_SkeletonModifier3D_private_method__validate_bone_names>`\ (\ ) |virtual| |
|
|
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
|
| :ref:`Skeleton3D<class_Skeleton3D>` | :ref:`get_skeleton<class_SkeletonModifier3D_method_get_skeleton>`\ (\ ) |const| |
|
|
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
|
|
|
.. rst-class:: classref-section-separator
|
|
|
|
----
|
|
|
|
.. rst-class:: classref-descriptions-group
|
|
|
|
信号
|
|
----
|
|
|
|
.. _class_SkeletonModifier3D_signal_modification_processed:
|
|
|
|
.. rst-class:: classref-signal
|
|
|
|
**modification_processed**\ (\ ) :ref:`🔗<class_SkeletonModifier3D_signal_modification_processed>`
|
|
|
|
修改完成后通知。
|
|
|
|
\ **注意:**\ 如果要获取修改器修改后的骨骼姿势,必须在触发该信号时使用 :ref:`Skeleton3D.get_bone_pose()<class_Skeleton3D_method_get_bone_pose>` 或 :ref:`Skeleton3D.get_bone_global_pose()<class_Skeleton3D_method_get_bone_global_pose>`\ 。
|
|
|
|
.. rst-class:: classref-section-separator
|
|
|
|
----
|
|
|
|
.. rst-class:: classref-descriptions-group
|
|
|
|
枚举
|
|
----
|
|
|
|
.. _enum_SkeletonModifier3D_BoneAxis:
|
|
|
|
.. rst-class:: classref-enumeration
|
|
|
|
enum **BoneAxis**: :ref:`🔗<enum_SkeletonModifier3D_BoneAxis>`
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_AXIS_PLUS_X:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneAxis<enum_SkeletonModifier3D_BoneAxis>` **BONE_AXIS_PLUS_X** = ``0``
|
|
|
|
+X 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_AXIS_MINUS_X:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneAxis<enum_SkeletonModifier3D_BoneAxis>` **BONE_AXIS_MINUS_X** = ``1``
|
|
|
|
-X 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_AXIS_PLUS_Y:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneAxis<enum_SkeletonModifier3D_BoneAxis>` **BONE_AXIS_PLUS_Y** = ``2``
|
|
|
|
+Y 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_AXIS_MINUS_Y:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneAxis<enum_SkeletonModifier3D_BoneAxis>` **BONE_AXIS_MINUS_Y** = ``3``
|
|
|
|
-Y 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_AXIS_PLUS_Z:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneAxis<enum_SkeletonModifier3D_BoneAxis>` **BONE_AXIS_PLUS_Z** = ``4``
|
|
|
|
+Z 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_AXIS_MINUS_Z:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneAxis<enum_SkeletonModifier3D_BoneAxis>` **BONE_AXIS_MINUS_Z** = ``5``
|
|
|
|
-Z 轴对应的枚举值。
|
|
|
|
.. rst-class:: classref-item-separator
|
|
|
|
----
|
|
|
|
.. _enum_SkeletonModifier3D_BoneDirection:
|
|
|
|
.. rst-class:: classref-enumeration
|
|
|
|
enum **BoneDirection**: :ref:`🔗<enum_SkeletonModifier3D_BoneDirection>`
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_DIRECTION_PLUS_X:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneDirection<enum_SkeletonModifier3D_BoneDirection>` **BONE_DIRECTION_PLUS_X** = ``0``
|
|
|
|
+X 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_DIRECTION_MINUS_X:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneDirection<enum_SkeletonModifier3D_BoneDirection>` **BONE_DIRECTION_MINUS_X** = ``1``
|
|
|
|
-X 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_DIRECTION_PLUS_Y:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneDirection<enum_SkeletonModifier3D_BoneDirection>` **BONE_DIRECTION_PLUS_Y** = ``2``
|
|
|
|
+Y 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_DIRECTION_MINUS_Y:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneDirection<enum_SkeletonModifier3D_BoneDirection>` **BONE_DIRECTION_MINUS_Y** = ``3``
|
|
|
|
-Y 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_DIRECTION_PLUS_Z:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneDirection<enum_SkeletonModifier3D_BoneDirection>` **BONE_DIRECTION_PLUS_Z** = ``4``
|
|
|
|
+Z 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_DIRECTION_MINUS_Z:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneDirection<enum_SkeletonModifier3D_BoneDirection>` **BONE_DIRECTION_MINUS_Z** = ``5``
|
|
|
|
-Z 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_BONE_DIRECTION_FROM_PARENT:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`BoneDirection<enum_SkeletonModifier3D_BoneDirection>` **BONE_DIRECTION_FROM_PARENT** = ``6``
|
|
|
|
枚举值,表示从父骨骼指向子骨骼的轴。
|
|
|
|
.. rst-class:: classref-item-separator
|
|
|
|
----
|
|
|
|
.. _enum_SkeletonModifier3D_SecondaryDirection:
|
|
|
|
.. rst-class:: classref-enumeration
|
|
|
|
enum **SecondaryDirection**: :ref:`🔗<enum_SkeletonModifier3D_SecondaryDirection>`
|
|
|
|
.. _class_SkeletonModifier3D_constant_SECONDARY_DIRECTION_NONE:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`SecondaryDirection<enum_SkeletonModifier3D_SecondaryDirection>` **SECONDARY_DIRECTION_NONE** = ``0``
|
|
|
|
Enumerated value for the case when the axis is undefined.
|
|
|
|
.. _class_SkeletonModifier3D_constant_SECONDARY_DIRECTION_PLUS_X:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`SecondaryDirection<enum_SkeletonModifier3D_SecondaryDirection>` **SECONDARY_DIRECTION_PLUS_X** = ``1``
|
|
|
|
+X 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_SECONDARY_DIRECTION_MINUS_X:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`SecondaryDirection<enum_SkeletonModifier3D_SecondaryDirection>` **SECONDARY_DIRECTION_MINUS_X** = ``2``
|
|
|
|
-X 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_SECONDARY_DIRECTION_PLUS_Y:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`SecondaryDirection<enum_SkeletonModifier3D_SecondaryDirection>` **SECONDARY_DIRECTION_PLUS_Y** = ``3``
|
|
|
|
+Y 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_SECONDARY_DIRECTION_MINUS_Y:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`SecondaryDirection<enum_SkeletonModifier3D_SecondaryDirection>` **SECONDARY_DIRECTION_MINUS_Y** = ``4``
|
|
|
|
-Y 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_SECONDARY_DIRECTION_PLUS_Z:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`SecondaryDirection<enum_SkeletonModifier3D_SecondaryDirection>` **SECONDARY_DIRECTION_PLUS_Z** = ``5``
|
|
|
|
+Z 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_SECONDARY_DIRECTION_MINUS_Z:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`SecondaryDirection<enum_SkeletonModifier3D_SecondaryDirection>` **SECONDARY_DIRECTION_MINUS_Z** = ``6``
|
|
|
|
-Z 轴对应的枚举值。
|
|
|
|
.. _class_SkeletonModifier3D_constant_SECONDARY_DIRECTION_CUSTOM:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`SecondaryDirection<enum_SkeletonModifier3D_SecondaryDirection>` **SECONDARY_DIRECTION_CUSTOM** = ``7``
|
|
|
|
Enumerated value for an optional axis.
|
|
|
|
.. rst-class:: classref-item-separator
|
|
|
|
----
|
|
|
|
.. _enum_SkeletonModifier3D_RotationAxis:
|
|
|
|
.. rst-class:: classref-enumeration
|
|
|
|
enum **RotationAxis**: :ref:`🔗<enum_SkeletonModifier3D_RotationAxis>`
|
|
|
|
.. _class_SkeletonModifier3D_constant_ROTATION_AXIS_X:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`RotationAxis<enum_SkeletonModifier3D_RotationAxis>` **ROTATION_AXIS_X** = ``0``
|
|
|
|
枚举值,表示 X 轴的旋转。
|
|
|
|
.. _class_SkeletonModifier3D_constant_ROTATION_AXIS_Y:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`RotationAxis<enum_SkeletonModifier3D_RotationAxis>` **ROTATION_AXIS_Y** = ``1``
|
|
|
|
枚举值,表示 Y 轴的旋转。
|
|
|
|
.. _class_SkeletonModifier3D_constant_ROTATION_AXIS_Z:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`RotationAxis<enum_SkeletonModifier3D_RotationAxis>` **ROTATION_AXIS_Z** = ``2``
|
|
|
|
枚举值,表示 Z 轴的旋转。
|
|
|
|
.. _class_SkeletonModifier3D_constant_ROTATION_AXIS_ALL:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`RotationAxis<enum_SkeletonModifier3D_RotationAxis>` **ROTATION_AXIS_ALL** = ``3``
|
|
|
|
枚举值,表示无约束的旋转。
|
|
|
|
.. _class_SkeletonModifier3D_constant_ROTATION_AXIS_CUSTOM:
|
|
|
|
.. rst-class:: classref-enumeration-constant
|
|
|
|
:ref:`RotationAxis<enum_SkeletonModifier3D_RotationAxis>` **ROTATION_AXIS_CUSTOM** = ``4``
|
|
|
|
Enumerated value for an optional rotation axis.
|
|
|
|
.. rst-class:: classref-section-separator
|
|
|
|
----
|
|
|
|
.. rst-class:: classref-descriptions-group
|
|
|
|
属性说明
|
|
--------
|
|
|
|
.. _class_SkeletonModifier3D_property_active:
|
|
|
|
.. rst-class:: classref-property
|
|
|
|
:ref:`bool<class_bool>` **active** = ``true`` :ref:`🔗<class_SkeletonModifier3D_property_active>`
|
|
|
|
.. rst-class:: classref-property-setget
|
|
|
|
- |void| **set_active**\ (\ value\: :ref:`bool<class_bool>`\ )
|
|
- :ref:`bool<class_bool>` **is_active**\ (\ )
|
|
|
|
如果为 ``true``\ ,则 **SkeletonModifier3D** 将执行处理。
|
|
|
|
.. rst-class:: classref-item-separator
|
|
|
|
----
|
|
|
|
.. _class_SkeletonModifier3D_property_influence:
|
|
|
|
.. rst-class:: classref-property
|
|
|
|
:ref:`float<class_float>` **influence** = ``1.0`` :ref:`🔗<class_SkeletonModifier3D_property_influence>`
|
|
|
|
.. rst-class:: classref-property-setget
|
|
|
|
- |void| **set_influence**\ (\ value\: :ref:`float<class_float>`\ )
|
|
- :ref:`float<class_float>` **get_influence**\ (\ )
|
|
|
|
设置修改的影响。
|
|
|
|
\ **注意:**\ 该值由 :ref:`Skeleton3D<class_Skeleton3D>` 用来混合,因此 **SkeletonModifier3D** 应始终仅应用结果的 100% 而不进行插值。
|
|
|
|
.. rst-class:: classref-section-separator
|
|
|
|
----
|
|
|
|
.. rst-class:: classref-descriptions-group
|
|
|
|
方法说明
|
|
--------
|
|
|
|
.. _class_SkeletonModifier3D_private_method__process_modification:
|
|
|
|
.. rst-class:: classref-method
|
|
|
|
|void| **_process_modification**\ (\ ) |virtual| :ref:`🔗<class_SkeletonModifier3D_private_method__process_modification>`
|
|
|
|
**已弃用:** Use :ref:`_process_modification_with_delta()<class_SkeletonModifier3D_private_method__process_modification_with_delta>` instead.
|
|
|
|
覆盖该虚方法可以实现自定义骨架修改器。你应该在这里执行获取 :ref:`Skeleton3D<class_Skeleton3D>` 的当前姿势、应用姿势之类的操作。
|
|
|
|
\ :ref:`_process_modification()<class_SkeletonModifier3D_private_method__process_modification>` 不得将 :ref:`influence<class_SkeletonModifier3D_property_influence>` 应用于骨骼姿势,因为 :ref:`Skeleton3D<class_Skeleton3D>` 会自动将影响应用于修改器设置的所有骨骼姿势。
|
|
|
|
.. rst-class:: classref-item-separator
|
|
|
|
----
|
|
|
|
.. _class_SkeletonModifier3D_private_method__process_modification_with_delta:
|
|
|
|
.. rst-class:: classref-method
|
|
|
|
|void| **_process_modification_with_delta**\ (\ delta\: :ref:`float<class_float>`\ ) |virtual| :ref:`🔗<class_SkeletonModifier3D_private_method__process_modification_with_delta>`
|
|
|
|
覆盖该虚方法可以实现自定义骨架修改器。你应该在这里执行获取 :ref:`Skeleton3D<class_Skeleton3D>` 的当前姿势、应用姿势之类的操作。
|
|
|
|
\ :ref:`_process_modification_with_delta()<class_SkeletonModifier3D_private_method__process_modification_with_delta>` 不得将 :ref:`influence<class_SkeletonModifier3D_property_influence>` 应用于骨骼姿势,因为 :ref:`Skeleton3D<class_Skeleton3D>` 会自动将影响应用于修改器设置的所有骨骼姿势。
|
|
|
|
\ ``delta`` 是由父级 :ref:`Skeleton3D<class_Skeleton3D>` 传入的。另见 :ref:`Skeleton3D.advance()<class_Skeleton3D_method_advance>`\ 。
|
|
|
|
.. rst-class:: classref-item-separator
|
|
|
|
----
|
|
|
|
.. _class_SkeletonModifier3D_private_method__skeleton_changed:
|
|
|
|
.. rst-class:: classref-method
|
|
|
|
|void| **_skeleton_changed**\ (\ old_skeleton\: :ref:`Skeleton3D<class_Skeleton3D>`, new_skeleton\: :ref:`Skeleton3D<class_Skeleton3D>`\ ) |virtual| :ref:`🔗<class_SkeletonModifier3D_private_method__skeleton_changed>`
|
|
|
|
骨架发生改变时调用。
|
|
|
|
.. rst-class:: classref-item-separator
|
|
|
|
----
|
|
|
|
.. _class_SkeletonModifier3D_private_method__validate_bone_names:
|
|
|
|
.. rst-class:: classref-method
|
|
|
|
|void| **_validate_bone_names**\ (\ ) |virtual| :ref:`🔗<class_SkeletonModifier3D_private_method__validate_bone_names>`
|
|
|
|
Called when bone names and indices need to be validated, such as when entering the scene tree or changing skeleton.
|
|
|
|
.. rst-class:: classref-item-separator
|
|
|
|
----
|
|
|
|
.. _class_SkeletonModifier3D_method_get_skeleton:
|
|
|
|
.. rst-class:: classref-method
|
|
|
|
:ref:`Skeleton3D<class_Skeleton3D>` **get_skeleton**\ (\ ) |const| :ref:`🔗<class_SkeletonModifier3D_method_get_skeleton>`
|
|
|
|
Returns the parent :ref:`Skeleton3D<class_Skeleton3D>` node if it exists. Otherwise, returns ``null``.
|
|
|
|
.. |virtual| replace:: :abbr:`virtual (本方法通常需要用户覆盖才能生效。)`
|
|
.. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)`
|
|
.. |const| replace:: :abbr:`const (本方法无副作用,不会修改该实例的任何成员变量。)`
|
|
.. |vararg| replace:: :abbr:`vararg (本方法除了能接受在此处描述的参数外,还能够继续接受任意数量的参数。)`
|
|
.. |constructor| replace:: :abbr:`constructor (本方法用于构造某个类型。)`
|
|
.. |static| replace:: :abbr:`static (调用本方法无需实例,可直接使用类名进行调用。)`
|
|
.. |operator| replace:: :abbr:`operator (本方法描述的是使用本类型作为左操作数的有效运算符。)`
|
|
.. |bitfield| replace:: :abbr:`BitField (这个值是由下列位标志构成位掩码的整数。)`
|
|
.. |void| replace:: :abbr:`void (无返回值。)`
|