123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555 |
- :github_url: hide
- .. DO NOT EDIT THIS FILE!!!
- .. Generated automatically from Godot engine sources.
- .. Generator: https://github.com/godotengine/godot/tree/4.0/doc/tools/make_rst.py.
- .. XML source: https://github.com/godotengine/godot/tree/4.0/doc/classes/AnimationTree.xml.
- .. _class_AnimationTree:
- AnimationTree
- =============
- **Inherits:** :ref:`Node<class_Node>` **<** :ref:`Object<class_Object>`
- A node used for advanced animation transitions in an :ref:`AnimationPlayer<class_AnimationPlayer>`.
- .. rst-class:: classref-introduction-group
- Description
- -----------
- A node used for advanced animation transitions in an :ref:`AnimationPlayer<class_AnimationPlayer>`.
- \ **Note:** When linked with an :ref:`AnimationPlayer<class_AnimationPlayer>`, several properties and methods of the corresponding :ref:`AnimationPlayer<class_AnimationPlayer>` will not function as expected. Playback and transitions should be handled using only the **AnimationTree** and its constituent :ref:`AnimationNode<class_AnimationNode>`\ (s). The :ref:`AnimationPlayer<class_AnimationPlayer>` node should be used solely for adding, deleting, and editing animations.
- .. rst-class:: classref-introduction-group
- Tutorials
- ---------
- - :doc:`Using AnimationTree <../tutorials/animation/animation_tree>`
- - `Third Person Shooter Demo <https://godotengine.org/asset-library/asset/678>`__
- .. rst-class:: classref-reftable-group
- Properties
- ----------
- .. table::
- :widths: auto
- +------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+-------------------+
- | :ref:`bool<class_bool>` | :ref:`active<class_AnimationTree_property_active>` | ``false`` |
- +------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+-------------------+
- | :ref:`NodePath<class_NodePath>` | :ref:`advance_expression_base_node<class_AnimationTree_property_advance_expression_base_node>` | ``NodePath(".")`` |
- +------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+-------------------+
- | :ref:`NodePath<class_NodePath>` | :ref:`anim_player<class_AnimationTree_property_anim_player>` | ``NodePath("")`` |
- +------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+-------------------+
- | :ref:`int<class_int>` | :ref:`audio_max_polyphony<class_AnimationTree_property_audio_max_polyphony>` | ``32`` |
- +------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+-------------------+
- | :ref:`AnimationProcessCallback<enum_AnimationTree_AnimationProcessCallback>` | :ref:`process_callback<class_AnimationTree_property_process_callback>` | ``1`` |
- +------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+-------------------+
- | :ref:`NodePath<class_NodePath>` | :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` | ``NodePath("")`` |
- +------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+-------------------+
- | :ref:`AnimationNode<class_AnimationNode>` | :ref:`tree_root<class_AnimationTree_property_tree_root>` | |
- +------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+-------------------+
- .. rst-class:: classref-reftable-group
- Methods
- -------
- .. table::
- :widths: auto
- +-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Variant<class_Variant>` | :ref:`_post_process_key_value<class_AnimationTree_method__post_process_key_value>` **(** :ref:`Animation<class_Animation>` animation, :ref:`int<class_int>` track, :ref:`Variant<class_Variant>` value, :ref:`Object<class_Object>` object, :ref:`int<class_int>` object_idx **)** |virtual| |const| |
- +-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | void | :ref:`advance<class_AnimationTree_method_advance>` **(** :ref:`float<class_float>` delta **)** |
- +-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Vector3<class_Vector3>` | :ref:`get_root_motion_position<class_AnimationTree_method_get_root_motion_position>` **(** **)** |const| |
- +-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Vector3<class_Vector3>` | :ref:`get_root_motion_position_accumulator<class_AnimationTree_method_get_root_motion_position_accumulator>` **(** **)** |const| |
- +-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Quaternion<class_Quaternion>` | :ref:`get_root_motion_rotation<class_AnimationTree_method_get_root_motion_rotation>` **(** **)** |const| |
- +-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Quaternion<class_Quaternion>` | :ref:`get_root_motion_rotation_accumulator<class_AnimationTree_method_get_root_motion_rotation_accumulator>` **(** **)** |const| |
- +-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Vector3<class_Vector3>` | :ref:`get_root_motion_scale<class_AnimationTree_method_get_root_motion_scale>` **(** **)** |const| |
- +-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Vector3<class_Vector3>` | :ref:`get_root_motion_scale_accumulator<class_AnimationTree_method_get_root_motion_scale_accumulator>` **(** **)** |const| |
- +-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- .. rst-class:: classref-section-separator
- ----
- .. rst-class:: classref-descriptions-group
- Signals
- -------
- .. _class_AnimationTree_signal_animation_finished:
- .. rst-class:: classref-signal
- **animation_finished** **(** :ref:`StringName<class_StringName>` anim_name **)**
- Notifies when an animation finished playing.
- \ **Note:** This signal is not emitted if an animation is looping or aborted. Also be aware of the possibility of unseen playback by sync and xfade.
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_signal_animation_player_changed:
- .. rst-class:: classref-signal
- **animation_player_changed** **(** **)**
- Emitted when the :ref:`anim_player<class_AnimationTree_property_anim_player>` is changed.
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_signal_animation_started:
- .. rst-class:: classref-signal
- **animation_started** **(** :ref:`StringName<class_StringName>` anim_name **)**
- Notifies when an animation starts playing.
- \ **Note:** This signal is not emitted if an animation is looping or playbacked from the middle. Also be aware of the possibility of unseen playback by sync and xfade.
- .. rst-class:: classref-section-separator
- ----
- .. rst-class:: classref-descriptions-group
- Enumerations
- ------------
- .. _enum_AnimationTree_AnimationProcessCallback:
- .. rst-class:: classref-enumeration
- enum **AnimationProcessCallback**:
- .. _class_AnimationTree_constant_ANIMATION_PROCESS_PHYSICS:
- .. rst-class:: classref-enumeration-constant
- :ref:`AnimationProcessCallback<enum_AnimationTree_AnimationProcessCallback>` **ANIMATION_PROCESS_PHYSICS** = ``0``
- The animations will progress during the physics frame (i.e. :ref:`Node._physics_process<class_Node_method__physics_process>`).
- .. _class_AnimationTree_constant_ANIMATION_PROCESS_IDLE:
- .. rst-class:: classref-enumeration-constant
- :ref:`AnimationProcessCallback<enum_AnimationTree_AnimationProcessCallback>` **ANIMATION_PROCESS_IDLE** = ``1``
- The animations will progress during the idle frame (i.e. :ref:`Node._process<class_Node_method__process>`).
- .. _class_AnimationTree_constant_ANIMATION_PROCESS_MANUAL:
- .. rst-class:: classref-enumeration-constant
- :ref:`AnimationProcessCallback<enum_AnimationTree_AnimationProcessCallback>` **ANIMATION_PROCESS_MANUAL** = ``2``
- The animations will only progress manually (see :ref:`advance<class_AnimationTree_method_advance>`).
- .. rst-class:: classref-section-separator
- ----
- .. rst-class:: classref-descriptions-group
- Property Descriptions
- ---------------------
- .. _class_AnimationTree_property_active:
- .. rst-class:: classref-property
- :ref:`bool<class_bool>` **active** = ``false``
- .. rst-class:: classref-property-setget
- - void **set_active** **(** :ref:`bool<class_bool>` value **)**
- - :ref:`bool<class_bool>` **is_active** **(** **)**
- If ``true``, the **AnimationTree** will be processing.
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_property_advance_expression_base_node:
- .. rst-class:: classref-property
- :ref:`NodePath<class_NodePath>` **advance_expression_base_node** = ``NodePath(".")``
- .. rst-class:: classref-property-setget
- - void **set_advance_expression_base_node** **(** :ref:`NodePath<class_NodePath>` value **)**
- - :ref:`NodePath<class_NodePath>` **get_advance_expression_base_node** **(** **)**
- The path to the :ref:`Node<class_Node>` used to evaluate the AnimationNode :ref:`Expression<class_Expression>` if one is not explicitly specified internally.
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_property_anim_player:
- .. rst-class:: classref-property
- :ref:`NodePath<class_NodePath>` **anim_player** = ``NodePath("")``
- .. rst-class:: classref-property-setget
- - void **set_animation_player** **(** :ref:`NodePath<class_NodePath>` value **)**
- - :ref:`NodePath<class_NodePath>` **get_animation_player** **(** **)**
- The path to the :ref:`AnimationPlayer<class_AnimationPlayer>` used for animating.
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_property_audio_max_polyphony:
- .. rst-class:: classref-property
- :ref:`int<class_int>` **audio_max_polyphony** = ``32``
- .. rst-class:: classref-property-setget
- - void **set_audio_max_polyphony** **(** :ref:`int<class_int>` value **)**
- - :ref:`int<class_int>` **get_audio_max_polyphony** **(** **)**
- The number of possible simultaneous sounds for each of the assigned AudioStreamPlayers.
- For example, if this value is ``32`` and the animation has two audio tracks, the two :ref:`AudioStreamPlayer<class_AudioStreamPlayer>`\ s assigned can play simultaneously up to ``32`` voices each.
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_property_process_callback:
- .. rst-class:: classref-property
- :ref:`AnimationProcessCallback<enum_AnimationTree_AnimationProcessCallback>` **process_callback** = ``1``
- .. rst-class:: classref-property-setget
- - void **set_process_callback** **(** :ref:`AnimationProcessCallback<enum_AnimationTree_AnimationProcessCallback>` value **)**
- - :ref:`AnimationProcessCallback<enum_AnimationTree_AnimationProcessCallback>` **get_process_callback** **(** **)**
- The process mode of this **AnimationTree**. See :ref:`AnimationProcessCallback<enum_AnimationTree_AnimationProcessCallback>` for available modes.
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_property_root_motion_track:
- .. rst-class:: classref-property
- :ref:`NodePath<class_NodePath>` **root_motion_track** = ``NodePath("")``
- .. rst-class:: classref-property-setget
- - void **set_root_motion_track** **(** :ref:`NodePath<class_NodePath>` value **)**
- - :ref:`NodePath<class_NodePath>` **get_root_motion_track** **(** **)**
- The path to the Animation track used for root motion. Paths must be valid scene-tree paths to a node, and must be specified starting from the parent node of the node that will reproduce the animation. To specify a track that controls properties or bones, append its name after the path, separated by ``":"``. For example, ``"character/skeleton:ankle"`` or ``"character/mesh:transform/local"``.
- If the track has type :ref:`Animation.TYPE_POSITION_3D<class_Animation_constant_TYPE_POSITION_3D>`, :ref:`Animation.TYPE_ROTATION_3D<class_Animation_constant_TYPE_ROTATION_3D>` or :ref:`Animation.TYPE_SCALE_3D<class_Animation_constant_TYPE_SCALE_3D>` the transformation will be canceled visually, and the animation will appear to stay in place. See also :ref:`get_root_motion_position<class_AnimationTree_method_get_root_motion_position>`, :ref:`get_root_motion_rotation<class_AnimationTree_method_get_root_motion_rotation>`, :ref:`get_root_motion_scale<class_AnimationTree_method_get_root_motion_scale>` and :ref:`RootMotionView<class_RootMotionView>`.
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_property_tree_root:
- .. rst-class:: classref-property
- :ref:`AnimationNode<class_AnimationNode>` **tree_root**
- .. rst-class:: classref-property-setget
- - void **set_tree_root** **(** :ref:`AnimationNode<class_AnimationNode>` value **)**
- - :ref:`AnimationNode<class_AnimationNode>` **get_tree_root** **(** **)**
- The root animation node of this **AnimationTree**. See :ref:`AnimationNode<class_AnimationNode>`.
- .. rst-class:: classref-section-separator
- ----
- .. rst-class:: classref-descriptions-group
- Method Descriptions
- -------------------
- .. _class_AnimationTree_method__post_process_key_value:
- .. rst-class:: classref-method
- :ref:`Variant<class_Variant>` **_post_process_key_value** **(** :ref:`Animation<class_Animation>` animation, :ref:`int<class_int>` track, :ref:`Variant<class_Variant>` value, :ref:`Object<class_Object>` object, :ref:`int<class_int>` object_idx **)** |virtual| |const|
- A virtual function for processing after key getting during playback.
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_method_advance:
- .. rst-class:: classref-method
- void **advance** **(** :ref:`float<class_float>` delta **)**
- Manually advance the animations by the specified time (in seconds).
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_method_get_root_motion_position:
- .. rst-class:: classref-method
- :ref:`Vector3<class_Vector3>` **get_root_motion_position** **(** **)** |const|
- Retrieve the motion delta of position with the :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` as a :ref:`Vector3<class_Vector3>` that can be used elsewhere.
- If :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` is not a path to a track of type :ref:`Animation.TYPE_POSITION_3D<class_Animation_constant_TYPE_POSITION_3D>`, returns ``Vector3(0, 0, 0)``.
- See also :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` and :ref:`RootMotionView<class_RootMotionView>`.
- The most basic example is applying position to :ref:`CharacterBody3D<class_CharacterBody3D>`:
- .. tabs::
- .. code-tab:: gdscript
- var current_rotation: Quaternion
-
- func _process(delta):
- if Input.is_action_just_pressed("animate"):
- current_rotation = get_quaternion()
- state_machine.travel("Animate")
- var velocity: Vector3 = current_rotation * animation_tree.get_root_motion_position() / delta
- set_velocity(velocity)
- move_and_slide()
- By using this in combination with :ref:`get_root_motion_position_accumulator<class_AnimationTree_method_get_root_motion_position_accumulator>`, you can apply the root motion position more correctly to account for the rotation of the node.
- .. tabs::
- .. code-tab:: gdscript
- func _process(delta):
- if Input.is_action_just_pressed("animate"):
- state_machine.travel("Animate")
- set_quaternion(get_quaternion() * animation_tree.get_root_motion_rotation())
- var velocity: Vector3 = (animation_tree.get_root_motion_rotation_accumulator().inverse() * get_quaternion()) * animation_tree.get_root_motion_position() / delta
- set_velocity(velocity)
- move_and_slide()
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_method_get_root_motion_position_accumulator:
- .. rst-class:: classref-method
- :ref:`Vector3<class_Vector3>` **get_root_motion_position_accumulator** **(** **)** |const|
- Retrieve the blended value of the position tracks with the :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` as a :ref:`Vector3<class_Vector3>` that can be used elsewhere.
- This is useful in cases where you want to respect the initial key values of the animation.
- For example, if an animation with only one key ``Vector3(0, 0, 0)`` is played in the previous frame and then an animation with only one key ``Vector3(1, 0, 1)`` is played in the next frame, the difference can be calculated as follows:
- .. tabs::
- .. code-tab:: gdscript
- var prev_root_motion_position_accumulator: Vector3
-
- func _process(delta):
- if Input.is_action_just_pressed("animate"):
- state_machine.travel("Animate")
- var current_root_motion_position_accumulator: Vector3 = animation_tree.get_root_motion_position_accumulator()
- var difference: Vector3 = current_root_motion_position_accumulator - prev_root_motion_position_accumulator
- prev_root_motion_position_accumulator = current_root_motion_position_accumulator
- transform.origin += difference
- However, if the animation loops, an unintended discrete change may occur, so this is only useful for some simple use cases.
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_method_get_root_motion_rotation:
- .. rst-class:: classref-method
- :ref:`Quaternion<class_Quaternion>` **get_root_motion_rotation** **(** **)** |const|
- Retrieve the motion delta of rotation with the :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` as a :ref:`Quaternion<class_Quaternion>` that can be used elsewhere.
- If :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` is not a path to a track of type :ref:`Animation.TYPE_ROTATION_3D<class_Animation_constant_TYPE_ROTATION_3D>`, returns ``Quaternion(0, 0, 0, 1)``.
- See also :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` and :ref:`RootMotionView<class_RootMotionView>`.
- The most basic example is applying rotation to :ref:`CharacterBody3D<class_CharacterBody3D>`:
- .. tabs::
- .. code-tab:: gdscript
- func _process(delta):
- if Input.is_action_just_pressed("animate"):
- state_machine.travel("Animate")
- set_quaternion(get_quaternion() * animation_tree.get_root_motion_rotation())
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_method_get_root_motion_rotation_accumulator:
- .. rst-class:: classref-method
- :ref:`Quaternion<class_Quaternion>` **get_root_motion_rotation_accumulator** **(** **)** |const|
- Retrieve the blended value of the rotation tracks with the :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` as a :ref:`Quaternion<class_Quaternion>` that can be used elsewhere.
- This is necessary to apply the root motion position correctly, taking rotation into account. See also :ref:`get_root_motion_position<class_AnimationTree_method_get_root_motion_position>`.
- Also, this is useful in cases where you want to respect the initial key values of the animation.
- For example, if an animation with only one key ``Quaternion(0, 0, 0, 1)`` is played in the previous frame and then an animation with only one key ``Quaternion(0, 0.707, 0, 0.707)`` is played in the next frame, the difference can be calculated as follows:
- .. tabs::
- .. code-tab:: gdscript
- var prev_root_motion_rotation_accumulator: Quaternion
-
- func _process(delta):
- if Input.is_action_just_pressed("animate"):
- state_machine.travel("Animate")
- var current_root_motion_rotation_accumulator: Quaternion = animation_tree.get_root_motion_Quaternion_accumulator()
- var difference: Quaternion = prev_root_motion_rotation_accumulator.inverse() * current_root_motion_rotation_accumulator
- prev_root_motion_rotation_accumulator = current_root_motion_rotation_accumulator
- transform.basis *= difference
- However, if the animation loops, an unintended discrete change may occur, so this is only useful for some simple use cases.
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_method_get_root_motion_scale:
- .. rst-class:: classref-method
- :ref:`Vector3<class_Vector3>` **get_root_motion_scale** **(** **)** |const|
- Retrieve the motion delta of scale with the :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` as a :ref:`Vector3<class_Vector3>` that can be used elsewhere.
- If :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` is not a path to a track of type :ref:`Animation.TYPE_SCALE_3D<class_Animation_constant_TYPE_SCALE_3D>`, returns ``Vector3(0, 0, 0)``.
- See also :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` and :ref:`RootMotionView<class_RootMotionView>`.
- The most basic example is applying scale to :ref:`CharacterBody3D<class_CharacterBody3D>`:
- .. tabs::
- .. code-tab:: gdscript
- var current_scale: Vector3 = Vector3(1, 1, 1)
- var scale_accum: Vector3 = Vector3(1, 1, 1)
-
- func _process(delta):
- if Input.is_action_just_pressed("animate"):
- current_scale = get_scale()
- scale_accum = Vector3(1, 1, 1)
- state_machine.travel("Animate")
- scale_accum += animation_tree.get_root_motion_scale()
- set_scale(current_scale * scale_accum)
- .. rst-class:: classref-item-separator
- ----
- .. _class_AnimationTree_method_get_root_motion_scale_accumulator:
- .. rst-class:: classref-method
- :ref:`Vector3<class_Vector3>` **get_root_motion_scale_accumulator** **(** **)** |const|
- Retrieve the blended value of the scale tracks with the :ref:`root_motion_track<class_AnimationTree_property_root_motion_track>` as a :ref:`Vector3<class_Vector3>` that can be used elsewhere.
- For example, if an animation with only one key ``Vector3(1, 1, 1)`` is played in the previous frame and then an animation with only one key ``Vector3(2, 2, 2)`` is played in the next frame, the difference can be calculated as follows:
- .. tabs::
- .. code-tab:: gdscript
- var prev_root_motion_scale_accumulator: Vector3
-
- func _process(delta):
- if Input.is_action_just_pressed("animate"):
- state_machine.travel("Animate")
- var current_root_motion_scale_accumulator: Vector3 = animation_tree.get_root_motion_scale_accumulator()
- var difference: Vector3 = current_root_motion_scale_accumulator - prev_root_motion_scale_accumulator
- prev_root_motion_scale_accumulator = current_root_motion_scale_accumulator
- transform.basis = transform.basis.scaled(difference)
- However, if the animation loops, an unintended discrete change may occur, so this is only useful for some simple use cases.
- .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
- .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
- .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
- .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
- .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
- .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`
|