← Files UnityARCHIVED FILE

skills/manage-sprite-atlas/resources/gridspritepacker.cs

1.55 KB · Oct 5, 2026 · 18:34 UTC

↓ Download file

// [UNITY-SKILL:SPRITEATLAS]
using UnityEditor.U2D;
using UnityEngine;
using Unity.Collections;

/// <summary>
/// Simple grid-based sprite packer that arranges sprites in a uniform grid pattern.
/// Sprites are placed row by row from left to right, top to bottom.
/// </summary>
public class GridSpritePacker : ScriptablePacker
{
    /// <summary>Number of columns in the grid</summary>
    public int columns = 4;

    /// <summary>Size of each cell in pixels (assumed square)</summary>
    public int cellSize = 256;

    /// <summary>Padding between sprites in pixels</summary>
    public int padding = 2;

    /// <summary>
    /// Packs sprites in a grid pattern.
    /// Sprite at index i is placed at column (i % columns) and row (i / columns).
    /// </summary>
    public override bool Pack(SpriteAtlasPackingSettings config,
                             SpriteAtlasTextureSettings setting,
                             PackerData input)
    {
        NativeArray<SpriteData> sprites = input.spriteData;

        for (int i = 0; i < sprites.Length; i++)
        {
            SpriteData sprite = sprites[i];

            // Calculate grid position
            int col = i % columns;
            int row = i / columns;

            // Set output position with padding
            sprite.output.x = col * (cellSize + padding) + padding;
            sprite.output.y = row * (cellSize + padding) + padding;
            sprite.output.page = 0; // Single page
            sprite.output.rot = PackTransform.None;

            sprites[i] = sprite;
        }

        return true;
    }
}

SHA-256: e57c4d99da4df9d7b27edc12ab36cc11e76e5213ce67d77b28dfcc2e73ee8a7e