From a84ab6ac37092fa9511580a4430efb74a7987194 Mon Sep 17 00:00:00 2001 From: Rodrigo Fernandez Date: Wed, 10 Apr 2024 23:44:36 -0600 Subject: [PATCH] Fixes Sprite IDs not being assigned correctly on newer versions of Unity. Updates the project to use the new UnityEditor.U2D.Sprites library when creating the sprite instances for the texture importer. The previous SpriteMetaData class is now marked as obsolete and was not assigning IDs to sprites causing them to be unable to be selected individually in the Unity editor. Here is more info about the issue: https://forum.unity.com/threads/spritemetadata-textureimporter-potential-bug-in-unity-2021-2-16f1.1259632/ And thank you for creating this asset! :smile: --- .../Editor/StarlingParser.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Assets/SpriteSheetImporter/Editor/StarlingParser.cs b/Assets/SpriteSheetImporter/Editor/StarlingParser.cs index ed866c1..60c602f 100644 --- a/Assets/SpriteSheetImporter/Editor/StarlingParser.cs +++ b/Assets/SpriteSheetImporter/Editor/StarlingParser.cs @@ -7,6 +7,7 @@ using System.Reflection; using System.Globalization; using System.Linq; +using UnityEditor.U2D.Sprites; /// /// Starling parser @@ -34,11 +35,10 @@ public bool ParseAsset (Texture2D asset, TextAsset textAsset, Vector2 inputPivot doc.LoadXml(textAsset.text); XmlNodeList subTextures = doc.SelectNodes("//SubTexture"); - List spriteSheet = new List(); + List spriteSheet = new List(); //bool pivotSet = false; //not used anymore Vector2 pivotPixels; - foreach (XmlNode node in subTextures) { string name = GetAttribute(node, "name"); @@ -145,12 +145,12 @@ public bool ParseAsset (Texture2D asset, TextAsset textAsset, Vector2 inputPivot } // Make Sprite - SpriteMetaData smd = new SpriteMetaData(); + SpriteRect smd = new SpriteRect(); + smd.spriteID = GUID.Generate(); smd.name = name; smd.rect = new Rect(x, asset.height - y - height, width, height); smd.pivot = spritePivot; - smd.alignment = 9; // Custom Sprite alignment (not center) - + smd.alignment = SpriteAlignment.Custom; spriteSheet.Add(smd); } @@ -158,9 +158,14 @@ public bool ParseAsset (Texture2D asset, TextAsset textAsset, Vector2 inputPivot { string assetPath = AssetDatabase.GetAssetPath(asset); TextureImporter importer = TextureImporter.GetAtPath(assetPath) as TextureImporter; - importer.spritesheet = spriteSheet.ToArray(); importer.textureType = TextureImporterType.Sprite; importer.spriteImportMode = SpriteImportMode.Multiple; + var factory = new SpriteDataProviderFactories(); + factory.Init(); + var dataProvider = factory.GetSpriteEditorDataProviderFromObject(importer); + dataProvider.InitSpriteEditorDataProvider(); + dataProvider.SetSpriteRects(spriteSheet.ToArray()); + dataProvider.Apply(); var guid = AssetDatabase.AssetPathToGUID(assetPath); if (string.IsNullOrEmpty(guid)) @@ -184,7 +189,6 @@ public bool ParseAsset (Texture2D asset, TextAsset textAsset, Vector2 inputPivot } return false; } - private static float GetFloatAttribute(XmlNode node, string name, float defaultValue = 0) { XmlNode attribute = node.Attributes.GetNamedItem(name);