瀏覽代碼

Fixed value track blend animation without RESET

Silc 'Tokage' Renew 3 年之前
父節點
當前提交
0fe723a1ac
共有 1 個文件被更改,包括 5 次插入3 次删除
  1. 5 3
      scene/animation/animation_tree.cpp

+ 5 - 3
scene/animation/animation_tree.cpp

@@ -623,11 +623,13 @@ bool AnimationTree::_update_caches(AnimationPlayer *player) {
 						track_xform->skeleton = nullptr;
 						track_xform->skeleton = nullptr;
 						track_xform->bone_idx = -1;
 						track_xform->bone_idx = -1;
 
 
+						bool has_rest = false;
 						if (path.get_subname_count() == 1 && Object::cast_to<Skeleton3D>(node_3d)) {
 						if (path.get_subname_count() == 1 && Object::cast_to<Skeleton3D>(node_3d)) {
 							Skeleton3D *sk = Object::cast_to<Skeleton3D>(node_3d);
 							Skeleton3D *sk = Object::cast_to<Skeleton3D>(node_3d);
 							track_xform->skeleton = sk;
 							track_xform->skeleton = sk;
 							int bone_idx = sk->find_bone(path.get_subname(0));
 							int bone_idx = sk->find_bone(path.get_subname(0));
 							if (bone_idx != -1) {
 							if (bone_idx != -1) {
+								has_rest = true;
 								track_xform->bone_idx = bone_idx;
 								track_xform->bone_idx = bone_idx;
 								Transform3D rest = sk->get_bone_rest(bone_idx);
 								Transform3D rest = sk->get_bone_rest(bone_idx);
 								track_xform->init_loc = rest.origin;
 								track_xform->init_loc = rest.origin;
@@ -656,7 +658,8 @@ bool AnimationTree::_update_caches(AnimationPlayer *player) {
 							}
 							}
 						}
 						}
 
 
-						if (has_reset_anim) {
+						// For non Skeleton3D bone animation.
+						if (has_reset_anim && !has_rest) {
 							int rt = reset_anim->find_track(path, track_type);
 							int rt = reset_anim->find_track(path, track_type);
 							if (rt >= 0 && reset_anim->track_get_key_count(rt) > 0) {
 							if (rt >= 0 && reset_anim->track_get_key_count(rt) > 0) {
 								switch (track_type) {
 								switch (track_type) {
@@ -1321,9 +1324,8 @@ void AnimationTree::_process_graph(double p_delta) {
 								if (!t->init_value) {
 								if (!t->init_value) {
 									t->init_value = value;
 									t->init_value = value;
 									t->init_value.zero();
 									t->init_value.zero();
-								} else {
-									t->value = t->init_value;
 								}
 								}
+								t->value = t->init_value;
 							}
 							}
 
 
 							Variant::sub(value, t->init_value, value);
 							Variant::sub(value, t->init_value, value);