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();