예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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)));
        }