mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-10-01 07:11:02 -05:00
Vrm10Data.TryParseOrMigrate の API 変更
* 関連する unittest で Dispose
This commit is contained in:
@@ -24,6 +24,7 @@ namespace UniVRM10
|
||||
RemapEditorVrm m_vrmEditor;
|
||||
|
||||
Vrm10Data m_result;
|
||||
MigrationData m_migration;
|
||||
|
||||
IEnumerable<SubAssetKey> EnumerateExpressinKeys(UniGLTF.Extensions.VRMC_vrm.Expressions expressions)
|
||||
{
|
||||
@@ -65,20 +66,23 @@ namespace UniVRM10
|
||||
|
||||
var importer = target as VrmScriptedImporter;
|
||||
m_importer = importer;
|
||||
if (!Vrm10Data.TryParseOrMigrate(m_importer.assetPath, importer.MigrateToVrm1, out m_result))
|
||||
using (Vrm10Data.ParseOrMigrate(m_importer.assetPath, importer.MigrateToVrm1, out m_result, out m_migration))
|
||||
{
|
||||
// error
|
||||
return;
|
||||
if (m_result == null)
|
||||
{
|
||||
// error
|
||||
return;
|
||||
}
|
||||
m_model = ModelReader.Read(m_result.Data);
|
||||
|
||||
var tmp = m_importer.GetExternalObjectMap();
|
||||
|
||||
var generator = new Vrm10MaterialDescriptorGenerator();
|
||||
var materialKeys = m_result.Data.GLTF.materials.Select((x, i) => generator.Get(m_result.Data, i).SubAssetKey);
|
||||
var textureKeys = new Vrm10TextureDescriptorGenerator(m_result.Data).Get().GetEnumerable().Select(x => x.SubAssetKey);
|
||||
m_materialEditor = new RemapEditorMaterial(materialKeys.Concat(textureKeys), GetEditorMap, SetEditorMap);
|
||||
m_vrmEditor = new RemapEditorVrm(new[] { VRM10Object.SubAssetKey }.Concat(EnumerateExpressinKeys(m_result.VrmExtension.Expressions)), GetEditorMap, SetEditorMap);
|
||||
}
|
||||
m_model = ModelReader.Read(m_result.Data);
|
||||
|
||||
var tmp = m_importer.GetExternalObjectMap();
|
||||
|
||||
var generator = new Vrm10MaterialDescriptorGenerator();
|
||||
var materialKeys = m_result.Data.GLTF.materials.Select((x, i) => generator.Get(m_result.Data, i).SubAssetKey);
|
||||
var textureKeys = new Vrm10TextureDescriptorGenerator(m_result.Data).Get().GetEnumerable().Select(x => x.SubAssetKey);
|
||||
m_materialEditor = new RemapEditorMaterial(materialKeys.Concat(textureKeys), GetEditorMap, SetEditorMap);
|
||||
m_vrmEditor = new RemapEditorVrm(new[] { VRM10Object.SubAssetKey }.Concat(EnumerateExpressinKeys(m_result.VrmExtension.Expressions)), GetEditorMap, SetEditorMap);
|
||||
}
|
||||
|
||||
enum Tabs
|
||||
@@ -98,51 +102,44 @@ namespace UniVRM10
|
||||
{
|
||||
case Tabs.Model:
|
||||
{
|
||||
switch (m_result.FileType)
|
||||
if (m_migration == null)
|
||||
{
|
||||
case Vrm10FileType.Vrm1:
|
||||
EditorGUILayout.HelpBox(m_migration.Message, MessageType.Info);
|
||||
|
||||
EditorGUILayout.HelpBox(m_result.Message, MessageType.Info);
|
||||
{
|
||||
serializedObject.Update();
|
||||
// normalize
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.HelpBox("Create normalized prefab", MessageType.Info);
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(VrmScriptedImporter.Normalize)));
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
{
|
||||
serializedObject.Update();
|
||||
// normalize
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.HelpBox("Create normalized prefab", MessageType.Info);
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(VrmScriptedImporter.Normalize)));
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
ApplyRevertGUI();
|
||||
break;
|
||||
|
||||
case Vrm10FileType.Vrm0:
|
||||
EditorGUILayout.HelpBox(m_result.Message, m_model != null ? MessageType.Info : MessageType.Warning);
|
||||
|
||||
if (VRMShaders.Symbols.VRM_DEVELOP)
|
||||
{
|
||||
if (GUILayout.Button("debug export"))
|
||||
{
|
||||
File.WriteAllBytes("tmp.vrm", m_result.MigratedBytes);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
serializedObject.Update();
|
||||
// migration
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(VrmScriptedImporter.MigrateToVrm1)));
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
ApplyRevertGUI();
|
||||
break;
|
||||
|
||||
default:
|
||||
ApplyRevertGUI();
|
||||
break;
|
||||
ApplyRevertGUI();
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorGUILayout.HelpBox(m_migration.Message, m_model != null ? MessageType.Info : MessageType.Warning);
|
||||
|
||||
if (VRMShaders.Symbols.VRM_DEVELOP)
|
||||
{
|
||||
if (GUILayout.Button("debug export"))
|
||||
{
|
||||
File.WriteAllBytes("tmp.vrm", m_migration.MigratedBytes);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
serializedObject.Update();
|
||||
// migration
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(VrmScriptedImporter.MigrateToVrm1)));
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
ApplyRevertGUI();
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case Tabs.Materials:
|
||||
if (m_result.Data != null && m_result.VrmExtension != null)
|
||||
|
||||
@@ -43,43 +43,46 @@ namespace UniVRM10
|
||||
Debug.Log("OnImportAsset to " + scriptedImporter.assetPath);
|
||||
#endif
|
||||
|
||||
if (!Vrm10Data.TryParseOrMigrate(scriptedImporter.assetPath, migrateToVrm1, out Vrm10Data result))
|
||||
using (var data = Vrm10Data.ParseOrMigrate(scriptedImporter.assetPath, migrateToVrm1, out Vrm10Data result, out MigrationData migration))
|
||||
{
|
||||
// fail to parse vrm1
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Import(create unity objects)
|
||||
//
|
||||
var extractedObjects = scriptedImporter.GetExternalObjectMap()
|
||||
.Where(kv => kv.Value != null)
|
||||
.ToDictionary(kv => new SubAssetKey(kv.Value.GetType(), kv.Key.name), kv => kv.Value);
|
||||
|
||||
var materialGenerator = GetMaterialDescriptorGenerator(renderPipeline);
|
||||
|
||||
using (var loader = new Vrm10Importer(result, extractedObjects,
|
||||
materialGenerator: materialGenerator,
|
||||
doNormalize: doNormalize))
|
||||
{
|
||||
// settings TextureImporters
|
||||
foreach (var textureInfo in loader.TextureDescriptorGenerator.Get().GetEnumerable())
|
||||
if (result == null)
|
||||
{
|
||||
VRMShaders.TextureImporterConfigurator.Configure(textureInfo, loader.TextureFactory.ExternalTextures);
|
||||
// fail to parse vrm1
|
||||
return;
|
||||
}
|
||||
|
||||
var loaded = loader.Load();
|
||||
loaded.ShowMeshes();
|
||||
//
|
||||
// Import(create unity objects)
|
||||
//
|
||||
var extractedObjects = scriptedImporter.GetExternalObjectMap()
|
||||
.Where(kv => kv.Value != null)
|
||||
.ToDictionary(kv => new SubAssetKey(kv.Value.GetType(), kv.Key.name), kv => kv.Value);
|
||||
|
||||
loaded.TransferOwnership((key, o) =>
|
||||
var materialGenerator = GetMaterialDescriptorGenerator(renderPipeline);
|
||||
|
||||
using (var loader = new Vrm10Importer(result, extractedObjects,
|
||||
materialGenerator: materialGenerator,
|
||||
doNormalize: doNormalize))
|
||||
{
|
||||
context.AddObjectToAsset(key.Name, o);
|
||||
});
|
||||
var root = loaded.Root;
|
||||
GameObject.DestroyImmediate(loaded);
|
||||
// settings TextureImporters
|
||||
foreach (var textureInfo in loader.TextureDescriptorGenerator.Get().GetEnumerable())
|
||||
{
|
||||
VRMShaders.TextureImporterConfigurator.Configure(textureInfo, loader.TextureFactory.ExternalTextures);
|
||||
}
|
||||
|
||||
context.AddObjectToAsset(root.name, root);
|
||||
context.SetMainObject(root);
|
||||
var loaded = loader.Load();
|
||||
loaded.ShowMeshes();
|
||||
|
||||
loaded.TransferOwnership((key, o) =>
|
||||
{
|
||||
context.AddObjectToAsset(key.Name, o);
|
||||
});
|
||||
var root = loaded.Root;
|
||||
GameObject.DestroyImmediate(loaded);
|
||||
|
||||
context.AddObjectToAsset(root.name, root);
|
||||
context.SetMainObject(root);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user