class_animationmixer.rst 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809
  1. :github_url: hide
  2. .. DO NOT EDIT THIS FILE!!!
  3. .. Generated automatically from Godot engine sources.
  4. .. Generator: https://github.com/godotengine/godot/tree/4.2/doc/tools/make_rst.py.
  5. .. XML source: https://github.com/godotengine/godot/tree/4.2/doc/classes/AnimationMixer.xml.
  6. .. _class_AnimationMixer:
  7. AnimationMixer
  8. ==============
  9. **Inherits:** :ref:`Node<class_Node>` **<** :ref:`Object<class_Object>`
  10. **Inherited By:** :ref:`AnimationPlayer<class_AnimationPlayer>`, :ref:`AnimationTree<class_AnimationTree>`
  11. Base class for :ref:`AnimationPlayer<class_AnimationPlayer>` and :ref:`AnimationTree<class_AnimationTree>`.
  12. .. rst-class:: classref-introduction-group
  13. Description
  14. -----------
  15. Base class for :ref:`AnimationPlayer<class_AnimationPlayer>` and :ref:`AnimationTree<class_AnimationTree>` to manage animation lists. It also has general properties and methods for playback and blending.
  16. After instantiating the playback information data within the extended class, the blending is processed by the **AnimationMixer**.
  17. .. rst-class:: classref-reftable-group
  18. Properties
  19. ----------
  20. .. table::
  21. :widths: auto
  22. +---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+--------------------+
  23. | :ref:`bool<class_bool>` | :ref:`active<class_AnimationMixer_property_active>` | ``true`` |
  24. +---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+--------------------+
  25. | :ref:`int<class_int>` | :ref:`audio_max_polyphony<class_AnimationMixer_property_audio_max_polyphony>` | ``32`` |
  26. +---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+--------------------+
  27. | :ref:`AnimationCallbackModeMethod<enum_AnimationMixer_AnimationCallbackModeMethod>` | :ref:`callback_mode_method<class_AnimationMixer_property_callback_mode_method>` | ``0`` |
  28. +---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+--------------------+
  29. | :ref:`AnimationCallbackModeProcess<enum_AnimationMixer_AnimationCallbackModeProcess>` | :ref:`callback_mode_process<class_AnimationMixer_property_callback_mode_process>` | ``1`` |
  30. +---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+--------------------+
  31. | :ref:`bool<class_bool>` | :ref:`deterministic<class_AnimationMixer_property_deterministic>` | ``false`` |
  32. +---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+--------------------+
  33. | :ref:`bool<class_bool>` | :ref:`reset_on_save<class_AnimationMixer_property_reset_on_save>` | ``true`` |
  34. +---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+--------------------+
  35. | :ref:`NodePath<class_NodePath>` | :ref:`root_motion_track<class_AnimationMixer_property_root_motion_track>` | ``NodePath("")`` |
  36. +---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+--------------------+
  37. | :ref:`NodePath<class_NodePath>` | :ref:`root_node<class_AnimationMixer_property_root_node>` | ``NodePath("..")`` |
  38. +---------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+--------------------+
  39. .. rst-class:: classref-reftable-group
  40. Methods
  41. -------
  42. .. table::
  43. :widths: auto
  44. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  45. | :ref:`Variant<class_Variant>` | :ref:`_post_process_key_value<class_AnimationMixer_private_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| |
  46. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  47. | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`add_animation_library<class_AnimationMixer_method_add_animation_library>` **(** :ref:`StringName<class_StringName>` name, :ref:`AnimationLibrary<class_AnimationLibrary>` library **)** |
  48. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  49. | void | :ref:`advance<class_AnimationMixer_method_advance>` **(** :ref:`float<class_float>` delta **)** |
  50. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  51. | void | :ref:`clear_caches<class_AnimationMixer_method_clear_caches>` **(** **)** |
  52. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  53. | :ref:`StringName<class_StringName>` | :ref:`find_animation<class_AnimationMixer_method_find_animation>` **(** :ref:`Animation<class_Animation>` animation **)** |const| |
  54. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  55. | :ref:`StringName<class_StringName>` | :ref:`find_animation_library<class_AnimationMixer_method_find_animation_library>` **(** :ref:`Animation<class_Animation>` animation **)** |const| |
  56. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  57. | :ref:`Animation<class_Animation>` | :ref:`get_animation<class_AnimationMixer_method_get_animation>` **(** :ref:`StringName<class_StringName>` name **)** |const| |
  58. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  59. | :ref:`AnimationLibrary<class_AnimationLibrary>` | :ref:`get_animation_library<class_AnimationMixer_method_get_animation_library>` **(** :ref:`StringName<class_StringName>` name **)** |const| |
  60. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  61. | :ref:`StringName[]<class_StringName>` | :ref:`get_animation_library_list<class_AnimationMixer_method_get_animation_library_list>` **(** **)** |const| |
  62. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  63. | :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_animation_list<class_AnimationMixer_method_get_animation_list>` **(** **)** |const| |
  64. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  65. | :ref:`Vector3<class_Vector3>` | :ref:`get_root_motion_position<class_AnimationMixer_method_get_root_motion_position>` **(** **)** |const| |
  66. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  67. | :ref:`Vector3<class_Vector3>` | :ref:`get_root_motion_position_accumulator<class_AnimationMixer_method_get_root_motion_position_accumulator>` **(** **)** |const| |
  68. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  69. | :ref:`Quaternion<class_Quaternion>` | :ref:`get_root_motion_rotation<class_AnimationMixer_method_get_root_motion_rotation>` **(** **)** |const| |
  70. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  71. | :ref:`Quaternion<class_Quaternion>` | :ref:`get_root_motion_rotation_accumulator<class_AnimationMixer_method_get_root_motion_rotation_accumulator>` **(** **)** |const| |
  72. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  73. | :ref:`Vector3<class_Vector3>` | :ref:`get_root_motion_scale<class_AnimationMixer_method_get_root_motion_scale>` **(** **)** |const| |
  74. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  75. | :ref:`Vector3<class_Vector3>` | :ref:`get_root_motion_scale_accumulator<class_AnimationMixer_method_get_root_motion_scale_accumulator>` **(** **)** |const| |
  76. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  77. | :ref:`bool<class_bool>` | :ref:`has_animation<class_AnimationMixer_method_has_animation>` **(** :ref:`StringName<class_StringName>` name **)** |const| |
  78. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  79. | :ref:`bool<class_bool>` | :ref:`has_animation_library<class_AnimationMixer_method_has_animation_library>` **(** :ref:`StringName<class_StringName>` name **)** |const| |
  80. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  81. | void | :ref:`remove_animation_library<class_AnimationMixer_method_remove_animation_library>` **(** :ref:`StringName<class_StringName>` name **)** |
  82. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  83. | void | :ref:`rename_animation_library<class_AnimationMixer_method_rename_animation_library>` **(** :ref:`StringName<class_StringName>` name, :ref:`StringName<class_StringName>` newname **)** |
  84. +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  85. .. rst-class:: classref-section-separator
  86. ----
  87. .. rst-class:: classref-descriptions-group
  88. Signals
  89. -------
  90. .. _class_AnimationMixer_signal_animation_finished:
  91. .. rst-class:: classref-signal
  92. **animation_finished** **(** :ref:`StringName<class_StringName>` anim_name **)**
  93. Notifies when an animation finished playing.
  94. \ **Note:** This signal is not emitted if an animation is looping.
  95. .. rst-class:: classref-item-separator
  96. ----
  97. .. _class_AnimationMixer_signal_animation_libraries_updated:
  98. .. rst-class:: classref-signal
  99. **animation_libraries_updated** **(** **)**
  100. Notifies when the animation libraries have changed.
  101. .. rst-class:: classref-item-separator
  102. ----
  103. .. _class_AnimationMixer_signal_animation_list_changed:
  104. .. rst-class:: classref-signal
  105. **animation_list_changed** **(** **)**
  106. Notifies when an animation list is changed.
  107. .. rst-class:: classref-item-separator
  108. ----
  109. .. _class_AnimationMixer_signal_animation_started:
  110. .. rst-class:: classref-signal
  111. **animation_started** **(** :ref:`StringName<class_StringName>` anim_name **)**
  112. Notifies when an animation starts playing.
  113. .. rst-class:: classref-item-separator
  114. ----
  115. .. _class_AnimationMixer_signal_caches_cleared:
  116. .. rst-class:: classref-signal
  117. **caches_cleared** **(** **)**
  118. Notifies when the caches have been cleared, either automatically, or manually via :ref:`clear_caches<class_AnimationMixer_method_clear_caches>`.
  119. .. rst-class:: classref-item-separator
  120. ----
  121. .. _class_AnimationMixer_signal_mixer_updated:
  122. .. rst-class:: classref-signal
  123. **mixer_updated** **(** **)**
  124. Editor only. Notifies when the property have been updated to update dummy :ref:`AnimationPlayer<class_AnimationPlayer>` in animation player editor.
  125. .. rst-class:: classref-section-separator
  126. ----
  127. .. rst-class:: classref-descriptions-group
  128. Enumerations
  129. ------------
  130. .. _enum_AnimationMixer_AnimationCallbackModeProcess:
  131. .. rst-class:: classref-enumeration
  132. enum **AnimationCallbackModeProcess**:
  133. .. _class_AnimationMixer_constant_ANIMATION_CALLBACK_MODE_PROCESS_PHYSICS:
  134. .. rst-class:: classref-enumeration-constant
  135. :ref:`AnimationCallbackModeProcess<enum_AnimationMixer_AnimationCallbackModeProcess>` **ANIMATION_CALLBACK_MODE_PROCESS_PHYSICS** = ``0``
  136. Process animation during physics frames (see :ref:`Node.NOTIFICATION_INTERNAL_PHYSICS_PROCESS<class_Node_constant_NOTIFICATION_INTERNAL_PHYSICS_PROCESS>`). This is especially useful when animating physics bodies.
  137. .. _class_AnimationMixer_constant_ANIMATION_CALLBACK_MODE_PROCESS_IDLE:
  138. .. rst-class:: classref-enumeration-constant
  139. :ref:`AnimationCallbackModeProcess<enum_AnimationMixer_AnimationCallbackModeProcess>` **ANIMATION_CALLBACK_MODE_PROCESS_IDLE** = ``1``
  140. Process animation during process frames (see :ref:`Node.NOTIFICATION_INTERNAL_PROCESS<class_Node_constant_NOTIFICATION_INTERNAL_PROCESS>`).
  141. .. _class_AnimationMixer_constant_ANIMATION_CALLBACK_MODE_PROCESS_MANUAL:
  142. .. rst-class:: classref-enumeration-constant
  143. :ref:`AnimationCallbackModeProcess<enum_AnimationMixer_AnimationCallbackModeProcess>` **ANIMATION_CALLBACK_MODE_PROCESS_MANUAL** = ``2``
  144. Do not process animation. Use :ref:`advance<class_AnimationMixer_method_advance>` to process the animation manually.
  145. .. rst-class:: classref-item-separator
  146. ----
  147. .. _enum_AnimationMixer_AnimationCallbackModeMethod:
  148. .. rst-class:: classref-enumeration
  149. enum **AnimationCallbackModeMethod**:
  150. .. _class_AnimationMixer_constant_ANIMATION_CALLBACK_MODE_METHOD_DEFERRED:
  151. .. rst-class:: classref-enumeration-constant
  152. :ref:`AnimationCallbackModeMethod<enum_AnimationMixer_AnimationCallbackModeMethod>` **ANIMATION_CALLBACK_MODE_METHOD_DEFERRED** = ``0``
  153. Batch method calls during the animation process, then do the calls after events are processed. This avoids bugs involving deleting nodes or modifying the AnimationPlayer while playing.
  154. .. _class_AnimationMixer_constant_ANIMATION_CALLBACK_MODE_METHOD_IMMEDIATE:
  155. .. rst-class:: classref-enumeration-constant
  156. :ref:`AnimationCallbackModeMethod<enum_AnimationMixer_AnimationCallbackModeMethod>` **ANIMATION_CALLBACK_MODE_METHOD_IMMEDIATE** = ``1``
  157. Make method calls immediately when reached in the animation.
  158. .. rst-class:: classref-section-separator
  159. ----
  160. .. rst-class:: classref-descriptions-group
  161. Property Descriptions
  162. ---------------------
  163. .. _class_AnimationMixer_property_active:
  164. .. rst-class:: classref-property
  165. :ref:`bool<class_bool>` **active** = ``true``
  166. .. rst-class:: classref-property-setget
  167. - void **set_active** **(** :ref:`bool<class_bool>` value **)**
  168. - :ref:`bool<class_bool>` **is_active** **(** **)**
  169. If ``true``, the **AnimationMixer** will be processing.
  170. .. rst-class:: classref-item-separator
  171. ----
  172. .. _class_AnimationMixer_property_audio_max_polyphony:
  173. .. rst-class:: classref-property
  174. :ref:`int<class_int>` **audio_max_polyphony** = ``32``
  175. .. rst-class:: classref-property-setget
  176. - void **set_audio_max_polyphony** **(** :ref:`int<class_int>` value **)**
  177. - :ref:`int<class_int>` **get_audio_max_polyphony** **(** **)**
  178. The number of possible simultaneous sounds for each of the assigned AudioStreamPlayers.
  179. 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.
  180. .. rst-class:: classref-item-separator
  181. ----
  182. .. _class_AnimationMixer_property_callback_mode_method:
  183. .. rst-class:: classref-property
  184. :ref:`AnimationCallbackModeMethod<enum_AnimationMixer_AnimationCallbackModeMethod>` **callback_mode_method** = ``0``
  185. .. rst-class:: classref-property-setget
  186. - void **set_callback_mode_method** **(** :ref:`AnimationCallbackModeMethod<enum_AnimationMixer_AnimationCallbackModeMethod>` value **)**
  187. - :ref:`AnimationCallbackModeMethod<enum_AnimationMixer_AnimationCallbackModeMethod>` **get_callback_mode_method** **(** **)**
  188. The call mode to use for Call Method tracks.
  189. .. rst-class:: classref-item-separator
  190. ----
  191. .. _class_AnimationMixer_property_callback_mode_process:
  192. .. rst-class:: classref-property
  193. :ref:`AnimationCallbackModeProcess<enum_AnimationMixer_AnimationCallbackModeProcess>` **callback_mode_process** = ``1``
  194. .. rst-class:: classref-property-setget
  195. - void **set_callback_mode_process** **(** :ref:`AnimationCallbackModeProcess<enum_AnimationMixer_AnimationCallbackModeProcess>` value **)**
  196. - :ref:`AnimationCallbackModeProcess<enum_AnimationMixer_AnimationCallbackModeProcess>` **get_callback_mode_process** **(** **)**
  197. The process notification in which to update animations.
  198. .. rst-class:: classref-item-separator
  199. ----
  200. .. _class_AnimationMixer_property_deterministic:
  201. .. rst-class:: classref-property
  202. :ref:`bool<class_bool>` **deterministic** = ``false``
  203. .. rst-class:: classref-property-setget
  204. - void **set_deterministic** **(** :ref:`bool<class_bool>` value **)**
  205. - :ref:`bool<class_bool>` **is_deterministic** **(** **)**
  206. If ``true``, the blending uses the deterministic algorithm. The total weight is not normalized and the result is accumulated with an initial value (``0`` or a ``"RESET"`` animation if present).
  207. This means that if the total amount of blending is ``0.0``, the result is equal to the ``"RESET"`` animation.
  208. If the number of tracks between the blended animations is different, the animation with the missing track is treated as if it had the initial value.
  209. If ``false``, The blend does not use the deterministic algorithm. The total weight is normalized and always ``1.0``. If the number of tracks between the blended animations is different, nothing is done about the animation that is missing a track.
  210. \ **Note:** In :ref:`AnimationTree<class_AnimationTree>`, the blending with :ref:`AnimationNodeAdd2<class_AnimationNodeAdd2>`, :ref:`AnimationNodeAdd3<class_AnimationNodeAdd3>`, :ref:`AnimationNodeSub2<class_AnimationNodeSub2>` or the weight greater than ``1.0`` may produce unexpected results.
  211. For example, if :ref:`AnimationNodeAdd2<class_AnimationNodeAdd2>` blends two nodes with the amount ``1.0``, then total weight is ``2.0`` but it will be normalized to make the total amount ``1.0`` and the result will be equal to :ref:`AnimationNodeBlend2<class_AnimationNodeBlend2>` with the amount ``0.5``.
  212. .. rst-class:: classref-item-separator
  213. ----
  214. .. _class_AnimationMixer_property_reset_on_save:
  215. .. rst-class:: classref-property
  216. :ref:`bool<class_bool>` **reset_on_save** = ``true``
  217. .. rst-class:: classref-property-setget
  218. - void **set_reset_on_save_enabled** **(** :ref:`bool<class_bool>` value **)**
  219. - :ref:`bool<class_bool>` **is_reset_on_save_enabled** **(** **)**
  220. This is used by the editor. If set to ``true``, the scene will be saved with the effects of the reset animation (the animation with the key ``"RESET"``) applied as if it had been seeked to time 0, with the editor keeping the values that the scene had before saving.
  221. This makes it more convenient to preview and edit animations in the editor, as changes to the scene will not be saved as long as they are set in the reset animation.
  222. .. rst-class:: classref-item-separator
  223. ----
  224. .. _class_AnimationMixer_property_root_motion_track:
  225. .. rst-class:: classref-property
  226. :ref:`NodePath<class_NodePath>` **root_motion_track** = ``NodePath("")``
  227. .. rst-class:: classref-property-setget
  228. - void **set_root_motion_track** **(** :ref:`NodePath<class_NodePath>` value **)**
  229. - :ref:`NodePath<class_NodePath>` **get_root_motion_track** **(** **)**
  230. 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"``.
  231. 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_AnimationMixer_method_get_root_motion_position>`, :ref:`get_root_motion_rotation<class_AnimationMixer_method_get_root_motion_rotation>`, :ref:`get_root_motion_scale<class_AnimationMixer_method_get_root_motion_scale>` and :ref:`RootMotionView<class_RootMotionView>`.
  232. .. rst-class:: classref-item-separator
  233. ----
  234. .. _class_AnimationMixer_property_root_node:
  235. .. rst-class:: classref-property
  236. :ref:`NodePath<class_NodePath>` **root_node** = ``NodePath("..")``
  237. .. rst-class:: classref-property-setget
  238. - void **set_root_node** **(** :ref:`NodePath<class_NodePath>` value **)**
  239. - :ref:`NodePath<class_NodePath>` **get_root_node** **(** **)**
  240. The node from which node path references will travel.
  241. .. rst-class:: classref-section-separator
  242. ----
  243. .. rst-class:: classref-descriptions-group
  244. Method Descriptions
  245. -------------------
  246. .. _class_AnimationMixer_private_method__post_process_key_value:
  247. .. rst-class:: classref-method
  248. :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|
  249. A virtual function for processing after key getting during playback.
  250. .. rst-class:: classref-item-separator
  251. ----
  252. .. _class_AnimationMixer_method_add_animation_library:
  253. .. rst-class:: classref-method
  254. :ref:`Error<enum_@GlobalScope_Error>` **add_animation_library** **(** :ref:`StringName<class_StringName>` name, :ref:`AnimationLibrary<class_AnimationLibrary>` library **)**
  255. Adds ``library`` to the animation player, under the key ``name``.
  256. .. rst-class:: classref-item-separator
  257. ----
  258. .. _class_AnimationMixer_method_advance:
  259. .. rst-class:: classref-method
  260. void **advance** **(** :ref:`float<class_float>` delta **)**
  261. Manually advance the animations by the specified time (in seconds).
  262. .. rst-class:: classref-item-separator
  263. ----
  264. .. _class_AnimationMixer_method_clear_caches:
  265. .. rst-class:: classref-method
  266. void **clear_caches** **(** **)**
  267. **AnimationMixer** caches animated nodes. It may not notice if a node disappears; :ref:`clear_caches<class_AnimationMixer_method_clear_caches>` forces it to update the cache again.
  268. .. rst-class:: classref-item-separator
  269. ----
  270. .. _class_AnimationMixer_method_find_animation:
  271. .. rst-class:: classref-method
  272. :ref:`StringName<class_StringName>` **find_animation** **(** :ref:`Animation<class_Animation>` animation **)** |const|
  273. Returns the key of ``animation`` or an empty :ref:`StringName<class_StringName>` if not found.
  274. .. rst-class:: classref-item-separator
  275. ----
  276. .. _class_AnimationMixer_method_find_animation_library:
  277. .. rst-class:: classref-method
  278. :ref:`StringName<class_StringName>` **find_animation_library** **(** :ref:`Animation<class_Animation>` animation **)** |const|
  279. Returns the key for the :ref:`AnimationLibrary<class_AnimationLibrary>` that contains ``animation`` or an empty :ref:`StringName<class_StringName>` if not found.
  280. .. rst-class:: classref-item-separator
  281. ----
  282. .. _class_AnimationMixer_method_get_animation:
  283. .. rst-class:: classref-method
  284. :ref:`Animation<class_Animation>` **get_animation** **(** :ref:`StringName<class_StringName>` name **)** |const|
  285. Returns the :ref:`Animation<class_Animation>` with the key ``name``. If the animation does not exist, ``null`` is returned and an error is logged.
  286. .. rst-class:: classref-item-separator
  287. ----
  288. .. _class_AnimationMixer_method_get_animation_library:
  289. .. rst-class:: classref-method
  290. :ref:`AnimationLibrary<class_AnimationLibrary>` **get_animation_library** **(** :ref:`StringName<class_StringName>` name **)** |const|
  291. Returns the first :ref:`AnimationLibrary<class_AnimationLibrary>` with key ``name`` or ``null`` if not found.
  292. To get the :ref:`AnimationPlayer<class_AnimationPlayer>`'s global animation library, use ``get_animation_library("")``.
  293. .. rst-class:: classref-item-separator
  294. ----
  295. .. _class_AnimationMixer_method_get_animation_library_list:
  296. .. rst-class:: classref-method
  297. :ref:`StringName[]<class_StringName>` **get_animation_library_list** **(** **)** |const|
  298. Returns the list of stored library keys.
  299. .. rst-class:: classref-item-separator
  300. ----
  301. .. _class_AnimationMixer_method_get_animation_list:
  302. .. rst-class:: classref-method
  303. :ref:`PackedStringArray<class_PackedStringArray>` **get_animation_list** **(** **)** |const|
  304. Returns the list of stored animation keys.
  305. .. rst-class:: classref-item-separator
  306. ----
  307. .. _class_AnimationMixer_method_get_root_motion_position:
  308. .. rst-class:: classref-method
  309. :ref:`Vector3<class_Vector3>` **get_root_motion_position** **(** **)** |const|
  310. Retrieve the motion delta of position with the :ref:`root_motion_track<class_AnimationMixer_property_root_motion_track>` as a :ref:`Vector3<class_Vector3>` that can be used elsewhere.
  311. If :ref:`root_motion_track<class_AnimationMixer_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)``.
  312. See also :ref:`root_motion_track<class_AnimationMixer_property_root_motion_track>` and :ref:`RootMotionView<class_RootMotionView>`.
  313. The most basic example is applying position to :ref:`CharacterBody3D<class_CharacterBody3D>`:
  314. .. tabs::
  315. .. code-tab:: gdscript
  316. var current_rotation: Quaternion
  317. func _process(delta):
  318. if Input.is_action_just_pressed("animate"):
  319. current_rotation = get_quaternion()
  320. state_machine.travel("Animate")
  321. var velocity: Vector3 = current_rotation * animation_tree.get_root_motion_position() / delta
  322. set_velocity(velocity)
  323. move_and_slide()
  324. By using this in combination with :ref:`get_root_motion_position_accumulator<class_AnimationMixer_method_get_root_motion_position_accumulator>`, you can apply the root motion position more correctly to account for the rotation of the node.
  325. .. tabs::
  326. .. code-tab:: gdscript
  327. func _process(delta):
  328. if Input.is_action_just_pressed("animate"):
  329. state_machine.travel("Animate")
  330. set_quaternion(get_quaternion() * animation_tree.get_root_motion_rotation())
  331. var velocity: Vector3 = (animation_tree.get_root_motion_rotation_accumulator().inverse() * get_quaternion()) * animation_tree.get_root_motion_position() / delta
  332. set_velocity(velocity)
  333. move_and_slide()
  334. .. rst-class:: classref-item-separator
  335. ----
  336. .. _class_AnimationMixer_method_get_root_motion_position_accumulator:
  337. .. rst-class:: classref-method
  338. :ref:`Vector3<class_Vector3>` **get_root_motion_position_accumulator** **(** **)** |const|
  339. Retrieve the blended value of the position tracks with the :ref:`root_motion_track<class_AnimationMixer_property_root_motion_track>` as a :ref:`Vector3<class_Vector3>` that can be used elsewhere.
  340. This is useful in cases where you want to respect the initial key values of the animation.
  341. 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:
  342. .. tabs::
  343. .. code-tab:: gdscript
  344. var prev_root_motion_position_accumulator: Vector3
  345. func _process(delta):
  346. if Input.is_action_just_pressed("animate"):
  347. state_machine.travel("Animate")
  348. var current_root_motion_position_accumulator: Vector3 = animation_tree.get_root_motion_position_accumulator()
  349. var difference: Vector3 = current_root_motion_position_accumulator - prev_root_motion_position_accumulator
  350. prev_root_motion_position_accumulator = current_root_motion_position_accumulator
  351. transform.origin += difference
  352. However, if the animation loops, an unintended discrete change may occur, so this is only useful for some simple use cases.
  353. .. rst-class:: classref-item-separator
  354. ----
  355. .. _class_AnimationMixer_method_get_root_motion_rotation:
  356. .. rst-class:: classref-method
  357. :ref:`Quaternion<class_Quaternion>` **get_root_motion_rotation** **(** **)** |const|
  358. Retrieve the motion delta of rotation with the :ref:`root_motion_track<class_AnimationMixer_property_root_motion_track>` as a :ref:`Quaternion<class_Quaternion>` that can be used elsewhere.
  359. If :ref:`root_motion_track<class_AnimationMixer_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)``.
  360. See also :ref:`root_motion_track<class_AnimationMixer_property_root_motion_track>` and :ref:`RootMotionView<class_RootMotionView>`.
  361. The most basic example is applying rotation to :ref:`CharacterBody3D<class_CharacterBody3D>`:
  362. .. tabs::
  363. .. code-tab:: gdscript
  364. func _process(delta):
  365. if Input.is_action_just_pressed("animate"):
  366. state_machine.travel("Animate")
  367. set_quaternion(get_quaternion() * animation_tree.get_root_motion_rotation())
  368. .. rst-class:: classref-item-separator
  369. ----
  370. .. _class_AnimationMixer_method_get_root_motion_rotation_accumulator:
  371. .. rst-class:: classref-method
  372. :ref:`Quaternion<class_Quaternion>` **get_root_motion_rotation_accumulator** **(** **)** |const|
  373. Retrieve the blended value of the rotation tracks with the :ref:`root_motion_track<class_AnimationMixer_property_root_motion_track>` as a :ref:`Quaternion<class_Quaternion>` that can be used elsewhere.
  374. This is necessary to apply the root motion position correctly, taking rotation into account. See also :ref:`get_root_motion_position<class_AnimationMixer_method_get_root_motion_position>`.
  375. Also, this is useful in cases where you want to respect the initial key values of the animation.
  376. 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:
  377. .. tabs::
  378. .. code-tab:: gdscript
  379. var prev_root_motion_rotation_accumulator: Quaternion
  380. func _process(delta):
  381. if Input.is_action_just_pressed("animate"):
  382. state_machine.travel("Animate")
  383. var current_root_motion_rotation_accumulator: Quaternion = animation_tree.get_root_motion_Quaternion_accumulator()
  384. var difference: Quaternion = prev_root_motion_rotation_accumulator.inverse() * current_root_motion_rotation_accumulator
  385. prev_root_motion_rotation_accumulator = current_root_motion_rotation_accumulator
  386. transform.basis *= difference
  387. However, if the animation loops, an unintended discrete change may occur, so this is only useful for some simple use cases.
  388. .. rst-class:: classref-item-separator
  389. ----
  390. .. _class_AnimationMixer_method_get_root_motion_scale:
  391. .. rst-class:: classref-method
  392. :ref:`Vector3<class_Vector3>` **get_root_motion_scale** **(** **)** |const|
  393. Retrieve the motion delta of scale with the :ref:`root_motion_track<class_AnimationMixer_property_root_motion_track>` as a :ref:`Vector3<class_Vector3>` that can be used elsewhere.
  394. If :ref:`root_motion_track<class_AnimationMixer_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)``.
  395. See also :ref:`root_motion_track<class_AnimationMixer_property_root_motion_track>` and :ref:`RootMotionView<class_RootMotionView>`.
  396. The most basic example is applying scale to :ref:`CharacterBody3D<class_CharacterBody3D>`:
  397. .. tabs::
  398. .. code-tab:: gdscript
  399. var current_scale: Vector3 = Vector3(1, 1, 1)
  400. var scale_accum: Vector3 = Vector3(1, 1, 1)
  401. func _process(delta):
  402. if Input.is_action_just_pressed("animate"):
  403. current_scale = get_scale()
  404. scale_accum = Vector3(1, 1, 1)
  405. state_machine.travel("Animate")
  406. scale_accum += animation_tree.get_root_motion_scale()
  407. set_scale(current_scale * scale_accum)
  408. .. rst-class:: classref-item-separator
  409. ----
  410. .. _class_AnimationMixer_method_get_root_motion_scale_accumulator:
  411. .. rst-class:: classref-method
  412. :ref:`Vector3<class_Vector3>` **get_root_motion_scale_accumulator** **(** **)** |const|
  413. Retrieve the blended value of the scale tracks with the :ref:`root_motion_track<class_AnimationMixer_property_root_motion_track>` as a :ref:`Vector3<class_Vector3>` that can be used elsewhere.
  414. 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:
  415. .. tabs::
  416. .. code-tab:: gdscript
  417. var prev_root_motion_scale_accumulator: Vector3
  418. func _process(delta):
  419. if Input.is_action_just_pressed("animate"):
  420. state_machine.travel("Animate")
  421. var current_root_motion_scale_accumulator: Vector3 = animation_tree.get_root_motion_scale_accumulator()
  422. var difference: Vector3 = current_root_motion_scale_accumulator - prev_root_motion_scale_accumulator
  423. prev_root_motion_scale_accumulator = current_root_motion_scale_accumulator
  424. transform.basis = transform.basis.scaled(difference)
  425. However, if the animation loops, an unintended discrete change may occur, so this is only useful for some simple use cases.
  426. .. rst-class:: classref-item-separator
  427. ----
  428. .. _class_AnimationMixer_method_has_animation:
  429. .. rst-class:: classref-method
  430. :ref:`bool<class_bool>` **has_animation** **(** :ref:`StringName<class_StringName>` name **)** |const|
  431. Returns ``true`` if the :ref:`AnimationPlayer<class_AnimationPlayer>` stores an :ref:`Animation<class_Animation>` with key ``name``.
  432. .. rst-class:: classref-item-separator
  433. ----
  434. .. _class_AnimationMixer_method_has_animation_library:
  435. .. rst-class:: classref-method
  436. :ref:`bool<class_bool>` **has_animation_library** **(** :ref:`StringName<class_StringName>` name **)** |const|
  437. Returns ``true`` if the :ref:`AnimationPlayer<class_AnimationPlayer>` stores an :ref:`AnimationLibrary<class_AnimationLibrary>` with key ``name``.
  438. .. rst-class:: classref-item-separator
  439. ----
  440. .. _class_AnimationMixer_method_remove_animation_library:
  441. .. rst-class:: classref-method
  442. void **remove_animation_library** **(** :ref:`StringName<class_StringName>` name **)**
  443. Removes the :ref:`AnimationLibrary<class_AnimationLibrary>` associated with the key ``name``.
  444. .. rst-class:: classref-item-separator
  445. ----
  446. .. _class_AnimationMixer_method_rename_animation_library:
  447. .. rst-class:: classref-method
  448. void **rename_animation_library** **(** :ref:`StringName<class_StringName>` name, :ref:`StringName<class_StringName>` newname **)**
  449. Moves the :ref:`AnimationLibrary<class_AnimationLibrary>` associated with the key ``name`` to the key ``newname``.
  450. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
  451. .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
  452. .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
  453. .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
  454. .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
  455. .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`
  456. .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)`