### Godot version

4.0 RC1

### System information

Any

### Issue description

RootMotionView does not process rotations correctly. 

This problem was pointed out in #58061 and #66510 in the past, but was closed with some fixes and a recommendation to solve it by keeping the current rotation on the script side.

However, for RootMotionView, that work around is not available since it cannot detect the firing of the animation and therefore the current rotation cannot be retained.

As a result, if a moving to forward animation is played after a rotation animation, the moving direction will be strange.

https://user-images.githubusercontent.com/61938263/217674951-16148b54-2667-4506-a5df-644d4ad64e5d.mp4


### Steps to reproduce

A moving to forward animation is played after a rotation animation.

### Minimal reproduction project

[rootrot2.zip](https://github.com/godotengine/godot/files/10690681/rootrot2.zip)

uint64_t last_pass = 0;
	};
	Vector<real_t> blends;
	State *state = nullptr;
	double _pre_process(const StringName &p_base_path, AnimationNode *p_parent, State *p_state, double p_time, bool p_seek, bool p_is_external_seeking, const Vector<StringName> &p_connections);
	
	StringName base_path;
	Vector<StringName> connections;
	AnimationNode *parent = nullptr;
	HashMap<NodePath, bool> filter;
	bool filter_enabled = false;
	Array _get_filters() const;
	void _set_filters(const Array &p_filters);
	friend class AnimationNodeBlendTree;
	double _blend_node(const StringName &p_subpath, const Vector<StringName> &p_connections, AnimationNode *p_new_parent, Ref<AnimationNode> p_node, double p_time, bool p_seek, bool p_is_external_seeking, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_sync = true, real_t *r_max = nullptr);
protected:
	void blend_animation(const StringName &p_animation, double p_time, double p_delta, bool p_seeked, bool p_is_external_seeking, real_t p_blend, Animation::LoopedFlag p_looped_flag = Animation::LOOPED_FLAG_NONE);
	double blend_node(const StringName &p_sub_path, Ref<AnimationNode> p_node, double p_time, bool p_seek, bool p_is_external_seeking, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_sync = true);
	double blend_input(int p_input, double p_time, bool p_seek, bool p_is_external_seeking, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_sync = true);
	void make_invalid(const String &p_reason);
	AnimationTree *get_animation_tree() const;
	static void _bind_methods();
	void _validate_property(PropertyInfo &p_property) const;
	GDVIRTUAL0RC(Dictionary, _get_child_nodes)
	GDVIRTUAL0RC(Array, _get_parameter_list)
	GDVIRTUAL1RC(Ref<AnimationNode>, _get_child_by_name, StringName)
	GDVIRTUAL1RC(Variant, _get_parameter_default_value, StringName)
	GDVIRTUAL1RC(bool, _is_parameter_read_only, StringName)
	GDVIRTUAL3RC(double, _process, double, bool, bool)
	GDVIRTUAL0RC(String, _get_caption)