World Map UI (Manager)
Overview
WorldMapUI is a full-screen map overlay that lets players explore the entire game world at once. It renders a pannable, zoomable map — either from a static pre-baked texture or a live orthographic camera — and layers on POI icons, quest objective path lines, player-placed waypoints, and a current location name display. It integrates with WorldMapTooltip and WorldMapFastTravel for POI inspection and teleportation, and with WorldMapFogOfWar for progressive map reveal.
Opening the map is blocked during active dialogue. The Canvas component is enabled and disabled (not the GameObject) so the component's Update loop continues running while the map is closed, keeping input detection alive. All animations — open/close fade and smooth pan — use Time.unscaledTime so they work correctly when the game is paused.

Properties
Map Settings
Auto Find Player
Bool
true
Locates the player by "Player" tag at Start if Player Transform is empty.
Player Transform
TransformReference
Auto
The player Transform used for the indicator position and centering on open.
Auto Find Camera
Bool
true
Locates Camera.main at Start if Camera Transform is empty.
Camera Transform
TransformReference
Auto
The main gameplay camera. Used internally — not for map rendering.
World Size
Vector2
(1000, 1000)
Total world extent: X = east–west width (world X axis), Y = north–south depth (world Z axis). Must match MinimapUI's World Size exactly.
World Center
Vector2
(0, 0)
XZ centre of the map texture: X = world X centre, Y = world Z centre (not height). Must match MinimapUI's World Center exactly.
Auto-Detect World Bounds (Inspector button, edit mode only)
Scans all Unity Terrain objects in the scene and computes World Size, World Center, and Camera Height automatically. Falls back to a manually assigned Fallback Source GameObject (uses its Collider, or Renderer bounds if no Collider). Also adjusts the WorldMapCamera's far clip plane to cameraHeight + 100 units. Fires an Undo-safe write to all three properties and shows a summary dialog. A fallback source is only needed when no Terrain is present.
Map Rendering
The World Map supports the same two rendering modes as the MinimapUI. If both are configured, camera rendering takes priority.
Option 1 — Static Map Texture
Map Image
RawImage
The RawImage that displays the map texture. Required for both modes.
Static Map Texture
Texture2D
Pre-baked overhead map image. Panning and zooming are handled purely in UI space by moving mapContent.
Option 2 — Camera-Based Rendering
World Map Camera
TransformReference
A dedicated orthographic camera. At Start, it is configured automatically: orthographic = true, rotated (90°, 0°, 0°), orthographicSize = worldSize.Y / 2, aspect = worldSize.X / worldSize.Y, positioned at (worldCenter.X, cameraBaseHeight, worldCenter.Y). The Camera component (not the GameObject) is disabled when the map is closed.
Render Texture
RenderTexture
The RenderTexture the camera renders into. Assigned to mapImage.texture at Start.
Camera Height
Float
The Y position of the world map camera. Must be above your terrain's highest point. Auto-populated by the Auto-Detect button.
Unlike MinimapUI's live camera (which follows the player), the WorldMapUI camera is fixed over the entire world. All panning and zooming are handled in UI space —
mapContent.anchoredPositionandmapContent.localScale— not by moving the camera.
UI References
World Map Canvas
Canvas
The full-screen overlay Canvas. Enabled/disabled on open/close rather than activating/deactivating the GameObject, keeping the Update loop running.
Map Container
RectTransform
The masked viewport. Pan clamping is calculated relative to this rect's size.
Map Content
RectTransform
The inner content that is panned (anchoredPosition) and zoomed (localScale). Contains the MapImage, icons, and path dots.
Player Indicator
RectTransform
Positioned each frame using WorldToMapPosition(playerPos) and rotated to match the player's world Y angle.
Canvas Group
CanvasGroup
Drives the open/close fade animation. Also controls blocksRaycasts and interactable so the map is non-interactive while closed.
Icon Container
RectTransform
Parent for all pooled POI icon instances.
Path Container
RectTransform
Parent for the 100 pre-created path dot instances.
Current Location Text
TextMeshProUGUI
Displays the name of the player's current location (from LocationManager). Hidden when the player is not inside any named area.
Input
Open Key
KeyCode
M
Keyboard key that toggles the map. Suppressed while the WaypointPickerUI is open (to allow typing). Blocked from opening during active dialogue.
Close on Escape
Bool
true
Pressing Escape while the map is open calls CloseMap().
Input Action Name
String
""
Optional Unity Input System action name. Leave empty to use the KeyCode only.
Pan & Zoom
Pan Speed
Float
500
Units per second for WASD/arrow key panning. Divided by current zoom so panning feels consistent at all zoom levels.
Zoom Speed
Float
0.1
Zoom delta per mouse wheel tick.
Min Zoom
Float
0.5
Minimum allowed zoom level.
Max Zoom
Float
4.0
Maximum allowed zoom level.
Default Zoom
Float
1.0
Zoom level applied each time the map opens.
Pan With WASD
Bool
true
Enables panning with WASD and arrow keys. Blocked while WaypointPickerUI is open.
Pan With Click Drag
Bool
true
Enables panning by clicking and dragging the map. Uses a 5px movement threshold to distinguish drags from clicks.
Mouse Wheel Zoom
Bool
true
Enables zooming with the scroll wheel. Zooms toward the cursor position — the map point under the cursor stays fixed.
Pan clamping: The pan offset is clamped so mapContent cannot be dragged beyond its edges. Maximum pan = (scaledContentSize - containerSize) / 2. At zoom = 1 where content exactly fills the container, pan is locked to (0, 0).
Smooth pan: CenterOnPlayer() and CenterOnPosition() animate the pan using SmoothStep ease-in/out over panAnimationDuration seconds (default 0.2s) using unscaled time. Any WASD or drag input cancels the coroutine immediately.
Game Pause
Pause Game When Open
Bool
true
Sets Time.timeScale = 0 while the map is open. The previous time scale is stored and restored on close.
Slow Time When Open
Bool
false
Alternative to full pause. Sets Time.timeScale to Slow Time Scale instead. Mutually exclusive with Pause Game When Open (pause takes priority).
Slow Time Scale
Float (0–1)
0.1
The time scale used when Slow Time When Open is active.
Animation
Open Animation Duration
Float
0.3
Seconds for the CanvasGroup.alpha fade from 0 to 1 on open. Uses unscaledDeltaTime.
Close Animation Duration
Float
0.2
Seconds for the fade from 1 to 0 on close before FinalizeClose() is called. Uses unscaledDeltaTime.
Pan Animation Duration
Float
0.2
Seconds for the smooth-pan SmoothStep animation when CenterOnPlayer() or CenterOnPosition() is called. Set to 0 to snap instantly.
POI Display
POI Icon Prefab
GameObject
None
Prefab for map markers. Must have an Image component. An optional TextMeshProUGUI child is used for the name label.
Max Icons
Int
100
Hard cap on visible POI icons. A pool of this many instances is created at Start.
Respect POI Filters
Bool
true
Passes each POI through POIFilterManager.ShouldDisplayPOI() before showing it.
Scale With Zoom
Bool
true
Scales icons by baseIconScale / currentZoom, keeping them a constant screen size regardless of zoom level.
Base Icon Scale
Float
1.0
Base multiplier for all POI icon sizes.
Selected Icon Scale Multiplier
Float
1.4
Additional scale applied to the currently selected icon.
Name labels are enabled when: zoom ≥ 1.5 or the mouse is hovering over the icon or the icon is selected.
Fog of War exceptions: CustomWaypoint instances and POIs with a linkedObjectiveId always bypass fog visibility checks — they are always shown even in unexplored areas.
Quest Integration
Show Quest Objective Markers
Bool
true
Enables display of POI markers linked to active quest objectives.
Highlight Tracked Objective
Bool
true
Applies a pulsing colour override to the POI icon of the currently tracked objective.
Tracked Objective Color
Color
Yellow
Base colour of the tracked objective pulse.
Tracked Pulse Speed
Float
2
Speed of the sine-wave pulse: color * (1 + sin(unscaledTime * speed) * 0.3). Icon is also scaled to 130% of its base size.
Show Path To Tracked Objective
Bool
true
Draws a dotted line from the player's map position to each tracked quest objective.
Path Color
Color
Yellow
Colour of quest objective path dots.
Path Dot Size
Float
4
Pixel size of each dot. Scaled by 1 / currentZoom when Scale With Zoom is enabled.
Path Dot Spacing
Float
15
Pixel distance between dot centres along the path.
Show Waypoint Path
Bool
true
Draws a second path to the active navigation waypoint in a distinct colour.
Waypoint Path Colour
Color
Cyan
Colour of the waypoint navigation path.
Animate Path Dots
Bool
true
Advances pathAnimationOffset by unscaledDeltaTime * pathAnimationSpeed each frame, making dots appear to march toward the target.
Animation Speed
Float
20
Dots per second the pattern scrolls. Matches MinimapUI's default for visual consistency.
Path drawing on the world map uses straight lines only — no NavMesh calculation. The world map is zoomed out enough that NavMesh paths would be too noisy to be useful.
Waypoint Placement
Enable Waypoint Placement
Bool
true
Allows players to click on the map to place a custom navigation waypoint.
Mouse Button
Int
1 (right-click)
Mouse button index: 0 = left, 1 = right, 2 = middle.
Picker UI
WaypointPickerUI
Auto-found
Optional panel for choosing the waypoint's icon and name before confirming. If unassigned, waypoints are placed instantly on click and OnWaypointPlacedFromMap fires immediately.
Snap to Ground
Bool
true
Fires a downward Physics.Raycast from (x, groundRaycastHeight, z) to find the actual ground Y at the clicked XZ. Prevents waypoints spawning at Y=0 on non-flat worlds.
Ground Layer Mask
LayerMask
Everything
Layers considered ground for the snap raycast. Narrow this to your terrain/floor layer to avoid hitting triggers or water.
Raycast Height
Float
500
Height above the XZ point from which the downward ray fires. Must exceed your world's highest point.
Ground Y Offset
Float
0
Extra Y added on top of the sampled ground hit. Set to your ground Y (e.g. -6.4) as a direct override if the raycast consistently misses. Enable Debug Mode to diagnose misses in the Console.
Waypoint placement is blocked when:
The pointer is over a
Button,Toggle, orScrollbarUI element.POIManager.CanCreateWaypointreturnsfalse.The
WaypointPickerUIis already open.
Fast Travel
Enable Fast Travel
Bool
true
Master toggle. When false, TryFastTravelToTarget() returns false for all POIs.
Enable Double-Click
Bool
false
Double-clicking a POI icon within the time window attempts fast travel directly, bypassing the tooltip. Falls back to opening the tooltip if the POI doesn't support fast travel.
Double-Click Time Window
Float
0.3
Maximum seconds between two clicks to register as a double-click.
Fast travel requires: FastTravelEnabled + the target is a POIMarker with poiData.EnableFastTravel + the location has been discovered by the LocationManager.
Fog of War
Fog of War Component
WorldMapFogOfWar
Reference to the optional fog overlay component. Passed Initialize(this) when the map opens. POIs that haven't been revealed are hidden unless they are CustomWaypoints or quest-linked markers.
Events
OnMapOpened
UnityEvent
After the map is made visible and OpenMap() setup is complete.
OnMapClosed
UnityEvent
After FinalizeClose() — after the fade and time scale restoration.
OnWaypointPlacedFromMap
UnityEvent<Vector3>
When a waypoint is confirmed (immediately if no picker; on picker confirm if picker is assigned). Passes the world-space position.
OnFastTravelRequested
UnityEvent<PointOfInterest>
When fast travel is initiated to a POI. Fired by the WorldMapFastTravel sub-component.
Public API
OpenMap()
Opens the map with fade animation, centering on the player. No-op if already open or animating.
CloseMap()
Closes the map with fade animation. No-op if already closed or animating.
CloseMapImmediate()
Closes the map instantly, skipping the fade. Restores Time.timeScale immediately.
ToggleMap()
Calls OpenMap() or CloseMap() depending on current state.
CenterOnPlayer()
Smooth-pans the map to centre on the player's current world position.
CenterOnPosition(Vector3)
Smooth-pans the map to centre on any world position.
ZoomIn()
Increments zoom by zoomSpeed * 2.
ZoomOut()
Decrements zoom by zoomSpeed * 2.
ResetZoom()
Resets zoom to defaultZoom.
WorldToMapPosition(Vector3)
Converts a world-space position to mapContent local position.
MapToWorldPosition(Vector2)
Converts a mapContent local position back to world space, sampling ground Y.
SetCanvasVisibleForFade(bool, Image)
Used by the fast travel system to keep the Canvas alive for a screen-fade overlay while hiding all other map UI elements. Pass false to restore them.
IsOpen
bool — Whether the map is currently open.
CurrentZoom
float — Current zoom level.
FastTravelEnabled
bool — Whether fast travel is enabled.
WorldSize
Vector2 — The configured world size.
WorldCenter
Vector2 — The configured world XZ centre.
Inspector Testing Tools (Play Mode Only)
Open Map
Calls OpenMap().
Close Map
Calls CloseMap().
Center on Player
Calls CenterOnPlayer().
Reset Zoom
Calls ResetZoom().
The Runtime Status foldout also displays Is Open and Current Zoom live.
Usage Tips
World Size / World Center must match — the MinimapUI and WorldMapUI use the same coordinate conversion formula. If these values differ between the two components, POI icons will appear at the wrong positions on one of them. Use the Auto-Detect World Bounds button on the WorldMapUI to populate all three values, then copy them to the MinimapUI manually.
Camera vs static texture — the world map camera renders the entire world at once into a fixed texture. This is more expensive than MinimapUI's player-following camera. For large worlds, a pre-baked static texture is the recommended choice — it has zero per-frame rendering cost.
Camera height — set
Camera Heightto at least 50 units above your tallest terrain point. The Auto-Detect button sets it tomaxTerrainHeight + 50and also adjusts the camera's far clip plane tocameraHeight + 100.Waypoint ground snapping — if waypoints consistently spawn at the wrong height, enable Debug Mode and check the Console when clicking the map. The
SampleGroundHeightlogs show the ray origin, hit name, and final Y. If the ray misses entirely, set Ground Y Offset to your ground's Y position as a direct override, and narrow Ground Layer Mask to your terrain/floor layer.Double-click fast travel — keep the time window short (
0.2–0.3s). A longer window makes it feel like normal clicks are accidentally triggering fast travel. Single-click → tooltip + fast travel button is the safer default workflow.Time scale restoration — if the game freezes after fast travel, check that
CloseMapImmediate()is being called before the fast travel teleport.CloseMap()with an animation can delay theTime.timeScalerestoration until after the fade.WaypointPickerUI — this panel is auto-found via
GetComponentInChildrenin Awake. It does not need to be assigned manually as long as it exists anywhere inside the WorldMapUI hierarchy.
Last updated