using UnityEngine; public class Marker3D_SetAltitude:MonoBehaviour { public float altitude = 1000; // Meters public GameObject marker; // Prefab private OnlineMaps api; private OnlineMapsTileSetControl control; private int defaultZoom = 8; private OnlineMapsMarker3D marker3D; private void Start() { api = OnlineMaps.instance; control = OnlineMapsTileSetControl.instance; marker3D = control.AddMarker3D(OnlineMaps.instance.position, marker); // To prevent blink. marker3D.OnPositionChanged += d => LateUpdate(); // Click on the map to get the elevation value at the point. control.OnMapClick += () => { Vector3 pos = control.GetWorldPosition(control.GetCoords()); Vector2 topLeftPosition = api.topLeftPosition; Vector2 bottomRightPosition = api.bottomRightPosition; float elevationValue = control.GetElevationValue(pos.x, pos.z, 1, topLeftPosition, bottomRightPosition); Debug.Log(elevationValue); }; } private void LateUpdate() { float originalScale = 1 << defaultZoom; float currentScale = 1 << api.zoom; marker3D.scale = currentScale / originalScale; Vector3 pos = marker3D.instance.transform.position; Vector2 topLeftPosition = api.topLeftPosition; Vector2 bottomRightPosition = api.bottomRightPosition; float bestElevationYScale = control.GetBestElevationYScale(topLeftPosition, bottomRightPosition); pos.y = altitude * bestElevationYScale * control.elevationScale + api.transform.position.y; marker3D.instance.transform.position = pos; } }