All notable changes to the SDK and it's supporting scripts will be documented in this file.
The format is based on Keep a Changelog and the SDK package adheres to Semantic Versioning.
Refer to the wiki for instructions on how to Get Started or Update to a new version of the SDK.
- Various
MapDeveloperKeySource
options forMapSession
.
- MapSceneOfBoundingBox.
- Deprecation warnings related to UnityWebRequest.
- Minimum cluster pin size is now two instead of three.
Opacity
property forTextureTileLayer
.
- Network request errors affecting Unity 2021.
- ClusterMapPinEditor throws exceptions on new projects.
- String parsing issue causing service requests to fail.
- The clipping volume now requires a dedicated layer for rendering. The layer is set to 23 by default and can be changed via the MapRenderer inspector.
- Various modifications to the cginc files to make code compatible with SRP HLSL shaders.
- Quality option to disable pre-caching of data around the current map.
- Quality slider for elevation level of detail.
- Classes for working with the WGS84:
WGS84Datum
,Vector3D
- IL2CPP build errors in 2020.3. #108
- Linear map animation with smoothing at the start and end.
- Option to always show a
MapPin
even when it's outside the map's bounds. - In scene view, Ctrl+Right-click on
MapRenderer
now provides a context menu to add aMapPin
at the selected location.
- Removed unused parameter in FilterNormals shader function.
- Editor UI now handles type load exception. #113
MapRenderer.ApplyClippingVolumePropertiesToMaterial
to allow synchronizing the values used to clip objects to the map bounds in a custom shader.
- Overloads for
HttpTextureTileLayer
's URL format placeholders. "Zoom level" can be specified using{z}
,{zoom}
, or{zoomLevel}
.
HttpTextureTileLayer
's URL format placeholders are now case-insensitive.
- GC usage reduced in
HttpTextureTileLayer
requests.
- Enhanced 3D coverage for various cities in Japan.
- Various code APIs for getting and setting render-related properties, e.g. terrain material, shadow casting, etc.
- Reduced runtime GC allocations.
- New
MapInteractionHandler
components to handle touch and mouse interaction like pan, zoom, etc. Custom implementations can be derived for different input types.
IsLoaded
property onMapRendererBase
to detect when map has completed loading all data for the current view. #31DefaultTrafficTextureTileLayer
to visualize traffic flow.
- The language used for localiztaion of map content is now a property on the
MapSession
.
- Internal exception that prevents map from loading 2020.1. #86
WaitForMapLoaded
class to that can be yielded until the map has completed loading all data for the current view. #31- Subdomain variable for
HttpTextureTileLayer
. #70
- Increased MRTK hover light count in standard terrain shaders from 1 to 2.
- Mitigate side wall rendering glitch in
MapShape.Block
mode. #72
- Remaining types of
MapRenderer
transformations:TransformMercatorWithAltitudeToLocalPoint
,TransformMercatorWithAltitudeToWorldPoint
,TransformLatLonAltToLocalPoint
- Renamed
MapNavigation
toMapInteractionController
. Added APIs for panning and zooming to a specified coordinate/ray.
MapPin
location could not be changed once initialized. #66MapLabel
scaling was incorrect on first frame. #68
This release consists of a large number of breaking changes. Various components have been moved out of the core DLL to the Supporting Scripts. See the Getting Started page for information on how to migrate from previous versions.
MapSession
component manages developer key for associatedMapRenderer
s and map services.MapRendererBase
provides an abstract base class component which includes the core map rendering functionality.IPinnable
interface is used for types that need to be geospatially anchored to the map, e.g.MapPin
,ClusterMapPin
.
MercatorBoundingCircle
moved to Microsoft.Geospatial namespace.MapRendererBase.LocalMapHeight
now represents the total height extent of the map, which varies based on content.MapRendererBase.LocalMapBaseHeight
provides the height offset where map content begins rendering.MapRendererBase.Language
property can be changed at runtime.
MapRenderer
,MapPinLayer
,MapPin
,ClusterMapPin
,MapPinSpatialIndex
,MapDataCache
. These classes, or portions of, have been moved to the Supporting Scripts.- Removed
Vector2D
. UseMercatorCoordinate
instead. - Removed
LatLon.FromMercatorPosition
. UseMercatorCoordinate.ToLatLonAlt
instead.
MapRenderer
component. Extends fromMapRendererBase
. Handles tracking childrenMapPin
s, managing the extents of theMapCollider
, and managing map animations.MapPin
related scripts and implementation for indexing and clustering.MapScene
related scripts for animations.MapDataCache
determines cache size to use. On Android, this uses platform specific APIs to find a cache size that accounts for the application's memory limit. This class could be extended with improved implementations for other platforms.- Editor utlity to help migrate old component GUIDs to the updated values. The option is in
Assets -> Maps SDK for Unity -> Upgrade Component GUIDs
.
- Fixed bug preventing correct results from
TransformWorldPointToLatLonAlt
when the map object had scaling, translation, or rotation. - Fixed related issue where
MapRendererBase.ElevationScale
was not being applied to the transformations.
- Adds dependencies to fix linker error when building iOS applications.
- Localization improvements. The
MapRenderer
automatically detects device language and culture settings to localize map content. See the Localization section of the MapRenderer's settings. - Helper class to convert Unity
SystemLanguage
enumerations to LCIDs or culture codes. - Ability to modify or disable the collider being used for rough collisions.
- Enabled options in the
DefaultTextureTileLayer
to provide raster imagery with roads, borders, and labels. #34
- Meta files used for native plugins are now compatible with Unity 2018.4+. #52
- Fixed bug that caused raycast to fail in some conditions.
- Reduced overhead of clipping distance render pass.
- Native plugin that improves the efficiency of decoding map data and signifcantly reduces GC usage. Supported platforms: Android/iOS/Windows.
- Compressed texture formats for model data on Android/iOS, reducing memory usage on these platforms.
- Elevation scale API that can be used to exaggerate or flatten terrain. #50
- Removed support for the deprecated UWP .NET scripting backend.
- Removed 257x257 dimension restriction of
ElevationTiles
.
- Threading issue causing map data to not load. (#40)
- Further reduced large temporary GC allocations on background threads.
UnityWebRequestAwaiterExtensionMethods
to enable UnityWebRequests to be used with async/await.
ElevationTileLayer
to enable rendering custom elevation data sources.
- More reduction of GC allocations. There are no longer allocations when the map is idle.
- Copyright text not being culled and showing through map.
- Copyright text misaligned in certain rotations.
TextureTile.FromUrl
API to simplify requesting images (JPEG/PNG) from the web. Custom implementations ofTextureTileLayer
will no longer need to interact with UnityWebRequest or HttpClient to request imagery.UnityTaskFactory
provides some utility APIs to run async tasks on Unity's main thread.
TextureTileLayer
API return type has been changed to aNullable<TextureTile>
. This is a breaking change if you have implemented a customTextureTileLayer
.
- Empty textures on iOS caused by DXT1 texture format. Any DXT1 texture will now be transcoded to RGB24 (on iOS only).
- Large reduction in overall size and frequency of GC allocations caused by the MapRenderer.
HttpTextureTileLayer
updated to leverageTextureTile.FromUrl
API.
- Circular
MapShape
option.
- New approach for rendering side walls of map. Does not rely on geometry shaders.
- The maximum cache size used for storing map data is now configurable. See the Quality Settings section of the MapRenderer's editor. (#35)
- The default MapRenderer cache size has been lowered. Currently the cache size uses 1/3 of system memory, but can be no larger than 2GB. The maximum size is now configurable. (#35)
- Intermittent exception message related to TextureTileLayers. (#35)
- The MapRenderer now respects layer setting of the GameObject. MapPins and MapLabels automatically use same layer as parent MapRenderer. (#32)
- The
DefaultTextureTileLayer
now supports Bing Maps symbolic imagery as well as aerial imagery with road and label overlays. Previously aerial imagery (without road overlays or labels) was the only imagery type supported.
HttpTextureTileLayer
component that makes it easy to stream texture tiles by specifying a formatted URL.- More Editor UI improvements around
TextureTileLayer
. Right-clicking a tile layer in list now brings up option to edit the underlying script.
MapRendererTransformExtension
APIs renamed to more closely follow Unity's transformation-related methods.
TextureTileLayer
class that can be extended to customize imagery used by theMapRenderer
. Implementations can request data from other Web Mercator tile services, load texture data from disk, or generate textures on the fly. MultipleTextureTileLayers
can be used and layered together, e.g. to overlay partially transparent textures like weather data.DefaultTextureTileLayer
is added automatically to theMapRenderer
. Pulls sattelite aerial imagery from Bing Maps.- Option to enable MRTK hoverlight functionality on the
MapRenderer
terrain.
- Spammy error logging when key is invalid.
- Inaccurate results when raycasting elevation data.
- Inaccurate rendering of elevation data.
MapContourLineLayer
renders lines of constant elevation. Line interval and color can be changed dynamically.- Various editor scripts for modifying
TextureTileLayers
.
- Ability to increase or decrease the terrain quality of the
MapRenderer
. - Ability to disable high-res 3D terrain models, i.e. only use height-map based elevation.
- Ability to render only a flat map surface by disabling aforementioned 3D terrain sources.
- In-editor mouse controls to drag the center of the
MapRenderer
and adjust it's zoom level. Similar mouse controls added forMapPins
to allow for adjusting a pin's position relative to the map. MapPinLayer
now supports serialization of it's children items, soMapPins
can be added to the layer in the editor rather than strictly at runtime.
- Copyright settings for
MapRenderer
now managed by separate component,MapCopyrightLayer
. This component is auto-added toGameObjects
with aMapRenderer
component.
- Handle case when developer key isn't present more gracefully. Less console spam and
MapPins
will continue to position correctly.
- Initial Bing Maps service API. Currently supports geocoding and reverse geocoding via the
LocationFinder
. - Editor scripts for various components have been moved out of the DLL and are now available in the supporting scripts.
- Editor UI refresh for MapRenderer. Among other visual improvements, the developer key field acts as a password field and the value is now hidden by asterisks.
MapScene
animation-related logic has been modularized and is now customizable. Default implementation moved to supporting scripts.- Refreshed editor UI for the
MapRenderer
.
- Clamp boundary values for various
MapRenderer
properties like center and zoom level.
- Method to calculate scale ratio between the map and Unity's world space.
DefaultAnimationController
implementation used for animatingMapScenes
. This implementation improves the animation speed to account for the logarithmic scaling of zoom level.
- Additional max distance parameter for the raycast API.
- Provide normal and distance in the raycast result.
- Extension class to
MapRenderer
for transforming points between Unity's world and local coordinate spaces to the map's geographic coordinate system (latitude, longitude, and altitude).
- Rolled back elevation fallback logic which was based on BC1 texture support of the device. Unity is decoding BC1 to RGB automatically.
- Raycast API on
MapRenderer
to return hit point and corresponding LatLonAlt of a ray intersection with the map.
- Perf improvement for rendering. Reduces number of vertices required in certain views.
- Map edge no longer disappears when the map surface is above the viewport.
- Android/iOS compatibility improvements: High-res meshes would render incorrectly on devices that do not support the BC1 texture format. If the device lacks BC1 texture support, fall back to elevation-only rendering instead, which uses the widely supported RGB texture format.
- Networking performance improvements.
- Copyright text is now positioned correctly when the map layout is not using the default dimensions.
- Cleaned up the
ClusterMapPin
editor UI to remove unnecessary properties.
- Regression in
MapPin
size when using real-world scale.
- Altitude can now be specified on MapPins.
- Maps SDK-related components will now have their help icons direct out to the relevant wiki doc page.
- Custom Maps SDK component icons for the editor are now working again.
MapPins
childed toMapRenderer
are positioned correctly in editor after script reloading.
- Elevation terrain tiles will now fall back to lower LODs correctly.
- Seams between tiles should now be much less visible.
MapRenderer
component that handles streaming and rendering of 3D terrain data.MapPinLayer
that allows for positioningGameObjects
on theMapRenderer
at a specified LatLon.- Ability to cluster
MapPins
perMapPinLayer
. This allows for efficiently rendering large data sets. - Ability to animate the position and zoom level of the map via the
SetMapScene
API. MapLabelLayer
for displaying city labels.- Support for shadow casting and receiving of the map.
- Option to use a custom material for terrain.
- Shader for rendering terrain with support for shadows, heightmap offsets, and clipping to the
MapRenderer
's dimensions. - Shader for rendering side of map. Dynamically generates appropriate triangles by the geometry shader. Supports shadows.
- Script with helper functions to navigate the MapRenderer, e.g. panning and zooming.
- Script for animating map to the specified location and zoom level.