123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481 |
- Introduction to the 2D animation features
- =========================================
- Overview
- --------
- The :ref:`class_AnimationPlayer` node allows you to create anything
- from simple to complex animations.
- In this guide you learn to:
- - Work with the Animation Panel
- - Animate any property of any node
- - Create a simple animation
- - Call functions with the powerful Call Function Tracks
- In Godot you can animate anything you find in the Inspector. Animations
- are changes to properties over time. This means you can animate anything
- visual in nature: sprites, UI elements, particles, the visibility, and
- color of textures. But not only. You can also control gameplay related
- values and call any function.
- Create an AnimationPlayer node
- ------------------------------
- To use the animation tools we first have to create an
- :ref:`class_AnimationPlayer` node.
- The AnimationPlayer node type is the data container for your animations.
- One AnimationPlayer node can hold multiple animations, that can
- automatically transition to one another.
- .. figure:: img/animation_create_animationplayer.png
- :alt: The AnimationPlayer node
- The AnimationPlayer node
- Click on the AnimationPlayer node in the Node tab to open the Animation
- Panel at the bottom of the viewport.
- .. figure:: img/animation_animation_panel.png
- :alt: The animation panel position
- The animation panel position
- It consists of five parts:
- .. figure:: img/animation_animation_panel_overview.png
- :alt: The animation panel
- The animation panel
- - Animation controls (i.e. add, load, save, and delete animations)
- - The tracks listing
- - The timeline with keyframes
- - The track modifiers and keyframe editor (when enabled)
- - The timeline and track controls, where you can zoom the timeline and
- edit tracks for example.
- See the `animation panel reference <#animation-panel-reference>`__ below
- for details.
- Computer animation relies on keyframes
- --------------------------------------
- On the computer animations rely on keyframes. A keyframe defines the
- value of a property at a certain point in time.
- White and blue diamond shapes represent keyframes in the timeline.
- .. figure:: img/animation_keyframes.png
- :alt: Keyframes in Godot
- Keyframes in Godot
- The engine interpolates values between keyframes, resulting in a gradual
- change in values over time.
- .. figure:: img/animation_illustration.png
- :alt: Two keyframes are all it takes to obtain a smooth motion
- Two keyframes are all it takes to obtain a smooth motion
- The timeline lets you insert keyframes and change their timing. It also
- defines how long the animation is.
- .. figure:: img/animation_timeline.png
- :alt: The timeline in the animation panel
- The timeline in the animation panel
- Each line of the Animation Panel is an animation track. Normal and
- Transform tracks reference node properties. Their name or id is a path
- to the node.
- .. figure:: img/animation_normal_track.png
- :alt: Example of Normal animation tracks
- Example of Normal animation tracks
- .. tip::
- If you animate the wrong property, you can edit a track's path anytime.
- Double click on it and type the new path. Play the animation using the
- "Play from beginning" button |Play from beginning| (Default shortcut:
- Shift+D) to see the changes instantly.
- Tutorial: Creating a simple animation
- -------------------------------------
- Scene setup
- ~~~~~~~~~~~
- For this tutorial, we'll going to create an AnimationPlayer node and a
- sprite node as a AnimationPlayer node child.
- .. figure:: img/animation_animation_player_tree.png
- :alt: Our scene setup
- Our scene setup
- The sprite holds an image texture and we animate that sprite to move
- between two points on the screen. As a starting point, move the sprite
- to a left position on the screen.
- .. tip::
- Adding animated nodes as children to the AnimationPlayer node is not
- required, but it is a nice way of distinguishing animated nodes from
- non-animated nodes in the Scene Tree.
- Select the AnimationPlayer node and click on "Add animation" (|Add
- Animation|) in the animation tab to add a new animation.
- Enter a name for the animation in the dialog box.
- .. figure:: img/animation_create_new_animation.png
- :alt: Add a new animation
- Add a new animation
- Adding a track
- ~~~~~~~~~~~~~~
- To add a new track for our sprite, select it and take a look in the
- toolbar:
- .. figure:: img/animation_convenience_buttons.png
- :alt: Convenience buttons
- Convenience buttons
- These switches and buttons allow you to add keyframes for the selected
- node's location, rotation, and scale respectively.
- Deselect rotation, because we are only interested in the location of our
- sprite for this tutorial and click on the key button.
- As we don't have a track already set up for the transform/location
- property, Godot asks, wether it should set it up for us. Click on
- "Create".
- This creates a new track and our very first keyframe at the beginning of
- the timeline:
- .. figure:: img/animation_track.png
- :alt: The sprite track
- The sprite track
- The track name consists of a Node Path, followed by a colon, followed by
- a reference to its property, that we would like to modify.
- In our example, the path is ``AnimationPlayer/Sprite`` and the property
- is ``transform/pos``.
- The path always starts at the AnimationPlayer node's parent (so paths
- always have to include the AnimationPlayer node itself).
- .. note::
- Don't worry if you change the names of nodes in the Scene Tree, that you
- already have tracks for. Godot automatically updates the paths in the
- tracks.
- The second keyframe
- ~~~~~~~~~~~~~~~~~~~
- Now we need to set the destination where our sprite should be headed and
- how much time it takes to get there.
- Let's say, we want it to take 2 seconds to go to the other point. By
- default the animation is set to last only 1 second, so change this in
- the timeline controls animation panel's lower panel to 2.
- .. figure:: img/animation_set_length.png
- :alt: Animation length
- Animation length
- Click on the timeline header near the 2 second mark and move the sprite
- to the target destination on the right side.
- Again, click the key button in the toolbar. This creates our second
- keyframe.
- Run the animation
- ~~~~~~~~~~~~~~~~~
- Click on the "Play from beginning" (|Play from beginning|) button.
- Yay! Our animation runs:
- .. figure:: img/animation_simple.gif
- :alt: The animation
- The animation
- Back and forth
- ~~~~~~~~~~~~~~
- As you can see, the "loop" button is enabled by default and our
- animation loops. Godot has an additional feature here. Like said before,
- Godot always calculates the frames between two keyframes. In a loop, the
- first keyframe is also the last keyframe, if no keyframe is specified at
- the end.
- .. figure:: img/animation_loop.png
- :alt: Animation loop
- Animation loop
- If you set the animation length to 4 seconds now, the animation moves
- back and forth.
- Track settings
- ~~~~~~~~~~~~~~
- Each track has a settings panel at the end, where you can set the update
- rate and the track interpolation.
- .. figure:: img/animation_track_settings.png
- :alt: Track settings
- Track settings
- The update rate of a track tells Godot when to update the property
- values. This can be:
- - Continuous: Update the property on each frame
- - Discrete: Only update the property on keyframes
- - Trigger: Only update the property on keyframes or triggers
- .. figure:: img/animation_track_rate.png
- :alt: Track rate
- Track rate
- In normal animations, you usually use "Continuous". The other types are
- used to script complex animations.
- The interpolation tells Godot how to calculate the frame values between
- the keyframes. These interpolation modes are supported:
- - Nearest: Set the nearest keyframe value
- - Linear: Set the value based on a linear function calculation between
- the two keyframes
- - Cubic: Set the value based on a curved function calculation between
- the two keyframes
- .. figure:: img/animation_track_interpolation.png
- :alt: Track interpolation
- Track interpolation
- Cubic interpolation leads to a more natural movement, where the
- animation is slower at a keyframe and faster between keyframes. This is
- usually used for character animation. Linear interpolation creates more
- of a robotic movement.
- Keyframes for other properties
- ------------------------------
- Godot doesn't restrict to only edit transform properties. Every property
- can be used as a track where you can set keyframes.
- If you select your sprite while the animation panel is visible, you get
- a small keyframe button for all of the sprite's properties. Click on
- this button and Godot automatically adds a track and keyframe to the
- current animation.
- .. figure:: img/animation_properties_keyframe.png
- :alt: Keyframes for other properties
- Keyframes for other properties
- Edit keyframes
- --------------
- For advanced use and to edit keyframe in detail, enable the keyframe
- editor (|Keyframe editor|).
- This adds an editor pane on the right side of the track settings. When
- you select a keyframe, you can directly edit its values in this editor:
- .. figure:: img/animation_keyframe_editor_key.png
- :alt: Keyframe editor editing a key
- Keyframe editor editing a key
- Additionally, you can also edit the transition value for this keyframe:
- .. figure:: img/animation_keyframe_editor_transition.png
- :alt: Keyframe editor editing a transition
- Keyframe editor editing a transition
- This tells Godot, how to change the property values when it reaches this
- keyframe.
- You usually tweak your animations this way, when the movement doesn't
- "look right".
- Advanced: Call Func tracks
- --------------------------
- Godot's animation engine doesn't stop here. If you're already
- comfortable with Godot's scripting language GDScript and API you know
- that each node type is a class and has a bunch of callable functions.
- For example, the :ref:`class_SamplePlayer2D` node type has a function
- to play a sample.
- Wouldn't it be great to play a sample at a specific keyframe in an
- animation? This is where "Call Func Tracks" come in handy. These tracks
- reference a node again, this time without a reference to a property.
- Instead a keyframe holds the name and arguments of a function, that
- Godot should call when reaching this keyframe.
- To let Godot play a sample when it reaches a keyframe, follow this list:
- Add a SamplePlayer2D to the Scene Tree and add a sample library and a
- sample to it.
- .. figure:: img/animation_add_sampleplayer2d.png
- :alt: Add SamplePlayer2D
- Add SamplePlayer2D
- Click on "Add track" (|Add track|) on the animation panel's track
- controls.
- Select "Add Call Func Track" from the list of possible track types.
- .. figure:: img/animation_add_call_func_track.png
- :alt: Add Call Func Track
- Add Call Func Track
- Select the SamplePlayer2D node in the selection window. Godot adds the
- track with the reference to the node.
- .. figure:: img/animation_select_sampleplayer2d.png
- :alt: Select SamplePlayer2D
- Select SamplePlayer2D
- Select the timeline position, where Godot should play the sample by
- clicking on the timeline header.
- Enable the Keyframe Editor by clicking on |Keyframe editor|.
- Click on "Add keyframe" near the settings of our func track (|Add
- keyframe|) and select the keyframe.
- .. figure:: img/animation_call_func_add_keyframe.png
- :alt: Add a keyframe to the call func track
- Add a keyframe to the call func track
- Enter "play" as the function name and set the argument counter to 1.
- Select "String" as the first argument type and use the sample name as
- the argument value.
- .. figure:: img/animation_call_func_keyframe.png
- :alt: Keyframe settings of a call func track
- Keyframe settings of a call func track
- When Godot reaches the keyframe, Godot calls the SamplePlayer2D node's
- "play" function with the sample name.
- References
- ----------
- Animation panel reference
- ~~~~~~~~~~~~~~~~~~~~~~~~~
- .. figure:: img/animation_animation_panel_reference.png
- :alt: The animation panel reference
- The animation panel reference
- The animation panel has the following parts (from left to right):
- Animation controls
- ^^^^^^^^^^^^^^^^^^
- .. figure:: img/animation_reference_animation_controls.png
- :alt: Animation controls
- Animation controls
- - Play animation backwards from current position
- - Play animation backwards from the animation end
- - Stop animation
- - Play animation forwards from the animation beginning
- - Play animation forwards from the current position
- - Direct time selection
- Animation management
- ^^^^^^^^^^^^^^^^^^^^
- .. figure:: img/animation_reference_animation_management.png
- :alt: Animation management
- Animation management
- - Create a new animation
- - Load animation
- - Save animation
- - Duplicate animation
- - Rename animation
- - Delete animation
- - Animation selection
- - Automatically play selected animation
- - Edit animation blend times
- - Extended animation Tools
- Timeline zoom level control
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- .. figure:: img/animation_reference_timeline_zoom_level.png
- :alt: Timeline zoom level contro
- Timeline zoom level contro
- Timeline control
- ^^^^^^^^^^^^^^^^
- .. figure:: img/animation_reference_timeline_controls.png
- :alt: Timeline control
- Timeline control
- - Length of animation
- - Steps of animation
- - Toggle loop animation
- Track control
- ^^^^^^^^^^^^^
- .. figure:: img/animation_reference_track_control.png
- :alt: Track control
- Track control
- - Add track
- - Move track up
- - Move track down
- - Delete track
- - Extended track tools
- - Toggle keyframe editor
- .. |Play from beginning| image:: img/animation_play_from_beginning.png
- .. |Add Animation| image:: img/animation_add.png
- .. |Keyframe editor| image:: img/animation_keyframe_editor_toggle.png
- .. |Add track| image:: img/animation_add_track.png
- .. |Add keyframe| image:: img/animation_add_keyframe.png
|