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; }
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); } } }
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); }
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); }