private void OnPostprocessSprites(Texture2D _, Sprite[] sprites)
        {
            TextureImporter         textureImporter         = assetImporter as TextureImporter;
            TextureImporterSettings textureImporterSettings = new TextureImporterSettings();

            textureImporter.ReadTextureSettings(textureImporterSettings);

            //override mesh
            foreach (var sprite in sprites)
            {
                SpriteProcessor spriteProcessor = new SpriteProcessor(sprite, assetPath);
                spriteProcessor.OverrideGeometry();
            }

            //auto rename
            if (SpriteAssistSettings.Settings.enableRenameMeshPrefabAutomatically)
            {
                EditorApplication.delayCall += () =>
                {
                    Sprite           sprite     = AssetDatabase.LoadAssetAtPath <Sprite>(assetPath);
                    SpriteImportData importData = new SpriteImportData(sprite, assetPath);

                    if (importData.HasMeshPrefab)
                    {
                        PrefabUtil.TryRename(importData.assetPath, importData.MeshPrefab);
                    }
                };
            }
        }
        public SpriteProcessor(Sprite sprite, string assetPath)
        {
            _importData       = new SpriteImportData(sprite, assetPath);
            _originalUserData = _importData.textureImporter.userData;
            _configData       = SpriteConfigData.GetData(_originalUserData);
            _meshCreator      = MeshCreatorBase.GetInstnace(_configData);
            _preview          = new SpritePreview(_meshCreator.GetMeshWireframes());

            Undo.undoRedoPerformed += UndoReimport;
        }
 private void UpdateSubAssetsInMeshPrefab(SpriteImportData importData)
 {
     if (importData.HasMeshPrefab)
     {
         TextureInfo textureInfo = new TextureInfo(importData.sprite, importData.assetPath);
         PrefabUtil.CleanUpSubAssets(importData.MeshPrefab);
         _meshCreator.UpdateExternalObject(importData.MeshPrefab, importData.sprite, importData.dummySprite, textureInfo, _configData);
         importData.RemapExternalObject(importData.MeshPrefab);
     }
 }
 private void Resize()
 {
     foreach (var selectedTarget in _targets)
     {
         if (SpriteImportData.TryGetSpriteImportData(selectedTarget, out var importData))
         {
             SpriteUtil.AddAlphaArea(importData.dummySprite, importData.assetPath);
         }
     }
 }
 private void SetMeshPrefabContainer(SpriteImportData importData, bool hasMeshPrefab)
 {
     if (hasMeshPrefab)
     {
         importData.RemoveExternalPrefab();
     }
     else
     {
         importData.RemoveExternalPrefab();
         TextureInfo textureInfo = new TextureInfo(importData.sprite, importData.assetPath);
         GameObject  prefab      = _meshCreator.CreateExternalObject(importData.sprite, textureInfo, _configData);
         importData.SetPrefabAsExternalObject(prefab);
     }
 }
        private void Apply(bool withMeshPrefabProcess = false, bool hasMeshPrefab = false, bool withCopyFromSprite = false)
        {
            if (_targets == null)
            {
                return;
            }

            Undo.RegisterCompleteObjectUndo(_targets, "SpriteAssist Texture");

            _originalUserData = JsonUtility.ToJson(_configData);

            foreach (var selectedTarget in _targets)
            {
                if (SpriteImportData.TryGetSpriteImportData(selectedTarget, out var importData))
                {
                    importData.textureImporter.userData = _originalUserData;

                    if (withMeshPrefabProcess)
                    {
                        SetMeshPrefabContainer(importData, hasMeshPrefab);
                    }

                    UpdateSubAssetsInMeshPrefab(importData);

                    if (withCopyFromSprite)
                    {
                        Sprite rootSprite = AssetDatabase.LoadAllAssetsAtPath(importData.assetPath).FirstOrDefault(obj => obj is Sprite) as Sprite;

                        if (rootSprite != null)
                        {
                            importData.textureImporter.spritePixelsPerUnit = rootSprite.pixelsPerUnit;
                            importData.textureImporter.spritePivot         = rootSprite.GetNormalizedPivot();
                        }
                    }

                    EditorUtility.SetDirty(importData.textureImporter);
                    AssetDatabase.WriteImportSettingsIfDirty(importData.textureImporter.assetPath);
                    importData.textureImporter.SaveAndReimport();
                }
            }

            AssetDatabase.SaveAssets();

            _isDataChanged = false;
        }
