Repository: godotengine/godot
File: scene/animation/animation_mixer.cpp (C++)

Code before:
			Animation::TrackType track_cache_type = Animation::get_cache_type(track_src_type);

			TrackCache *track = nullptr;
			if (track_cache.has(thash)) {
				track = track_cache.get(thash);
			}

			// If not valid, delete track.
			if (track && (track->type != track_cache_type || ObjectDB::get_instance(track->object_id) == nullptr)) {
				playing_caches.erase(track);
				memdelete(track);
				track_cache.erase(thash);
				track = nullptr;
			}

			if (!track) {
				Ref<Resource> resource;
				Vector<StringName> leftover_path;
				Node *child = parent->get_node_and_resource(path, resource, leftover_path);

				if (!child) {
					ERR_PRINT("AnimationMixer: '" + String(E) + "', couldn't resolve track:  '" + String(path) + "'.");
					continue;
				}

				switch (track_src_type) {
					case Animation::TYPE_BEZIER:
					case Animation::TYPE_VALUE: {
						// If a value track without a key is cached first, the initial value cannot be determined.
						// It is a corner case, but which may cause problems with blending.
						ERR_CONTINUE_MSG(anim->track_get_key_count(i) == 0, "AnimationMixer: '" + String(E) + "', Value Track:  '" + String(path) + "' must have at least one key to cache for blending.");

						TrackCacheValue *track_value = memnew(TrackCacheValue);

						if (resource.is_valid()) {
							track_value->object_id = resource->get_instance_id();
						} else {
							track_value->object_id = child->get_instance_id();
						}

						if (track_src_type == Animation::TYPE_VALUE) {
							track_value->is_continuous = anim->value_track_get_update_mode(i) != Animation::UPDATE_DISCRETE;
							track_value->is_using_angle = anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_LINEAR_ANGLE || anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_CUBIC_ANGLE;
						} else {
							track_value->is_continuous = true;
							track_value->is_using_angle = false;
						}

						track_value->subpath = leftover_path;

						track = track_value;

Review comment (suggestion):
```suggestion
						WARN_PRINT("AnimationMixer: '" + String(E) + "', couldn't resolve track:  '" + String(path) + "'. This warning can be disabled in Project Settings.");
```
Less verbose. Though I'm not sure how important is the information you provided (I mean the "If there is no problem that the track value is not applied to the scene" part).

Code after:
		for (int i = 0; i < anim->get_track_count(); i++) {
			NodePath path = anim->track_get_path(i);
			Animation::TypeHash thash = anim->track_get_type_hash(i);
			Animation::TrackType track_src_type = anim->track_get_type(i);
			Animation::TrackType track_cache_type = Animation::get_cache_type(track_src_type);

			TrackCache *track = nullptr;
			if (track_cache.has(thash)) {
				track = track_cache.get(thash);
			}

			// If not valid, delete track.
			if (track && (track->type != track_cache_type || ObjectDB::get_instance(track->object_id) == nullptr)) {
				playing_caches.erase(track);
				memdelete(track);
				track_cache.erase(thash);
				track = nullptr;
			}

			if (!track) {
				Ref<Resource> resource;
				Vector<StringName> leftover_path;

				if (!parent->has_node_and_resource(path)) {
					if (check_path) {
						WARN_PRINT_ED(mixer_name + ": '" + String(E) + "', couldn't resolve track:  '" + String(path) + "'. This warning can be disabled in Project Settings.");
					}
					continue;
				}

				Node *child = parent->get_node_and_resource(path, resource, leftover_path);
				if (!child) {
					if (check_path) {
						WARN_PRINT_ED(mixer_name + ": '" + String(E) + "', couldn't resolve track:  '" + String(path) + "'. This warning can be disabled in Project Settings.");
					}
					continue;
				}

				switch (track_src_type) {
					case Animation::TYPE_BEZIER:
					case Animation::TYPE_VALUE: {
						// If a value track without a key is cached first, the initial value cannot be determined.
						// It is a corner case, but which may cause problems with blending.
						ERR_CONTINUE_MSG(anim->track_get_key_count(i) == 0, mixer_name + ": '" + String(E) + "', Value Track:  '" + String(path) + "' must have at least one key to cache for blending.");

						TrackCacheValue *track_value = memnew(TrackCacheValue);

						if (resource.is_valid()) {
							track_value->object_id = resource->get_instance_id();
						} else {
							track_value->object_id = child->get_instance_id();