diff --git a/Assets/VRM/Editor/Format/vrmAssetPostprocessor.cs b/Assets/VRM/Editor/Format/vrmAssetPostprocessor.cs index 29c2d3676..0ae4e0f24 100644 --- a/Assets/VRM/Editor/Format/vrmAssetPostprocessor.cs +++ b/Assets/VRM/Editor/Format/vrmAssetPostprocessor.cs @@ -45,18 +45,25 @@ namespace VRM throw new Exception(); } - var data = new GlbFileParser(vrmPath.FullPath).Parse(); - var vrm = new VRMData(data); - var prefabPath = vrmPath.Parent.Child(vrmPath.FileNameWithoutExtension + ".prefab"); + /// + /// これは EditorApplication.delayCall により呼び出される。 + /// + /// * delayCall には UnityEngine.Object 持ち越すことができない + /// * vrmPath のみを持ち越す + /// + /// + /// Action> onCompleted = texturePaths => { var map = texturePaths .Select(x => x.LoadAsset()) .ToDictionary(x => new SubAssetKey(x), x => x as UnityEngine.Object); - using (var context = new VRMImporterContext(vrm, externalObjectMap: map)) + // 確実に Dispose するために敢えて再パースしている + using (var data = new GlbFileParser(vrmPath.FullPath).Parse()) + using (var context = new VRMImporterContext(new VRMData(data), externalObjectMap: map)) { var editor = new VRMEditorImporterContext(context, prefabPath); foreach (var textureInfo in context.TextureDescriptorGenerator.Get().GetEnumerable()) @@ -69,7 +76,8 @@ namespace VRM }; // extract texture images - using (var context = new VRMImporterContext(vrm)) + using (var data = new GlbFileParser(vrmPath.FullPath).Parse()) + using (var context = new VRMImporterContext(new VRMData(data))) { var editor = new VRMEditorImporterContext(context, prefabPath); editor.ConvertAndExtractImages(onCompleted);