/// <summary> /// Slice an identified sprite and store its metadata /// in order to be detect unique sprites. /// </summary> /// <param name="sprites">List of all sprites</param> /// <param name="dataJsonRow">Metadata composed by the sprite properties</param> /// <param name="sprite">Sliced sprite detected</param> /// <param name="newElementName">Element detected</param> /// <param name="atlasJson">Serialized atlas</param> /// <param name="newSpritesMetadata">List of all sliced sprites</param> private static void SliceAndStoreMetadata(List <string> sprites, string dataJsonRow, Sprites sprite, string newElementName, AtlasInformation atlasJson, List <SpriteMetaData> newSpritesMetadata) { int sliceWidth; int sliceHeight; int pivotX; int pivotY; // Store sprite identifier in order to not load it again in the next iteration sprites.Add(dataJsonRow); sliceWidth = sprite.SPRITE.w; sliceHeight = sprite.SPRITE.h; pivotX = Mathf.Abs(sliceWidth / sliceWidth); pivotY = Mathf.Abs(sliceHeight / sliceHeight); //Slice sprite and store it in its metadata SpriteMetaData newSpriteMetadata = new SpriteMetaData(); newSpriteMetadata.pivot = new Vector2((1 - pivotX), pivotY); newSpriteMetadata.name = newElementName; newSpriteMetadata.rect = new Rect(sprite.SPRITE.x, atlasJson.meta.size.h - sprite.SPRITE.y - sliceHeight, sliceWidth, sliceHeight); newSpriteMetadata.alignment = (int)SpriteAlignment.Custom; newSpritesMetadata.Add(newSpriteMetadata); }
public static void SetSprite(Image image, string name) { DataSprite data = DataManager.Instance.Load <DataSprite>(); AtlasInformation information = data.GetAtlas(name); if (information == null) { return; } if (atlases.ContainsKey(information.name)) { if (atlases[information.name] != null) { SetSprite(image, atlases[information.name].GetSprite(name)); } } else { ResourceManager.LoadAsync <SpriteAtlas>(information.path, (atlas) => { if (atlas != null) { SetSprite(image, atlas.GetSprite(name)); } Add(information.name, atlas); }); } }
protected static void LoadDataSprite() { DataSprite data = Load <DataSprite>(); data.atlases = new List <AtlasInformation>(); string[] guids = AssetDatabase.FindAssets("t:SpriteAtlas", new string[] { "Assets/Package" }); string path; foreach (var guid in guids) { path = AssetDatabase.GUIDToAssetPath(guid); SpriteAtlas asset = AssetDatabase.LoadAssetAtPath <SpriteAtlas>(path); if (asset != null) { AtlasInformation atlas = new AtlasInformation() { name = asset.name, path = path.Replace("Assets/", string.Empty), sprites = new List <string>(asset.spriteCount), }; Sprite[] sprites = new Sprite[asset.spriteCount]; asset.GetSprites(sprites); for (int i = 0; i < sprites.Length; i++) { atlas.sprites.Add(sprites[i].name.Remove(sprites[i].name.Length - 7, 7)); } data.atlases.Add(atlas); } } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); }