Example #7
0
        public static void SwapRendererSpriteToMeshInHierarchy(Object target, bool isRoot = false)
        {
            if (PrefabUtil.TryGetMutableInstanceInHierarchy(target, out GameObject gameObject) &&
                PrefabUtil.TryGetSpriteRendererWithSprite(gameObject, out SpriteRenderer spriteRenderer) &&
                PrefabUtil.TryGetInternalAssetPath(spriteRenderer.sprite.texture, out string texturePath))
            {
                SpriteImportData import = new SpriteImportData(spriteRenderer.sprite, texturePath);
                if (import.HasMeshPrefab)
                {
                    GameObject meshPrefabInstance = (GameObject)PrefabUtility.InstantiatePrefab(import.MeshPrefab);
                    meshPrefabInstance.name     = gameObject.name;
                    meshPrefabInstance.layer    = gameObject.layer;
                    meshPrefabInstance.tag      = gameObject.tag;
                    meshPrefabInstance.isStatic = gameObject.isStatic;
                    meshPrefabInstance.SetActive(gameObject.activeSelf);
                    meshPrefabInstance.transform.SetParent(gameObject.transform.parent);
                    meshPrefabInstance.transform.localPosition = gameObject.transform.localPosition;
                    meshPrefabInstance.transform.localRotation = gameObject.transform.localRotation;
                    meshPrefabInstance.transform.localScale    = gameObject.transform.localScale;

                    foreach (Transform t in gameObject.transform)
                    {
                        if (PrefabUtil.IsMutablePrefab(t.gameObject))
                        {
                            t.SetParent(meshPrefabInstance.transform);
                        }
                    }

                    if (PrefabUtil.IsPrefabModeRoot(gameObject) || isRoot)
                    {
                        meshPrefabInstance.transform.SetParent(gameObject.transform);
                        Object.DestroyImmediate(spriteRenderer);
                    }
                    else
                    {
                        int index = gameObject.transform.GetSiblingIndex();
                        meshPrefabInstance.transform.SetSiblingIndex(index);
                        Object.DestroyImmediate(gameObject);
                    }

                    EditorUtility.SetDirty(meshPrefabInstance);
                }
            }
        }
Example #8
0
        public static bool HasSpriteRendererAny(Object[] targets)
        {
            foreach (var target in targets)
            {
                if (PrefabUtil.TryGetMutableInstanceInHierarchy(target, out GameObject gameObject) &&
                    PrefabUtil.TryGetSpriteRendererWithSprite(gameObject, out SpriteRenderer spriteRenderer) &&
                    PrefabUtil.TryGetInternalAssetPath(spriteRenderer.sprite.texture, out string texturePath))
                {
                    SpriteImportData import = new SpriteImportData(spriteRenderer.sprite, texturePath);

                    if (import.HasMeshPrefab)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Example #9
0
        public static bool TryGetSpriteImportData(Object obj, out SpriteImportData spriteImportData)
        {
            spriteImportData = null;

            Sprite sprite = SpriteUtil.FindSprite(obj);

            if (sprite == null)
            {
                return(false);
            }

            string          assetPath       = AssetDatabase.GetAssetPath(sprite);
            TextureImporter textureImporter = AssetImporter.GetAtPath(assetPath) as TextureImporter;

            if (textureImporter == null)
            {
                return(false);
            }

            spriteImportData = new SpriteImportData(sprite, textureImporter, assetPath);
            return(spriteImportData != null);
        }