private static Texture2D CreateBlankSpritesheet( AsepriteImporterSettings settings, Vector2Int frameSize, int frameCount, out int cols) { cols = frameCount; int rows = 1; var sheetSize = new Vector2Int(cols * frameSize.x, rows * frameSize.y); while (cols > 1 && sheetSize.x / 2f > sheetSize.y) { cols = Mathf.CeilToInt(cols / 2f); rows *= 2; sheetSize = new Vector2Int(cols * frameSize.x, rows * frameSize.y); } var powerTwo = NextPowerTwo(Math.Max(sheetSize.x, sheetSize.y)); var spritesheet = new Texture2D( powerTwo, powerTwo, TextureFormat.RGBA32, false); spritesheet.Clear(Color.clear); spritesheet.filterMode = settings.FilterMode; spritesheet.alphaIsTransparency = false; spritesheet.wrapMode = settings.WrapMode; spritesheet.anisoLevel = settings.AnisoLevel; spritesheet.name = "Texture"; return(spritesheet); }
private static Sprite CreateNamedSprite( string name, Texture2D texture, UnityEditor.AssetImporters.SpriteImportData importData, AsepriteImporterSettings settings) { var sprite = Sprite.Create( texture, importData.rect, importData.pivot, settings.PixelsPerUnit, settings.ExtrudeEdges, settings.MeshType, importData.border, settings.GeneratePhysicsShape); sprite.name = name; return(sprite); }
public AsepriteAssets CreateAssets(AsepriteImporterSettings settings, string name) { var padding = settings.InnerPadding; var paddedFrameSize = new Vector2Int( _frameSize.x + padding * 2, _frameSize.y + padding * 2); var spritesheet = CreateBlankSpritesheet( settings, paddedFrameSize, _frames.Count, out int cols); var sprites = new List <Sprite>(); for (var i = 0; i < _frames.Count; ++i) { var frame = _frames[i]; var col = i % cols; var row = Mathf.FloorToInt(i / (float)cols) + 1; var spriteRect = new Rect( col * paddedFrameSize.x, spritesheet.height - (row * paddedFrameSize.y), paddedFrameSize.x, paddedFrameSize.y); var framePixels = frame.GetFramePixels(_frameSize); spritesheet.SetPixels( (int)spriteRect.x + padding, (int)spriteRect.y + padding, _frameSize.x, _frameSize.y, framePixels); var spriteData = new UnityEditor.AssetImporters.SpriteImportData { rect = spriteRect, pivot = settings.PivotValue + new Vector2( padding / (float)paddedFrameSize.x, padding / (float)paddedFrameSize.y), name = i.ToString() }; var sprite = CreateNamedSprite( string.Format("{0}_{1}", name, spriteData.name), spritesheet, spriteData, settings); sprites.Add(sprite); } spritesheet.Apply(); var animations = CreateAnimations(name, sprites, typeof(SpriteRenderer), settings.AnimationLoop); var uiAnimName = $"UI_{name}"; var uiAnimations = CreateAnimations(uiAnimName, sprites, typeof(Image), settings.AnimationLoop); return(new AsepriteAssets( spritesheet, sprites, animations.Concat(uiAnimations))); }