Parcourir la source

Editor: Fixed assets lost when importing zipped OBJ/MTL (#28292)

* imports OBJ with textures

* set map.name to filename

* no filename needed in UITexture
ycw il y a 1 an
Parent
commit
885c2dbab5
1 fichiers modifiés avec 21 ajouts et 19 suppressions
  1. 21 19
      editor/js/Loader.js

+ 21 - 19
editor/js/Loader.js

@@ -858,6 +858,24 @@ function Loader( editor ) {
 
 
 		const zip = unzipSync( new Uint8Array( contents ) );
 		const zip = unzipSync( new Uint8Array( contents ) );
 
 
+		const manager = new THREE.LoadingManager();
+		manager.setURLModifier( function ( url ) {
+
+			const file = zip[ url ];
+
+			if ( file ) {
+
+				console.log( 'Loading', url );
+
+				const blob = new Blob( [ file.buffer ], { type: 'application/octet-stream' } );
+				return URL.createObjectURL( blob );
+
+			}
+
+			return url;
+
+		} );
+
 		// Poly
 		// Poly
 
 
 		if ( zip[ 'model.obj' ] && zip[ 'materials.mtl' ] ) {
 		if ( zip[ 'model.obj' ] && zip[ 'materials.mtl' ] ) {
@@ -865,9 +883,11 @@ function Loader( editor ) {
 			const { MTLLoader } = await import( 'three/addons/loaders/MTLLoader.js' );
 			const { MTLLoader } = await import( 'three/addons/loaders/MTLLoader.js' );
 			const { OBJLoader } = await import( 'three/addons/loaders/OBJLoader.js' );
 			const { OBJLoader } = await import( 'three/addons/loaders/OBJLoader.js' );
 
 
-			const materials = new MTLLoader().parse( strFromU8( zip[ 'materials.mtl' ] ) );
+			const materials = new MTLLoader( manager ).parse( strFromU8( zip[ 'materials.mtl' ] ) );
 			const object = new OBJLoader().setMaterials( materials ).parse( strFromU8( zip[ 'model.obj' ] ) );
 			const object = new OBJLoader().setMaterials( materials ).parse( strFromU8( zip[ 'model.obj' ] ) );
+
 			editor.execute( new AddObjectCommand( editor, object ) );
 			editor.execute( new AddObjectCommand( editor, object ) );
+			return;
 
 
 		}
 		}
 
 
@@ -877,24 +897,6 @@ function Loader( editor ) {
 
 
 			const file = zip[ path ];
 			const file = zip[ path ];
 
 
-			const manager = new THREE.LoadingManager();
-			manager.setURLModifier( function ( url ) {
-
-				const file = zip[ url ];
-
-				if ( file ) {
-
-					console.log( 'Loading', url );
-
-					const blob = new Blob( [ file.buffer ], { type: 'application/octet-stream' } );
-					return URL.createObjectURL( blob );
-
-				}
-
-				return url;
-
-			} );
-
 			const extension = path.split( '.' ).pop().toLowerCase();
 			const extension = path.split( '.' ).pop().toLowerCase();
 
 
 			switch ( extension ) {
 			switch ( extension ) {