/// <summary> /// Creates a sprite stored at the specified theme directory, to be used for assigning sprites to a theme /// </summary> /// <param name="themeName">The name of the theme (for path)</param> /// <param name="spriteName">The name of the sprite</param> /// <param name="spriteType">The sprite type (for import method)</param> /// <returns>The sprite found</returns> public static Sprite GetSprite(string themeName, string spriteName, SpriteImportType spriteType) { DirectoryInfo directoryInfo = new DirectoryInfo(Application.streamingAssetsPath + "/Themes/" + themeName); FileInfo[] files = directoryInfo.GetFiles("*.*", SearchOption.AllDirectories); Sprite sprite = null; foreach (FileInfo file in files) { if (Path.GetFileNameWithoutExtension(file.Name) == spriteName && !file.Name.Contains("meta")) { int size = DetermineSize(spriteName); switch (spriteType) { case SpriteImportType.svg: case SpriteImportType.svggradient: sprite = ImportVector(file, size, spriteType); break; case SpriteImportType.png: default: sprite = ImportRaster(file, size); break; } } } return(sprite); }
/// <summary> /// Creates sprites stored at the specified theme directory, to be used for assigning sprites to a theme /// </summary> /// <param name="themeName">The name of the theme (for path)</param> /// <param name="spriteName">The name of the sprite</param> /// <param name="spriteType">The sprite type (for import method)</param> /// <returns>The sprites found</returns> public static List <Sprite> GetSprites(string themeName, string spriteName, SpriteImportType spriteType) { DirectoryInfo directoryInfo = new DirectoryInfo(Application.streamingAssetsPath + "/Themes/" + themeName); FileInfo[] files = directoryInfo.GetFiles("*.*", SearchOption.AllDirectories); List <Sprite> sprites = new List <Sprite>(); foreach (FileInfo file in files) { if (file.Name.Contains(spriteName) && !file.Name.Contains("meta")) { int size = DetermineSize(spriteName); switch (spriteType) { case SpriteImportType.svg: case SpriteImportType.svggradient: sprites.Add(ImportVector(file, size, spriteType)); break; case SpriteImportType.png: default: sprites.Add(ImportRaster(file, size)); break; } } } return(sprites); }
/// <summary> /// Imports a vector texture /// </summary> /// <param name="file">The file to import from</param> /// <param name="size">The size of the texture</param> /// <param name="type"></param> /// <returns>The vector texture imported as a Sprite</returns> public static Sprite ImportVector(FileInfo file, int size, SpriteImportType type) { StreamReader reader = null; StringReader sr = null; try { reader = new StreamReader(file.OpenRead()); sr = new StringReader(reader.ReadToEnd()); SVGParser.SceneInfo scene = SVGParser.ImportSVG(sr); VectorUtils.TessellationOptions tessOptions = new VectorUtils.TessellationOptions() { StepDistance = 100.0f, MaxCordDeviation = 0.5f, MaxTanAngleDeviation = 0.1f, SamplingStepSize = 0.01f }; List <VectorUtils.Geometry> geoms = VectorUtils.TessellateScene(scene.Scene, tessOptions); Sprite tempSprite = VectorUtils.BuildSprite(geoms, size, VectorUtils.Alignment.Center, Vector2.zero, 64, false); Shader shader = null; switch (type) { case SpriteImportType.svggradient: shader = Shader.Find("Unlit/VectorGradient"); break; case SpriteImportType.svg: default: shader = Shader.Find("Unlit/Vector"); break; } Texture2D tex = VectorUtils.RenderSpriteToTexture2D(tempSprite, size, size, new Material(shader)); //tex.alphaIsTransparency = true; Sprite sprite = Sprite.Create(tex, new Rect(Vector2.zero, new Vector2(tex.width, tex.height)), new Vector2(0.5f, 0.5f), size * 2); return(sprite); } catch (Exception e) { MonoBehaviour.print(e.Message + "\nFile: " + file.Name + "\n" + e.StackTrace); } finally { if (reader != null) { reader.Close(); } if (sr != null) { sr.Close(); } } return(null); }