diff --git a/editor/js/Loader.js b/editor/js/Loader.js index 56bfe04906a324..a5cea2ce2e5a5b 100644 --- a/editor/js/Loader.js +++ b/editor/js/Loader.js @@ -858,6 +858,24 @@ function Loader( editor ) { 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 if ( zip[ 'model.obj' ] && zip[ 'materials.mtl' ] ) { @@ -865,9 +883,11 @@ function Loader( editor ) { const { MTLLoader } = await import( 'three/addons/loaders/MTLLoader.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' ] ) ); + editor.execute( new AddObjectCommand( editor, object ) ); + return; } @@ -877,24 +897,6 @@ function Loader( editor ) { 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(); switch ( extension ) {