New: 12 free tools for Unreal Engine and Unity developers.Try them →

Unity vs Unreal Coordinate Systems: Axes, Units and Rotations

How Unity and Unreal Engine differ in axes, units and rotation order, the exact formulas to convert positions, rotations and scale, and common pitfalls.

Moving a level layout, camera path or set of spawn points from Unity to Unreal (or back) looks like it should be copy and paste. It is not. The two engines use different up axes, different forward axes and different units, and their rotations are shown in a different order.

The good news: the conversion is exact and simple once you know the rules.

The two coordinate systems

UnityUnreal Engine
HandednessLeft-handedLeft-handed
Up+Y+Z
Forward+Z+X
Right+X+Y
1 unit1 meter1 centimeter

Both engines are left-handed, so nothing is mirrored. The axes are just relabelled, and Unreal's numbers are 100 times larger.

Converting positions

Unreal X = Unity z × 100
Unreal Y = Unity x × 100
Unreal Z = Unity y × 100

And back again:

Unity x = Unreal Y / 100
Unity y = Unreal Z / 100
Unity z = Unreal X / 100

Example: a Unity position of (1, 2, 3) becomes Unreal (300, 100, 200).

Converting rotations

Unity shows Euler angles as (x, y, z) in degrees. Unreal uses an FRotator of (Pitch, Yaw, Roll):

Pitch = −Unity x
Yaw   =  Unity y
Roll  = −Unity z

Why the minus signs? In Unity, a positive x rotation tilts the nose down, while a positive Unreal pitch tilts it up. Roll has the same flip. Yaw (turning left and right) matches.

Both engines apply rotations in the same order (roll, then pitch, then yaw, in local terms), so this conversion is exact, not an approximation. We verified it numerically by converting the forward, right and up vectors of thousands of random rotations in both conventions.

The Details panel trap

Unreal's Details panel shows rotation as X, Y, Z, which means Roll, Pitch, Yaw. In C++, the FRotator constructor takes (Pitch, Yaw, Roll). Mixing these up is the most common rotation bug when porting.

Converting scale

Scale has no units, so only the axes change:

Unreal (X, Y, Z) = Unity (z, x, y)

When you do not need any of this

If you move meshes with FBX, Unreal's importer and Unity's exporter already handle axis conversion. Watch the import scale instead: models built in meters may need a scale of 100 in Unreal.

You need these formulas when you move numbers: level layouts, spawn points, camera keyframes, physics data or saved game data exported from one engine to the other.

Convert instantly

The free Unity ↔ Unreal Converter does all of this for you:

  • Convert a full transform in either direction.
  • See the rotation both as an FRotator and in Details-panel order.
  • Copy ready-to-use code (FTransform for Unreal, transform.localPosition and friends for Unity).
  • Paste a list of positions to convert them in bulk.
  • Change the unit scale if your project does not use 1 unit = 1 meter.

Summary

  • Unity: Y-up, Z-forward, meters. Unreal: Z-up, X-forward, centimeters.
  • Position: Unreal (X, Y, Z) = Unity (z, x, y) × 100.
  • Rotation: Pitch = −x, Yaw = y, Roll = −z.
  • Scale: Unreal (X, Y, Z) = Unity (z, x, y).
  • Unreal's Details panel shows rotation as Roll, Pitch, Yaw.
  • #unity
  • #unreal engine
  • #math
  • #porting

Keep reading