Overview
ViewportGPS adds a compact box to the toolbar of every level editor viewport in Unreal Engine 4.27 and 5.8. It shows the active viewport camera's position and rotation as editable fields and adds tools that make camera coordinates easy to exchange with teammates, bug reports, logs, scripts and code.
- Editable position (in cm, m or km) and rotation, with truncation options; moving a piloted actor moves it with the camera.
- Smart paste: Unreal text, number lists,
BugItGolines, JSON, C++FVector/FRotator, Pythonunreal.Vector/unreal.Rotatorand location links. - Copy As Unreal text,
BugItGocommand, C++, Python, JSON or a location link. - Named bookmarks per level, unlimited, beyond the engine's Ctrl+0-9 slots.
- Location links (
ViewportGPS:/Game/Maps/MyLevel?loc=...) that open the right map and jump. - Back / Forward history of camera jumps.
- Field of view readout and edit, and distance to selection.
- Keyboard commands for copy, paste & go, history and bookmarks - no need to open the box.
- Blueprint and Python API for Editor Utility Blueprints and editor scripts.
Requirements
| Requirement | Details |
|---|---|
| Unreal Engine | 4.27 and 5.8 |
| Module | ViewportGPS (Editor, loading phase PostEngineInit) — editor only, never packaged into games |
| Dependencies | None (engine modules only; no other plugins are enabled) |
| Language | C++, Editor Utility Blueprints and Python |
| Platforms | Win64 and Mac (the module lists these platforms in the plugin descriptor). The code is platform-independent engine C++ with no OS-specific calls. |
| Network Replicated | No (editor tool) |
Installation
- Install ViewportGPS from Fab into your engine, or copy the
ViewportGPSfolder into your project'sPluginsfolder. - For a C++ project, regenerate project files and build the editor target.
- Open the project, enable ViewportGPS in Edit > Plugins and restart the editor.
Shift+Alt+C in a level viewport: the position fields appear below the viewport toolbar. Editor Preferences > Plugins > ViewportGPS exists.Quick start
- Press
Shift+Alt+C(position) andShift+Alt+X(rotation) in the level viewport, or tick Toggle Camera Position / Toggle Camera Rotation in the viewport camera menu (UE 5.8) or options menu (UE 4.27). - Type or drag a value in X, Y, Z or Roll, Pitch, Yaw to move the camera.
- Paste a location into the Go To field (for example
BugItGo 1200 -300 450 -15 90 0) and press Enter. - Open Copy As and choose a format to put the camera on the clipboard.
- Open Bookmarks, type a name and press Enter to save the view; pick it later to jump back.
- Click < to return to where you were before the last jump, > to go forward again.
The camera box
The box appears in each level viewport while the position and/or rotation fields are toggled on. It always shows the camera of the viewport you used last.
| Row | Description |
|---|---|
| X / Y / Z | Camera position in the Position Unit (cm, m or km). Dragging moves 1 cm per step in every unit. Right-click: Copy ((X=.. Y=.. Z=..) in cm), Paste (location from any supported format), Copy Camera As. |
| Roll / Pitch / Yaw | Camera rotation in degrees. Right-click: Copy ((P=.. Y=.. R=..)), Paste (rotation; a plain list of three numbers is read as Pitch Yaw Roll), Copy Camera As. |
| FOV | Editable perspective field of view (5 to 170 degrees). When the viewport is locked to a camera actor, that camera's field of view is changed, exactly like the engine's own Field of View slider. |
| Dist | Distance from the camera to the selected actors: to the centre of their combined bounds or to their (average) pivot, see Distance Mode. Updated ten times per second; shows - when nothing is selected. |
| < > Bookmarks, Copy As | History Back / Forward, the bookmarks menu, and the Copy As menu (which also has Paste & Go From Clipboard). |
| Go To | Type or paste any supported location and press Enter. The field is cleared after a successful jump. |
Smart paste formats
The Go To field, the Paste entries, the Paste & Go From Clipboard command and the Parse Location String / Go To Location String functions all use the same reader. It finds a location, an optional rotation and an optional field of view.
| Format | Example | Notes |
|---|---|---|
| Unreal text | X=100 Y=200 Z=300(X=100.000000,Y=200.000000,Z=300.000000) | Details panel / FVector::ToString output. |
| Unreal rotation | P=-10 Y=45 R=0(Pitch=-10,Yaw=45,Roll=0) | Y after P is Yaw. |
| Location + rotation | Location=(X=1,Y=2,Z=3) Rotation=(Pitch=0,Yaw=90,Roll=0) | The Unreal Text copy format. |
| Transform text | (Rotation=(X=0,Y=0,Z=0.7071,W=0.7071),Translation=(X=..),Scale3D=(..)) | Quaternion rotation; scale is ignored. |
| Number lists | 1 2 3, (1, 2, 3), 1,2,3 | 3 = location, 6 = location + Pitch Yaw Roll, 7 = + FOV. Read in the Position Unit unless Plain Numbers Use Display Unit is off. |
| BugItGo | BugItGo 100 200 300 -10 45 0 | Also inside a log line. |
| JSON | {"x": 1, "y": 2, "z": 3, "pitch": 0, "yaw": 90, "roll": 0, "fov": 90}{"location": [1, 2, 3], "rotation": {"pitch": 0, "yaw": 90, "roll": 0}} | Keys are case-insensitive; arrays and nested objects work. |
| C++ | FVector(1.0f, 2.0f, 3.0f), FRotator(0.0, 90.0, 0.0) | FVector3d / FVector3f / FRotator3d too; FRotator order is Pitch, Yaw, Roll. |
| Python | unreal.Vector(x=1, y=2, z=3), unreal.Rotator(roll=0, pitch=0, yaw=90) | Positional unreal.Rotator(a, b, c) is Roll, Pitch, Yaw, as in the Python API. |
| Location link | ViewportGPS:/Game/Maps/MyLevel?loc=1,2,3&rot=0,90,0&fov=90 | See Location links. |
cm, m, km or mm, for example 12.5m -3m 1.2m or X=1.5km Y=0 Z=20m. Without a suffix, engine formats are centimetres.Copy As formats
Choose a format in the Copy As menu or the right-click Copy Camera As submenu. The Copy Camera Transform command uses Default Copy Format. Every format pastes back into ViewportGPS.
| Format | Example output |
|---|---|
| Unreal Text | Location=(X=1200.0,Y=-300.0,Z=450.0) Rotation=(Pitch=-15.0,Yaw=90.0,Roll=0.0) |
| BugItGo Command | BugItGo 1200.0 -300.0 450.0 -15.0 90.0 0.0 — paste into the console of a running game or PIE. |
| C++ | FVector(1200.0, -300.0, 450.0), FRotator(-15.0, 90.0, 0.0) |
| Python | unreal.Vector(x=1200.0, y=-300.0, z=450.0), unreal.Rotator(roll=0.0, pitch=-15.0, yaw=90.0) |
| JSON | {"x": 1200.0, "y": -300.0, "z": 450.0, "pitch": -15.0, "yaw": 90.0, "roll": 0.0, "fov": 90.0} |
| Location Link | ViewportGPS:/Game/Maps/MyLevel?loc=1200.0,-300.0,450.0&rot=-15.0,90.0,0.0&fov=90.0 |
Values are centimetres and degrees with up to four decimals.
Location links
A location link is one line that carries the map and the view: ViewportGPS:<map package>?loc=X,Y,Z&rot=Pitch,Yaw,Roll&fov=FOV. Copy it with Copy As > Location Link, the Copy Location Link command, a bookmark's Copy Link entry or Make Location Link, and paste it into chat, a task tracker or a bug report.
- Pasting a link for the open map jumps immediately.
- Pasting a link for another map asks whether to open it (setting Confirm Map Change), then shows the usual save-changes prompt, opens the map and jumps once it has loaded.
- A link with an empty map (
ViewportGPS:?loc=...) always applies to the open map.
/Game/Maps/MyLevel).Bookmarks
Bookmarks are named camera views of a level, as many as you like. They are stored per user and per project in Saved/Config/<Platform>/EditorPerProjectUserSettings.ini, keyed by the map package, so every level has its own list.
| Action | Description |
|---|---|
| New Bookmark | Type a name in the field at the top of the menu and press Enter. Names are made unique (Entrance 2). |
| Add Bookmark Here | Saves the view as Bookmark 1, Bookmark 2, ... (also the Add Camera Bookmark command). |
| (bookmark name) | Click to jump. Hover to open: Jump, Update To Current View, Copy Link, Rename (type and press Enter) and Delete. |
With Bookmarks Store Field Of View on, new and updated bookmarks also keep the field of view and restore it on jump.
Navigation history
Every jump made by ViewportGPS records the view you left: Go To, Paste, Paste & Go, location links, bookmark jumps and Jump Editor Camera To. < (Camera Back) returns there, > (Camera Forward) goes forward again. A new jump clears the forward list, like a web browser.
- Up to History Size entries (default 32, 1 to 256) are kept.
- History belongs to the open level and is cleared when another map is opened.
- Typing or dragging in the X/Y/Z or rotation fields is not recorded, nor is Set Editor Camera Location / Rotation.
Keyboard commands
Bind or change them in Editor Preferences > General > Keyboard Shortcuts > ViewportGPS. They work while the level editor has focus, whether the box is shown or not. They are also listed in the viewport camera menu (UE 5.8) / options menu (UE 4.27) under ViewportGPS.
| Command | Default | Description |
|---|---|---|
| Toggle Camera Position | Shift+Alt+C | Shows or hides the position fields. |
| Toggle Camera Rotation | Shift+Alt+X | Shows or hides the rotation fields. |
| Copy Camera Transform | unbound | Copies the camera in the Default Copy Format. |
| Copy Location Link | unbound | Copies a location link of the current view. |
| Paste & Go From Clipboard | unbound | Reads any supported format or link from the clipboard and jumps there. |
| Camera Back | unbound | History back. |
| Camera Forward | unbound | History forward. |
| Add Camera Bookmark | unbound | Saves the view as a new bookmark. |
Blueprint & Python API
All functions are static members of UViewportGPSBlueprintLibrary (category ViewportGPS) and are available in Editor Utility Blueprints/Widgets and in Python as unreal.ViewportGPSBlueprintLibrary.<snake_case_name>. Positions are centimetres, angles degrees.
Camera
| Node (Python) | Type | Description |
|---|---|---|
Get Editor Camera Locationget_editor_camera_location() | Pure | Location of the active level viewport camera. |
Set Editor Camera Locationset_editor_camera_location(v) | Callable | Moves the camera (and a piloted actor). Not recorded in the history. |
Get Editor Camera Rotationget_editor_camera_rotation() | Pure | Rotation of the camera. |
Set Editor Camera Rotationset_editor_camera_rotation(r) | Callable | Rotates the camera (and a piloted actor). Not recorded in the history. |
Get Editor Camera FOVget_editor_camera_fov() | Pure | Field of view in degrees (0 when no level viewport exists). |
Set Editor Camera FOVset_editor_camera_fov(fov) | Callable | Sets the field of view (clamped to 5..170). Returns false without a level viewport. |
Jump Editor Camera Tojump_editor_camera_to(loc, rot, set_rotation=True) | Callable | Moves the camera and records the jump for Back / Forward. |
Get Distance To Selectionget_distance_to_selection() | Callable | Distance (cm) to the selected actors using Distance Mode; false when nothing is selected. Python returns (found, distance). |
Get Current Map Packageget_current_map_package() | Pure | Package of the open level, for example /Game/Maps/MyLevel. |
Text formats
| Node (Python) | Type | Description |
|---|---|---|
Parse Location Stringparse_location_string(text) | Callable | Reads a location with the smart paste reader; fills a FViewportGPSParseResult. Python returns (ok, result). |
Go To Location Stringgo_to_location_string(text) | Callable | Parses and jumps; a link to another map opens it first (on the next editor tick). |
Make BugItGo Stringmake_bug_it_go_string(loc, rot) | Pure | BugItGo X Y Z Pitch Yaw Roll. |
Make Location Linkmake_location_link(loc, rot, map_package, fov=0.0) | Pure | Location link; empty map = open level, FOV 0 = omitted. |
Format Camera Transformformat_camera_transform(format, loc, rot) | Pure | A transform in any EViewportGPSCopyFormat. |
Copy Editor Camera To Clipboardcopy_editor_camera_to_clipboard(format) | Callable | Copies the current camera and returns the text. |
Bookmarks and history
| Node (Python) | Type | Description |
|---|---|---|
Add Bookmarkadd_bookmark(name) | Callable | Saves the current view; returns the final unique name (empty name = Bookmark N). |
Get Bookmarksget_bookmarks(map_package) | Callable | Bookmarks of a level (empty = open level). |
Jump To Bookmarkjump_to_bookmark(name) | Callable | Jumps to a bookmark of the open level. |
Rename Bookmarkrename_bookmark(old, new) | Callable | Renames a bookmark (the new name is made unique). |
Update Bookmarkupdate_bookmark(name) | Callable | Stores the current view in an existing bookmark. |
Remove Bookmarkremove_bookmark(name) | Callable | Deletes a bookmark. |
History Back / History Forwardhistory_back() / history_forward() | Callable | Navigation history. |
| Can History Back / Can History Forward | Pure | True when there is an entry to go to. |
Clear Historyclear_history() | Callable | Empties Back and Forward. |
Python example
import unreal
gps = unreal.ViewportGPSBlueprintLibrary
# Jump to a BugItGo line from a bug report
gps.go_to_location_string("BugItGo 1200 -300 450 -15 90 0")
# Share the current view
link = gps.make_location_link(gps.get_editor_camera_location(), gps.get_editor_camera_rotation(), "", gps.get_editor_camera_fov())
print(link)
# Save and list bookmarks of the open level
gps.add_bookmark("Boss Arena")
for b in gps.get_bookmarks(""):
print(b.name, b.location, b.rotation)
C++
Add "ViewportGPS" to an editor module's dependencies and use UViewportGPSBlueprintLibrary, or the native helpers FViewportGPSCamera, FViewportGPSFormat (parse / format) and FViewportGPSNavigator::Get() (jumps, history, bookmarks).
Types
| Type | Kind | Description |
|---|---|---|
| FViewportGPSBookmark | Struct | Name, Location, Rotation, Field Of View (0 = keep current). |
| FViewportGPSParseResult | Struct | Has Location/Location, Has Rotation/Rotation, Has Field Of View/Field Of View, Is Link, Map Package. |
| EViewportGPSCopyFormat | Enum | Unreal Text, BugItGo Command, C++, Python, JSON, Location Link. |
| EViewportGPSUnit | Enum | Centimeters, Meters, Kilometers. |
| EViewportGPSTruncType | Enum | No Truncation, Two Decimals, Zero Decimals. |
| EViewportGPSDistanceMode | Enum | Selection Bounds Centre, Actor Pivot. |
Settings
Editor Preferences > Plugins > ViewportGPS (saved to the project's DefaultEditor.ini, section [/Script/ViewportGPS.ViewportGPSSettings]).
| Setting | Default | Description |
|---|---|---|
| Enable Camera Position | On | Allows the position fields and their toggle. |
| Enable Camera Rotation | On | Allows the rotation fields and their toggle. |
| Position Truncation | Two Decimals | Display truncation of the position, applied to the centimetre value (same precision in every unit). |
| Rotation Truncation | Two Decimals | Display truncation of the rotation. |
| Position Unit | Centimeters | Unit of the X/Y/Z fields, the distance readout and plain pasted numbers. |
| Show Field Of View | On | Shows the FOV field. |
| Show Distance To Selection | On | Shows the distance readout. |
| Distance Mode | Selection Bounds Centre | Measure to the combined bounds centre or to the actor pivot (average for several actors). |
| Show Navigation Row | On | Shows Back / Forward, Bookmarks and Copy As. |
| Show Go To Field | On | Shows the smart paste field. |
| Box Width | 300 | Width of the box (200 to 800). |
| Default Copy Format | Unreal Text | Format of the Copy Camera Transform command. |
| Plain Numbers Use Display Unit | On | Plain lists such as 1 2 3 are read in the Position Unit; off = always centimetres. |
| Show Notifications | On | Short toasts after copy, jump and bookmark actions. Errors are always shown. |
| Record History | On | Records jumps for Back / Forward. |
| History Size | 32 | Entries kept (1 to 256). |
| Confirm Map Change | On | Asks before a location link opens another map. |
| Enable Bookmarks | On | Shows the Bookmarks menu and enables the Add Camera Bookmark command. |
| Bookmarks Store Field Of View | Off | Saves and restores the FOV with bookmarks. |
The visibility of the position and rotation fields (the two toggles) is stored in the same section.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
| The box does not appear | Toggle it with Shift+Alt+C / Shift+Alt+X while the level viewport has focus, or tick the toggles in the viewport camera / options menu. Check that Enable Camera Position / Rotation are on. |
| "No camera location found in ..." | The text has no recognisable location. Plain lists need exactly 3, 6 or 7 numbers; Unreal text needs X, Y and Z. |
| Pasted plain numbers land 100 times too far | Plain lists are read in the Position Unit. Turn off Plain Numbers Use Display Unit or add a unit (120cm). |
| A link says the map does not exist | The link names a map package that is not in this project (for example a different /Game/... path). |
| Nothing happens after opening a linked map | The jump runs a couple of frames after the map has loaded; if the load was cancelled at the save prompt, nothing is applied. |
| Back is disabled | Only ViewportGPS jumps are recorded, and history is cleared when another map is opened. |
| The FOV field shows a different value than expected | When the viewport pilots or is locked to a camera actor, the field reflects and edits that camera's field of view. |
| Bookmarks are missing on another machine | Bookmarks are per user (Saved/Config). Share views with location links. |
Credits
© 2026 Alpha XP — alphaxp.net · Support: support@alphaxp.net. Built for Unreal Engine 4.27 and 5.8.