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
|
:maxdepth: 1
|
||||||
:name: toc-learn-features-animation
|
:name: toc-learn-features-animation
|
||||||
|
|
||||||
|
introduction_2d
|
||||||
cutout_animation
|
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
|
||||||
|
|
||||||