Changelog
What shipped, in plain language. Newest first.
This file lists every notable change to LansMap. The format follows Keep a Changelog; versioning follows Semantic Versioning.
Pre-1.0, the public API is unstable and renames land without deprecation shims.
[0.4.0] - 2026-09-19
Fixed
Adding, moving, hiding, or removing a clustered marker updates its bubble immediately while the exact hierarchy rebuild finishes in the background.
TileUrlBuilderhandles long URL templates, and both tile fetchers reject responses over 64 MiB withTileFetchError.Protocol.MapInteractionControllerfinished scroll zoom smoothly and stopped trailing input from restarting a completed zoom.ScreenMapViewdrew map overlays before transparent 3D objects in Built-in rendering and stopped redrawing them through other cameras.ScreenMapView.FitToBoundskeeps the whole box on screen when the map is rotated. It used to size the fit as if the map were north-up.3D markers in demo scenes no longer drifted off the ground when the view was pitched.
Added
Native platforms rebuilt marker clustering on a worker thread, while the Web build used a calibrated per-frame budget.
ScreenMapView.FitToPointsfits any set of coordinates under the current rotation, so a diagonal shape fills the padded screen instead of its north-up bounding box.GeoUtils.LongitudeArcOffinds the smallest longitude arc around a set of coordinates, and every point fit (FitToMarkers,FitToPoints) now uses it, so a set crossing the antimeridian or wider than half the world fits its true span instead of an arbitrary hemisphere.
Changed
IMapFlyTargetgains a read-onlyRotationDeg. Add it to any custom implementation.
[0.3.0] - 2026-09-08
Changed
- Tile streaming reuses download buffers across mixed tile sizes instead of allocating fresh large ones.
TileFootprint.WorstCaseCountandScreenMapView.SelectionPinBudgetreuse their last sizing results while view settings stay unchanged, cutting repeated rotation sweeps and their allocations.SurfaceWorldMarkerRendererrefreshes changed marker filters and shapes, skips marker uploads during reanchors, and keeps marker drawing and picking aligned at half-world boundaries.PolygonLayerapplies pending edits without a reanchor.PolylineLayeruploads only changed segment blocks, shared stores included.WorldMarkerInstanceandWorldMarkerBindingare nowPrefabMarkerInstanceandPrefabMarkerBinding. Update code that names them.ScreenMapViewshows its prefab marker plane distance under the View settings in the inspector.
Added
- Unity UI (Canvas) elements block map pointer input, like the built-in overlays: a Canvas raycaster hit counts as UI, a PhysicsRaycaster or Physics2DRaycaster collider hit does not.
- Typing in a Canvas
InputFieldorTMP_InputFieldsuppresses WASD pan, zoom, and rotate. BaseMapViewgainsGetCorners,Prefabs,ViewChanged,ViewChangedDetailed,TryLatLonToWorld, andLatLonToWorld.MapFollowControllerfollows any moving object (IMapFollowTarget, prefab markers included) with heading-up rotation, screen offset, and smoothing.MapInteractionControllergainsZoomOnPointand button-awareClickedevents.- Prefab-tier markers gain press, hover, and click events. A drag starting on a marker pans the map underneath it, at the marker’s altitude; click and long press are unchanged.
MarkerTrailRecorderrecords a trail behind a moving marker.- A bulk
MarkerHandlegainsPosition,AltitudeMeters,AltitudeMode,SizeParam,SizeMode,ColorRgba, andShape, so moving or restyling a marker no longer needshandle.Store. Captions follow automatically. - Tile URL templates accept named placeholders beyond
{z},{x}, and{y}:{zoom},{-y},{q}, and{r}. ScreenMapView.CapacityPitchCapDegcaps Automatic tile-capacity sizing at an app’s real maximum tilt instead of the full 85 degrees.PolylineHandlerewrites and dashes a polyline every frame with no per-frame allocation. A line can stay constant on screen, follow a fixed ground distance with a zoom-out fade, ignore pitch, or lie flat in the ground plane.- Polyline joins and caps are rounded by default, with a per-line corner radius from sharp to fully round.
Polygons.AddPolygonreturns aPolygonHandle, whoseSetPositionsrewrites the fill without removing and re-adding the polygon.RegisterExternalOverlayaccepts a namedMapDrawOrderanchor, so a registered overlay can draw at any point in the layer order instead of always last.
Fixed
- A URP project missing
LansMapTilePassFeaturelogs an error naming the fix. - Tiles no longer render washed out in a project using Linear color space.
- Draws deferred past pipeline detachment are ignored, preventing null-reference errors and stale tiles.
- A sustained fast mouse-wheel scroll travels as far with
ZoomSnapon as with it off. - Cancelling or tearing down an elevation fetch aborts its in-flight requests.
- Polylines no longer get cut off at steep pitch. They stop at the same horizon markers and tiles already draw to.
- Horizon fade reaches polylines, bulk markers, marker labels, and filled polygons, not only tiles.
[0.2.0] - 2026-08-31
Changed
WorldMarkerManageris nowPrefabMarkerManager, naming what the type is rather than where a marker lives. Update code that names it.
Added
- Markers gain altitude modes (
MarkerAltitudeMode), ground stems under floating markers, batched shapes, and per-handleUpdateStyle. - Elevation, search, and directions are pluggable like tile providers. Two maps in one scene can each read from a different input device.
SurfaceMapViewgainsTileFadeSeconds/FadeAllLoads, and opt-in tile GPU pooling reduces web memory growth across scene switches.RasterQualityComparisonOverlay: a diagnostic panel that cycles through every tile format the device supports (BC1, ETC2).
Fixed
- Tiles decode in priority order, fade in smoothly, no longer stall after a fast pan, and stream with far less per-frame allocation.
StressMarkerDemoandFpsCounterOverlaynow label their readout “ups”, not “fps”: both measure the update loop, not the screen.- Rotated maps no longer show a grey screen-edge wedge or caption flicker, and terrain tilt can no longer outrun tile coverage.
- Scroll zoom blends wheel notches into one continuous motion, not separate jumps, and now feels consistent between a mouse wheel and a trackpad; fly-to goes straight to nearby targets (arc optional).
- Overlapping bulk 2D markers now occlude by which one is nearer the camera instead of by the order they were added.
[0.1.0] - 2026-08-16
Removed
MarkerStoreManager.HideOutsideWorldBoundsand the marker shader plumbing behind it. Under world wrap the world repeats, so “outside the world” stopped being a meaningful test.HideOffscreenMarkersalready hides markers outside the current view. A scene that saved the old field loads fine, because Unity silently drops unknown serialized fields.
Changed
Longitude
180now reads back as-180everywhere. Both spellings name the same meridian and used to draw a world apart. SettingScreenMapView.Longitudepast the range no longer throws. The value wraps around the seam, asFlyToalways did.MapBehaviouris nowScreenMapView, andMapSurfaceBehaviouris nowSurfaceMapView.Behaviourdescribed the Unity base class rather than the type.ScreenMapViewstates the role: it holds view state and drives the renderer,TileBatchRenderer. Scenes and prefabs are unaffected, because Unity resolves components by script GUID and both GUIDs are unchanged. Update code that names either type. Pre-1.0, so no deprecation shim, per the note above.
Added
Editor/LansMap.Editor.asmdef. Editor code compiled into the consumer’sAssembly-CSharp-Editorbefore this change, and UPM cannot package code without an assembly definition.GroupedEditorbase class: any serialized property a grouped inspector does not name renders under an “Other” foldout instead of vanishing.package.json,README.md, this file.- Demo scene generators pin their tile provider explicitly, so the demos keep working once the shipped default is “none”.
Fixed
- Public inspector fields hidden by the custom editors are visible again, including mobile touch tuning, cache limits, and fly timing.
- Editor scripts now compile inside the packaged editor assembly instead of leaking into the consuming project’s editor assembly.
Documentation
- Documented render pipeline support: Built-in RP only. URP and HDRP are not supported, and a URP port would be a separate release.
- Documented the web target: WebGPU only. Plain WebGL2 renders no base map because the rendering path requires structured GPU buffers.
- Documented the Latin-script label limitation.
- Expanded the demo guidance for the samples included with the package.