浏览代码

Use cycle and loop hint flags in glTF2.

K. S. Ernest (iFire) Lee 5 年之前
父节点
当前提交
0172a7f932
共有 2 个文件被更改,包括 10 次插入1 次删除
  1. 9 1
      editor/import/editor_scene_importer_gltf.cpp
  2. 1 0
      editor/import/editor_scene_importer_gltf.h

+ 9 - 1
editor/import/editor_scene_importer_gltf.cpp

@@ -2329,7 +2329,11 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) {
 		Array samplers = d["samplers"];
 
 		if (d.has("name")) {
-			animation.name = _sanitize_scene_name(d["name"]);
+			String name = d["name"];
+			if (name.begins_with("loop") || name.ends_with("loop") || name.begins_with("cycle") || name.ends_with("cycle")) {
+				animation.loop = true;
+			}
+			animation.name = _sanitize_scene_name(name);
 		}
 
 		for (int j = 0; j < channels.size(); j++) {
@@ -2735,6 +2739,10 @@ void EditorSceneImporterGLTF::_import_animation(GLTFState &state, AnimationPlaye
 	animation.instance();
 	animation->set_name(name);
 
+	if (anim.loop) {
+		animation->set_loop(true);
+	}
+
 	float length = 0;
 
 	for (Map<int, GLTFAnimation::Track>::Element *E = anim.tracks.front(); E; E = E->next()) {

+ 1 - 0
editor/import/editor_scene_importer_gltf.h

@@ -262,6 +262,7 @@ class EditorSceneImporterGLTF : public EditorSceneImporter {
 	};
 
 	struct GLTFAnimation {
+		bool loop = false;
 
 		enum Interpolation {
 			INTERP_LINEAR,