2018-07-26 11:56:21 +02:00
<?xml version="1.0" encoding="UTF-8" ?>
2022-02-14 14:18:53 +01:00
<class name= "AnimationTree" inherits= "Node" version= "4.0" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "../class.xsd" >
2018-07-26 11:56:21 +02:00
<brief_description >
2020-03-03 19:21:21 +01:00
A node to be used for advanced animation transitions in an [AnimationPlayer].
2018-07-26 11:56:21 +02:00
</brief_description>
<description >
2021-10-05 14:24:34 +02:00
A node to be used for advanced animation transitions in an [AnimationPlayer].
[b]Note:[/b] When linked with an [AnimationPlayer], several properties and methods of the corresponding [AnimationPlayer] will not function as expected. Playback and transitions should be handled using only the [AnimationTree] and its constituent [AnimationNode](s). The [AnimationPlayer] node should be used solely for adding, deleting, and editing animations.
2018-07-26 11:56:21 +02:00
</description>
<tutorials >
2021-11-15 10:43:07 +01:00
<link title= "Using AnimationTree" > $DOCS_URL/tutorials/animation/animation_tree.html</link>
2020-10-01 10:34:47 +02:00
<link title= "Third Person Shooter Demo" > https://godotengine.org/asset-library/asset/678</link>
2019-04-19 11:03:46 +02:00
</tutorials>
2018-07-26 11:56:21 +02:00
<methods >
2023-01-19 16:43:37 +01:00
<method name= "_post_process_key_value" qualifiers= "virtual const" >
<return type= "Variant" />
<param index= "0" name= "animation" type= "Animation" />
<param index= "1" name= "track" type= "int" />
<param index= "2" name= "value" type= "Variant" />
<param index= "3" name= "object" type= "Object" />
<param index= "4" name= "object_idx" type= "int" />
<description >
A virtual function for processing after key getting during playback.
</description>
</method>
2018-08-02 09:22:24 +02:00
<method name= "advance" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "delta" type= "float" />
2018-08-02 09:22:24 +02:00
<description >
2020-03-03 19:21:21 +01:00
Manually advance the animations by the specified time (in seconds).
2018-08-02 09:22:24 +02:00
</description>
</method>
2022-11-26 08:04:15 +01:00
<method name= "get_root_motion_position" qualifiers= "const" >
<return type= "Vector3" />
2018-07-26 11:56:21 +02:00
<description >
2022-11-26 08:04:15 +01:00
Retrieve the motion of position with the [member root_motion_track] as a [Vector3] that can be used elsewhere.
If [member root_motion_track] is not a path to a track of type [constant Animation.TYPE_POSITION_3D], returns [code]Vector3(0, 0, 0)[/code].
See also [member root_motion_track] and [RootMotionView].
The most basic example is applying position to [CharacterBody3D]:
[codeblocks]
[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()
[/gdscript]
[/codeblocks]
</description>
</method>
<method name= "get_root_motion_rotation" qualifiers= "const" >
<return type= "Quaternion" />
<description >
Retrieve the motion of rotation with the [member root_motion_track] as a [Quaternion] that can be used elsewhere.
If [member root_motion_track] is not a path to a track of type [constant Animation.TYPE_ROTATION_3D], returns [code]Quaternion(0, 0, 0, 1)[/code].
See also [member root_motion_track] and [RootMotionView].
The most basic example is applying rotation to [CharacterBody3D]:
[codeblocks]
[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())
[/gdscript]
[/codeblocks]
</description>
</method>
<method name= "get_root_motion_scale" qualifiers= "const" >
<return type= "Vector3" />
<description >
Retrieve the motion of scale with the [member root_motion_track] as a [Vector3] that can be used elsewhere.
If [member root_motion_track] is not a path to a track of type [constant Animation.TYPE_SCALE_3D], returns [code]Vector3(0, 0, 0)[/code].
See also [member root_motion_track] and [RootMotionView].
The most basic example is applying scale to [CharacterBody3D]:
[codeblocks]
[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)
[/gdscript]
[/codeblocks]
2018-07-26 11:56:21 +02:00
</description>
</method>
</methods>
<members >
2019-06-29 12:38:01 +02:00
<member name= "active" type= "bool" setter= "set_active" getter= "is_active" default= "false" >
2020-03-03 19:21:21 +01:00
If [code]true[/code], the [AnimationTree] will be processing.
2018-07-26 11:56:21 +02:00
</member>
2022-04-20 12:36:54 +02:00
<member name= "advance_expression_base_node" type= "NodePath" setter= "set_advance_expression_base_node" getter= "get_advance_expression_base_node" default= "NodePath(".")" >
2022-07-21 13:37:00 +02:00
The path to the [Node] used to evaluate the AnimationNode [Expression] if one is not explicitly specified internally.
2022-04-20 12:36:54 +02:00
</member>
2019-06-29 12:38:01 +02:00
<member name= "anim_player" type= "NodePath" setter= "set_animation_player" getter= "get_animation_player" default= "NodePath("")" >
2020-03-03 19:21:21 +01:00
The path to the [AnimationPlayer] used for animating.
2018-07-26 11:56:21 +02:00
</member>
2023-01-27 19:25:49 +01:00
<member name= "audio_max_polyphony" type= "int" setter= "set_audio_max_polyphony" getter= "get_audio_max_polyphony" default= "32" >
The number of possible simultaneous sounds for each of the assigned AudioStreamPlayers.
For example, if this value is [code]32[/code] and the animation has two audio tracks, the two [AudioStreamPlayer]s assigned can play simultaneously up to [code]32[/code] voices each.
</member>
2021-02-19 13:35:31 +01:00
<member name= "process_callback" type= "int" setter= "set_process_callback" getter= "get_process_callback" enum= "AnimationTree.AnimationProcessCallback" default= "1" >
2021-02-19 13:57:41 +01:00
The process mode of this [AnimationTree]. See [enum AnimationProcessCallback] for available modes.
2018-07-26 11:56:21 +02:00
</member>
2019-06-29 12:38:01 +02:00
<member name= "root_motion_track" type= "NodePath" setter= "set_root_motion_track" getter= "get_root_motion_track" default= "NodePath("")" >
2020-06-02 06:03:05 +02:00
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 [code]":"[/code]. For example, [code]"character/skeleton:ankle"[/code] or [code]"character/mesh:transform/local"[/code].
2023-01-21 12:25:29 +01:00
If the track has type [constant Animation.TYPE_POSITION_3D], [constant Animation.TYPE_ROTATION_3D] or [constant Animation.TYPE_SCALE_3D] the transformation will be canceled visually, and the animation will appear to stay in place. See also [method get_root_motion_position], [method get_root_motion_rotation], [method get_root_motion_scale] and [RootMotionView].
2018-07-26 11:56:21 +02:00
</member>
2019-07-15 20:42:47 +02:00
<member name= "tree_root" type= "AnimationNode" setter= "set_tree_root" getter= "get_tree_root" >
2020-03-03 19:21:21 +01:00
The root animation node of this [AnimationTree]. See [AnimationNode].
2018-07-26 11:56:21 +02:00
</member>
</members>
2022-09-01 16:00:55 +02:00
<signals >
2022-12-19 01:10:15 +01:00
<signal name= "animation_finished" >
<param index= "0" name= "anim_name" type= "StringName" />
<description >
Notifies when an animation finished playing.
[b]Note:[/b] 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.
</description>
</signal>
2022-09-01 16:00:55 +02:00
<signal name= "animation_player_changed" >
<description >
Emitted when the [member anim_player] is changed.
</description>
</signal>
2022-12-19 01:10:15 +01:00
<signal name= "animation_started" >
<param index= "0" name= "anim_name" type= "StringName" />
<description >
Notifies when an animation starts playing.
[b]Note:[/b] 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.
</description>
</signal>
2022-09-01 16:00:55 +02:00
</signals>
2018-07-26 11:56:21 +02:00
<constants >
2021-02-19 13:35:31 +01:00
<constant name= "ANIMATION_PROCESS_PHYSICS" value= "0" enum= "AnimationProcessCallback" >
2020-03-03 19:21:21 +01:00
The animations will progress during the physics frame (i.e. [method Node._physics_process]).
2018-07-26 11:56:21 +02:00
</constant>
2021-02-19 13:35:31 +01:00
<constant name= "ANIMATION_PROCESS_IDLE" value= "1" enum= "AnimationProcessCallback" >
2020-03-03 19:21:21 +01:00
The animations will progress during the idle frame (i.e. [method Node._process]).
2018-07-26 11:56:21 +02:00
</constant>
2021-02-19 13:35:31 +01:00
<constant name= "ANIMATION_PROCESS_MANUAL" value= "2" enum= "AnimationProcessCallback" >
2020-03-03 19:21:21 +01:00
The animations will only progress manually (see [method advance]).
2018-08-02 09:22:24 +02:00
</constant>
2018-07-26 11:56:21 +02:00
</constants>
</class>