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
| Unity | Unreal Engine | |
|---|---|---|
| Handedness | Left-handed | Left-handed |
| Up | +Y | +Z |
| Forward | +Z | +X |
| Right | +X | +Y |
| 1 unit | 1 meter | 1 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 (
FTransformfor Unreal,transform.localPositionand 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.