Sprite Pivot Points: Where to Put Them and Why
Where should a sprite pivot go? Bottom center for characters, center for spinning items, the grip for weapons. Settings for Godot 4, Unity and GameMaker.
A sprite's pivot is the single point the engine treats as "where this object is". When you set a position, the pivot lands on it. When you rotate, scale or mirror the sprite, it turns, grows or flips around that point. Put the pivot in the wrong place and nothing looks broken in the image, but the object floats, wobbles when it spins, or slides sideways when it turns around.
The short answer: put the pivot at bottom center for anything that stands on the ground (characters, enemies, furniture, trees), at the center for things that spin or pulse (coins, projectiles, pickups), at the grip for handheld weapons, at the hinge for doors and levers, and at the top left for UI and grid tiles where that is your engine's convention.
Below: why each choice works, and how to set it in Godot 4, Unity and GameMaker.
What a pivot controls
Engines use different names for it. Unity calls it the pivot. Godot and GameMaker talk about the origin. They all do the same jobs:
| Job | What the pivot decides |
|---|---|
| Position | Which point of the art sits exactly on the object's x, y |
| Rotation | The point the sprite spins around |
| Scale | The point that stays still while the sprite grows or shrinks |
| Mirroring | The line the sprite flips across when you set a negative scale |
| Sorting | In y-sorted games, the height used to decide what draws in front |
| Animation swaps | The point that stays fixed when one sheet replaces another |
That last row is the source of most "my character jumps when it changes animation" bugs. If every sheet's pivot is in the same place on the body, swaps are invisible. If not, the art jumps. The full diagnosis is in why your character changes size between animations.
Where to put the pivot, by object type
| Object | Pivot | Why |
|---|---|---|
| Player character, NPCs, enemies | Bottom center (between the feet) | Feet stay on the ground line, mirroring keeps the body in place, scale grows upward |
| Props that sit on the floor (barrels, tables, trees) | Bottom center of the base | Lines up with floor tiles and sorts correctly against characters |
| Coins, gems, pickups that spin or bob | Center | Spins in place instead of orbiting a corner |
| Projectiles, bullets, sparks | Center | Rotation follows the flight direction without wobble |
| Handheld weapons | The grip, where the hand holds it | Swings arc around the hand, not the blade's middle |
| Doors, gates, levers | The hinge or pivot pin | Opening rotation looks physical |
| Hanging objects (signs, lanterns) | Top center, at the hook | Swaying rotates from the hook |
| UI elements, grid tiles | Top left (engine convention) or center | Match your engine's layout system so values line up with the grid |
When in doubt, ask one question: what part of this object touches the world? That is where the pivot goes.
Why bottom center for characters
Bottom center is the character default for four reasons.
- The feet define the ground line. Set a character's y to the floor height and the feet touch the floor. With a center pivot you would have to add half the sprite's height every time.
- Cell heights can differ without moving the feet. The bottom of the cell lands on the position no matter how tall the cell is.
- Mirroring stays in place. Flipping with a negative x scale mirrors across the pivot. If the pivot is on the body's center line, the character turns around on the spot. If it sits off to one side, the character slides sideways each time it turns.
- Sorting works. Y-sorting compares positions, so the feet are the right point to compare.
One refinement: baked sheets usually leave a small foot gap of transparent pixels under the art. On one character measured across six sheets, it stayed between 2 and 7 px in 260 px cells. Leave the pivot at the cell bottom and accept a few pixels of float, or move it up by the gap.
Setting the pivot in Godot 4
Godot's Sprite2D and AnimatedSprite2D have two properties that together act as the pivot:
centered(defaulttrue): the texture's center sits on the node's origin.offset(default(0, 0)): shifts the drawn texture relative to the origin. Increasingoffset.ymoves the sprite down, because +Y is down in Godot.
To get a bottom-center pivot:
- Leave
centeredon. - Set
offset.yto minus half the frame height. For a 260 px tall frame, that is(0, -130). - If you want the soles exactly on the origin, add the foot gap back: a 5 px gap makes it
(0, -125).
Because AnimatedSprite2D has one offset for the whole node, all animations must share a frame height for this to work. For rotating objects like a weapon, a simpler pattern is a parent Node2D placed at the grip, with the sprite as a child offset so the grip sits on the parent's origin. Rotate the parent. More engine workflow detail is in the Godot game art workflow guide.
Setting the pivot in Unity
Unity stores a pivot on every sprite, including every frame sliced from a sheet.
- Select the texture and set Sprite Mode to Single or Multiple.
- Open the Sprite Editor and slice the sheet with Grid By Cell Size or Grid By Cell Count.
- Pick a pivot preset. Unity's alignments run from Center through the four corners and edge midpoints (Bottom Center among them) to Custom.
- For an exact foot position, choose Custom and set Pivot Unit Mode to Pixels, then enter the x as half the cell width and the y as the foot gap. In Normalized mode the values run from (0, 0) at the bottom left of the sprite to (1, 1) at the top right, so bottom center is (0.5, 0).
- Apply, and repeat for every sheet of the same character.
Keep one more Unity rule alongside the pivot: every texture of a character should use the same Pixels Per Unit value, or the sizes drift even with correct pivots.
Setting the origin in GameMaker
In GameMaker, each sprite asset has its own origin, and by default it is the top-left corner. Since each animation is usually its own sprite asset, you set it on every one.
- Open the sprite in the Sprite Editor.
- Use the origin drop-down and pick Bottom Centre for characters, or Middle Centre for spinning items.
- For a custom point, enter it in pixels measured from the top-left corner of the sprite.
- To set it in code, call
sprite_set_offset(sprite, xoff, yoff). For a 150 x 260 frame with a bottom-center origin, that issprite_set_offset(spr_walk_s, 75, 260).
Common pivot mistakes and fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| Character floats or sinks by half its height | Center pivot, positioned as if it were bottom center | Move the pivot to bottom center, or offset by half the height |
| Character slides sideways when turning | Pivot not on the body's center line | Center the pivot horizontally on the body, not the cell, if the art sits off-center |
| Coin wobbles when it spins | Pivot at a corner or the bottom | Center pivot |
| Sword swing looks like it orbits the hand | Pivot at the blade's middle | Pivot at the grip |
| Feet hop when switching animations | Pivot differs between sheets | Same pivot rule on every sheet of the character |
For how sheets should be laid out so a single pivot rule works across all of them, see the sprite sheet spec and sprite sheet formats by engine.
Doing this in Makko
In Code Studio, the Asset Manager anchors characters at bottom center when it right-sizes them against a reference animation, so the pivot rule for characters is applied as part of sizing. For props and items you import into the Asset Library, decide the pivot by the table above and set it in your engine the same way every time.
In Art Studio, keeping every animation of a character in one Collection gives you cohesive output across sheets, so a single pivot rule holds from idle to attack.
FAQ
Where should the pivot point be on a 2D character?
At bottom center, between the feet. That keeps the feet on the ground line, lets the character mirror in place when turning, and gives y-sorting the right point to compare. If your sheets have a few pixels of empty space under the feet, move the pivot up by that gap.
What is the difference between a pivot and an origin?
They are the same idea under different names: Unity says pivot, Godot and GameMaker say origin. Either way it is the point of the sprite that sits on the object's position and that rotation and scaling happen around.
Why does my sprite rotate around the wrong point?
The pivot is somewhere other than the point you want it to spin around. Move it to the center for spinning items, the grip for weapons, or the hinge for doors. In Godot you can also rotate a parent node placed at the desired point.
Should every frame in a sprite sheet have the same pivot?
Yes, for the same object. If the pivot changes between frames or between sheets, the art will jump when the frame or animation changes. Set the pivot once when slicing the sheet and use the same rule on every sheet for that character.