Ejemplo n.º 1
0
        public override void OnEnable()
        {
            base.OnEnable();

            m_importer = target as VrmScriptedImporter;
            m_parser   = VrmScriptedImporterImpl.Parse(m_importer.assetPath, m_importer.MigrateToVrm1);
            if (m_parser == null)
            {
                return;
            }
            if (!UniGLTF.Extensions.VRMC_vrm.GltfDeserializer.TryGet(m_parser.GLTF.extensions, out m_vrm))
            {
                return;
            }
            m_model = VrmLoader.CreateVrmModel(m_parser);
        }
        public override void OnEnable()
        {
            base.OnEnable();

            m_importer = target as VrmScriptedImporter;
            m_message  = VrmScriptedImporterImpl.TryParseOrMigrate(m_importer.assetPath, m_importer.MigrateToVrm1, out m_parser);
            if (string.IsNullOrEmpty(m_message))
            {
                // ok
                return;
            }
            if (!UniGLTF.Extensions.VRMC_vrm.GltfDeserializer.TryGet(m_parser.GLTF.extensions, out m_vrm))
            {
                return;
            }
            m_model = VrmLoader.CreateVrmModel(m_parser);
        }
Ejemplo n.º 3
0
        public override void OnImportAsset(AssetImportContext ctx)
        {
            Debug.Log("OnImportAsset to " + ctx.assetPath);

            try
            {
                // Create Vrm Model
                VrmLib.Model model = VrmLoader.CreateVrmModel(ctx.assetPath);
                if (model == null)
                {
                    // maybe VRM-0.X
                    return;
                }
                Debug.Log($"VrmLoader.CreateVrmModel: {model}");

                // Build Unity Model
                var assets = EditorUnityBuilder.ToUnityAsset(model, assetPath, this);
                ComponentBuilder.Build10(model, assets);

                // Texture
                var externalTextures = this.GetExternalUnityObjects <UnityEngine.Texture2D>();
                foreach (var texture in assets.Textures)
                {
                    if (texture == null)
                    {
                        continue;
                    }

                    if (externalTextures.ContainsValue(texture))
                    {
                    }
                    else
                    {
                        ctx.AddObjectToAsset(texture.name, texture);
                    }
                }

                // Material
                var externalMaterials = this.GetExternalUnityObjects <UnityEngine.Material>();
                foreach (var material in assets.Materials)
                {
                    if (material == null)
                    {
                        continue;
                    }

                    if (externalMaterials.ContainsValue(material))
                    {
                    }
                    else
                    {
                        ctx.AddObjectToAsset(material.name, material);
                    }
                }

                // Mesh
                foreach (var mesh in assets.Meshes)
                {
                    ctx.AddObjectToAsset(mesh.name, mesh);
                }

                //// ScriptableObject
                // avatar
                ctx.AddObjectToAsset("avatar", assets.HumanoidAvatar);

                // meta
                {
                    var external = this.GetExternalUnityObjects <UniVRM10.VRM10MetaObject>().FirstOrDefault();
                    if (external.Value != null)
                    {
                        var controller = assets.Root.GetComponent <VRM10Controller>();
                        if (controller != null)
                        {
                            controller.Meta = external.Value;
                        }
                    }
                    else
                    {
                        var meta = assets.ScriptableObjects
                                   .FirstOrDefault(x => x.GetType() == typeof(UniVRM10.VRM10MetaObject)) as UniVRM10.VRM10MetaObject;
                        if (meta != null)
                        {
                            meta.name = "meta";
                            ctx.AddObjectToAsset(meta.name, meta);
                        }
                    }
                }

                // expression
                {
                    var external = this.GetExternalUnityObjects <UniVRM10.VRM10Expression>();
                    if (external.Any())
                    {
                    }
                    else
                    {
                        var expression = assets.ScriptableObjects
                                         .Where(x => x.GetType() == typeof(UniVRM10.VRM10Expression))
                                         .Select(x => x as UniVRM10.VRM10Expression);
                        foreach (var clip in expression)
                        {
                            clip.name = clip.ExpressionName;
                            ctx.AddObjectToAsset(clip.ExpressionName, clip);
                        }
                    }
                }
                {
                    var external = this.GetExternalUnityObjects <UniVRM10.VRM10ExpressionAvatar>().FirstOrDefault();
                    if (external.Value != null)
                    {
                        var controller = assets.Root.GetComponent <VRM10Controller>();
                        if (controller != null)
                        {
                            controller.Expression.ExpressionAvatar = external.Value;
                        }
                    }
                    else
                    {
                        var expressionAvatar = assets.ScriptableObjects
                                               .FirstOrDefault(x => x.GetType() == typeof(UniVRM10.VRM10ExpressionAvatar)) as UniVRM10.VRM10ExpressionAvatar;
                        if (expressionAvatar != null)
                        {
                            expressionAvatar.name = "expressionAvatar";
                            ctx.AddObjectToAsset(expressionAvatar.name, expressionAvatar);
                        }
                    }
                }

                // Root
                ctx.AddObjectToAsset(assets.Root.name, assets.Root);
                ctx.SetMainObject(assets.Root);
            }
            catch (System.Exception ex)
            {
                Debug.LogError(ex);
            }
        }
Ejemplo n.º 4
0
 public void ExtractMaterialsAndTextures()
 {
     this.ExtractTextures(TextureDirName, (path) => { return(VrmLoader.CreateVrmModel(path)); }, () => { this.ExtractAssets <UnityEngine.Material>(MaterialDirName, ".mat"); });
     AssetDatabase.ImportAsset(assetPath, ImportAssetOptions.ForceUpdate);
 }
Ejemplo n.º 5
0
 public void ExtractTextures()
 {
     this.ExtractTextures(TextureDirName, (path) => { return(VrmLoader.CreateVrmModel(path)); });
     AssetDatabase.ImportAsset(assetPath, ImportAssetOptions.ForceUpdate);
 }