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 knight in steel plate armor stands on an armory floor beside a weapon rack, a sword leaning against it. Art made in Makko.

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.

  1. 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.
  2. Cell heights can differ without moving the feet. The bottom of the cell lands on the position no matter how tall the cell is.
  3. 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.
  4. 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 (default true): the texture's center sits on the node's origin.
  • offset (default (0, 0)): shifts the drawn texture relative to the origin. Increasing offset.y moves the sprite down, because +Y is down in Godot.

To get a bottom-center pivot:

  1. Leave centered on.
  2. Set offset.y to minus half the frame height. For a 260 px tall frame, that is (0, -130).
  3. 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.

  1. Select the texture and set Sprite Mode to Single or Multiple.
  2. Open the Sprite Editor and slice the sheet with Grid By Cell Size or Grid By Cell Count.
  3. Pick a pivot preset. Unity's alignments run from Center through the four corners and edge midpoints (Bottom Center among them) to Custom.
  4. 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).
  5. 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.

  1. Open the sprite in the Sprite Editor.
  2. Use the origin drop-down and pick Bottom Centre for characters, or Middle Centre for spinning items.
  3. For a custom point, enter it in pixels measured from the top-left corner of the sprite.
  4. To set it in code, call sprite_set_offset(sprite, xoff, yoff). For a 150 x 260 frame with a bottom-center origin, that is sprite_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.