diff --git a/doc/classes/EditorSettings.xml b/doc/classes/EditorSettings.xml
index 47034b62cd..ed9161dfae 100644
--- a/doc/classes/EditorSettings.xml
+++ b/doc/classes/EditorSettings.xml
@@ -522,6 +522,10 @@
If [code]true[/code], display a confirmation dialog when adding a new track to an animation by pressing the "key" icon next to a property. Holding Shift will bypass the dialog.
If [code]false[/code], the behavior is reversed, i.e. the dialog only appears when Shift is held.
+
+ Default step used when creating a new [Animation] in the Animation bottom panel. Only affects the first animation created in the [AnimationPlayer]. By default, other newly created animations will use the step from the previous ones.
+ This value is always expressed in seconds. If you want e.g. [code]10[/code] FPS to be the default, you need to set the default step to [code]0.1[/code].
+
If [code]true[/code], create a Bezier track instead of a standard track when pressing the "key" icon next to a property. Bezier tracks provide more control over animation curves, but are more difficult to adjust quickly.
diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp
index db1d90cccc..123987411d 100644
--- a/editor/editor_settings.cpp
+++ b/editor/editor_settings.cpp
@@ -55,6 +55,7 @@
#include "scene/main/node.h"
#include "scene/main/scene_tree.h"
#include "scene/main/window.h"
+#include "scene/resources/animation.h"
// PRIVATE METHODS
@@ -918,6 +919,7 @@ void EditorSettings::_load_defaults(Ref p_extra_config) {
EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/polygon_editor/auto_bake_delay", 1.5, "-1.0,10.0,0.01");
// Animation
+ EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/animation/default_animation_step", Animation::DEFAULT_STEP, "0.0,10.0,0.00000001");
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "editors/animation/default_fps_mode", 0, "Seconds,FPS");
_initial_set("editors/animation/default_fps_compatibility", true);
_initial_set("editors/animation/autorename_animation_tracks", true);
diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp
index a5aa71fce3..15eb7b0ac7 100644
--- a/editor/plugins/animation_player_editor_plugin.cpp
+++ b/editor/plugins/animation_player_editor_plugin.cpp
@@ -655,6 +655,8 @@ void AnimationPlayerEditor::_animation_name_edited() {
if (current_anim.is_valid()) {
new_anim->set_step(current_anim->get_step());
}
+ } else {
+ new_anim->set_step(EDITOR_GET("editors/animation/default_animation_step"));
}
String library_name;
diff --git a/scene/resources/animation.h b/scene/resources/animation.h
index b23f851e69..58fa223ade 100644
--- a/scene/resources/animation.h
+++ b/scene/resources/animation.h
@@ -43,6 +43,7 @@ public:
typedef uint32_t TypeHash;
static inline String PARAMETERS_BASE_PATH = "parameters/";
+ static inline constexpr real_t DEFAULT_STEP = 1.0 / 30;
enum TrackType : uint8_t {
TYPE_VALUE, // Set a value in a property, can be interpolated.
@@ -280,7 +281,7 @@ private:
_FORCE_INLINE_ void _track_get_key_indices_in_range(const Vector &p_array, double from_time, double to_time, List *p_indices, bool p_is_backward) const;
double length = 1.0;
- real_t step = 1.0 / 30;
+ real_t step = DEFAULT_STEP;
LoopMode loop_mode = LOOP_NONE;
bool capture_included = false;
void _check_capture_included();