87 lines
5.8 KiB
XML
87 lines
5.8 KiB
XML
<?xml version="1.0" encoding="UTF-8" ?>
|
|
<class name="SkeletonIK3D" inherits="SkeletonModifier3D" deprecated="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
|
<brief_description>
|
|
A node used to rotate all bones of a [Skeleton3D] bone chain a way that places the end bone at a desired 3D position.
|
|
</brief_description>
|
|
<description>
|
|
SkeletonIK3D is used to rotate all bones of a [Skeleton3D] bone chain a way that places the end bone at a desired 3D position. A typical scenario for IK in games is to place a character's feet on the ground or a character's hands on a currently held object. SkeletonIK uses FabrikInverseKinematic internally to solve the bone chain and applies the results to the [Skeleton3D] [code]bones_global_pose_override[/code] property for all affected bones in the chain. If fully applied, this overwrites any bone transform from [Animation]s or bone custom poses set by users. The applied amount can be controlled with the [member SkeletonModifier3D.influence] property.
|
|
[codeblock]
|
|
# Apply IK effect automatically on every new frame (not the current)
|
|
skeleton_ik_node.start()
|
|
|
|
# Apply IK effect only on the current frame
|
|
skeleton_ik_node.start(true)
|
|
|
|
# Stop IK effect and reset bones_global_pose_override on Skeleton
|
|
skeleton_ik_node.stop()
|
|
|
|
# Apply full IK effect
|
|
skeleton_ik_node.set_influence(1.0)
|
|
|
|
# Apply half IK effect
|
|
skeleton_ik_node.set_influence(0.5)
|
|
|
|
# Apply zero IK effect (a value at or below 0.01 also removes bones_global_pose_override on Skeleton)
|
|
skeleton_ik_node.set_influence(0.0)
|
|
[/codeblock]
|
|
</description>
|
|
<tutorials>
|
|
<link title="3D Inverse Kinematics Demo">https://godotengine.org/asset-library/asset/523</link>
|
|
</tutorials>
|
|
<methods>
|
|
<method name="get_parent_skeleton" qualifiers="const">
|
|
<return type="Skeleton3D" />
|
|
<description>
|
|
Returns the parent [Skeleton3D] Node that was present when SkeletonIK entered the [SceneTree]. Returns null if the parent node was not a [Skeleton3D] Node when SkeletonIK3D entered the [SceneTree].
|
|
</description>
|
|
</method>
|
|
<method name="is_running">
|
|
<return type="bool" />
|
|
<description>
|
|
Returns [code]true[/code] if SkeletonIK is applying IK effects on continues frames to the [Skeleton3D] bones. Returns [code]false[/code] if SkeletonIK is stopped or [method start] was used with the [code]one_time[/code] parameter set to [code]true[/code].
|
|
</description>
|
|
</method>
|
|
<method name="start">
|
|
<return type="void" />
|
|
<param index="0" name="one_time" type="bool" default="false" />
|
|
<description>
|
|
Starts applying IK effects on each frame to the [Skeleton3D] bones but will only take effect starting on the next frame. If [param one_time] is [code]true[/code], this will take effect immediately but also reset on the next frame.
|
|
</description>
|
|
</method>
|
|
<method name="stop">
|
|
<return type="void" />
|
|
<description>
|
|
Stops applying IK effects on each frame to the [Skeleton3D] bones and also calls [method Skeleton3D.clear_bones_global_pose_override] to remove existing overrides on all bones.
|
|
</description>
|
|
</method>
|
|
</methods>
|
|
<members>
|
|
<member name="magnet" type="Vector3" setter="set_magnet_position" getter="get_magnet_position" default="Vector3(0, 0, 0)">
|
|
Secondary target position (first is [member target] property or [member target_node]) for the IK chain. Use magnet position (pole target) to control the bending of the IK chain. Only works if the bone chain has more than 2 bones. The middle chain bone position will be linearly interpolated with the magnet position.
|
|
</member>
|
|
<member name="max_iterations" type="int" setter="set_max_iterations" getter="get_max_iterations" default="10">
|
|
Number of iteration loops used by the IK solver to produce more accurate (and elegant) bone chain results.
|
|
</member>
|
|
<member name="min_distance" type="float" setter="set_min_distance" getter="get_min_distance" default="0.01">
|
|
The minimum distance between bone and goal target. If the distance is below this value, the IK solver stops further iterations.
|
|
</member>
|
|
<member name="override_tip_basis" type="bool" setter="set_override_tip_basis" getter="is_override_tip_basis" default="true">
|
|
If [code]true[/code] overwrites the rotation of the tip bone with the rotation of the [member target] (or [member target_node] if defined).
|
|
</member>
|
|
<member name="root_bone" type="StringName" setter="set_root_bone" getter="get_root_bone" default="&""">
|
|
The name of the current root bone, the first bone in the IK chain.
|
|
</member>
|
|
<member name="target" type="Transform3D" setter="set_target_transform" getter="get_target_transform" default="Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)">
|
|
First target of the IK chain where the tip bone is placed and, if [member override_tip_basis] is [code]true[/code], how the tip bone is rotated. If a [member target_node] path is available the nodes transform is used instead and this property is ignored.
|
|
</member>
|
|
<member name="target_node" type="NodePath" setter="set_target_node" getter="get_target_node" default="NodePath("")">
|
|
Target node [NodePath] for the IK chain. If available, the node's current [Transform3D] is used instead of the [member target] property.
|
|
</member>
|
|
<member name="tip_bone" type="StringName" setter="set_tip_bone" getter="get_tip_bone" default="&""">
|
|
The name of the current tip bone, the last bone in the IK chain placed at the [member target] transform (or [member target_node] if defined).
|
|
</member>
|
|
<member name="use_magnet" type="bool" setter="set_use_magnet" getter="is_using_magnet" default="false">
|
|
If [code]true[/code], instructs the IK solver to consider the secondary magnet target (pole target) when calculating the bone chain. Use the magnet position (pole target) to control the bending of the IK chain.
|
|
</member>
|
|
</members>
|
|
</class>
|