Introduction to 2d animation added. #526
BIN
learning/features/animation/img/animation_add.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 11 KiB |
BIN
learning/features/animation/img/animation_add_keyframe.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
learning/features/animation/img/animation_add_sampleplayer2d.png
Normal file
|
After Width: | Height: | Size: 85 KiB |
BIN
learning/features/animation/img/animation_add_track.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
learning/features/animation/img/animation_animation_panel.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 48 KiB |
BIN
learning/features/animation/img/animation_call_func_keyframe.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 71 KiB |
BIN
learning/features/animation/img/animation_illustration.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 10 KiB |
BIN
learning/features/animation/img/animation_keyframes.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
learning/features/animation/img/animation_loop.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
BIN
learning/features/animation/img/animation_normal_track.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 41 KiB |
BIN
learning/features/animation/img/animation_set_length.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
learning/features/animation/img/animation_simple.gif
Normal file
|
After Width: | Height: | Size: 773 KiB |
BIN
learning/features/animation/img/animation_timeline.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
learning/features/animation/img/animation_track.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
BIN
learning/features/animation/img/animation_track_rate.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
learning/features/animation/img/animation_track_settings.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
@@ -5,4 +5,5 @@ Animation
|
||||
:maxdepth: 1
|
||||
:name: toc-learn-features-animation
|
||||
|
||||
introduction_2d
|
||||
cutout_animation
|
||||
|
||||
480
learning/features/animation/introduction_2d.rst
Normal file
@@ -0,0 +1,480 @@
|
||||
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
|
||||
|
||||