Shipping dozens of separate PNGs to Unity means more draw calls, a messier project, and slower loads. Packing them into one sprite sheet (a texture atlas) fixes all three — Unity can batch sprites that share a texture, cutting draw calls on 2D scenes. This guide packs a sheet for free in your browser, then shows the two ways to slice it in Unity: the quick built-in way, and the exact, named way using the coordinate JSON.

What you'll end up with

Two files: the packed atlas sprites.png and a sprites.json describing every sprite's name, position, size and pivot. Unity slices the PNG into individual sprites you can drop into scenes, SpriteRenderers, UI Images, or animation clips.

Step 1 — Pack the sprite sheet

Open the free EazyStudio Texture Packer and drag your PNG frames in. On the settings panel:

Click Generate Atlas, then export the PNG and the Unity data file.

Step 2 — Import the atlas into Unity

Drop sprites.png into your Unity project. Select it and, in the Inspector, set:

Click Apply.

Step 3 — Slice it (two ways)

A. Quick: auto-slice in the Sprite Editor

Open Sprite EditorSliceType: AutomaticSliceApply. Because you trimmed the sprites, Unity detects each one from the transparent gaps. This takes seconds and needs no JSON — perfect if you don't care about exact names or pivots.

B. Exact: slice by the JSON (names + pivots)

Auto-slice guesses boundaries and names sprites sprites_0, sprites_1… If you need the original names and precise pivots, drive the slicing from the exported JSON. The file gives you everything Unity's SpriteMetaData needs:

{ "texture": "sprites.png", "size": { "width": 1024, "height": 1024 }, "sprites": [ { "name": "player_idle", "x": 0, "y": 0, "width": 64, "height": 64, "pivot": { "x": 0.5, "y": 0.5 }, "border": [0,0,0,0] } ] }

A short editor script maps those rects onto the texture. Note Unity's texture space is bottom-left origin, so flip Y (textureHeight - y - height):

// Editor/AtlasSlicer.cs — Tools ▸ Slice Atlas From JSON using UnityEditor; using UnityEngine; using System.IO; public class AtlasSlicer { [MenuItem("Tools/Slice Atlas From JSON")] static void Slice() { var png = Selection.activeObject as Texture2D; var path = AssetDatabase.GetAssetPath(png); var json = File.ReadAllText(path.Replace(".png", ".json")); var data = JsonUtility.FromJson<Atlas>(json); int H = png.height; var importer = (TextureImporter)AssetImporter.GetAtPath(path); importer.spriteImportMode = SpriteImportMode.Multiple; var metas = new SpriteMetaData[data.sprites.Length]; for (int i = 0; i < data.sprites.Length; i++) { var s = data.sprites[i]; metas[i] = new SpriteMetaData { name = s.name, rect = new Rect(s.x, H - s.y - s.height, s.width, s.height), alignment = (int)SpriteAlignment.Custom, pivot = new Vector2(s.pivot.x, s.pivot.y) }; } importer.spritesheet = metas; EditorUtility.SetDirty(importer); importer.SaveAndReimport(); } [System.Serializable] class Atlas { public Sprite[] sprites; } [System.Serializable] class Sprite { public string name; public int x, y, width, height; public Pivot pivot; } [System.Serializable] class Pivot { public float x, y; } }

Put that in an Editor/ folder, select the atlas PNG, and run Tools ▸ Slice Atlas From JSON. Every sprite is created with its real name and pivot.

Tip: prefer zero code? The free TexturePacker Importer on the Unity Asset Store reads this same JSON layout and slices automatically — the export is standard, so it drops right in.

Step 4 — Use your sprites

Expand the atlas PNG in the Project window — each sliced sprite appears as a child. Drag any of them into a scene to create a SpriteRenderer, onto a UI Image, or select a run of frames and drag them together to auto-build an animation clip for an Animator.

Why pack in the browser?

Make your Unity sprite sheet now

Free, in your browser — packs the atlas and exports the Unity JSON.

Open the Texture Packer

Related game-dev tools