Hello.
This is a bug in OnlineMapsControlBase.GetPosition.
Fixed. The new version will be available soon.
Most likely you do not need this, but in Online Maps v3 there is an opportunity to rewrite marker drawer without creating your own system of markers.
You use the built-in marker engine + your own marker drawer.
Example:
using UnityEngine;
public class uGUIMarkerDrawer:MonoBehaviour
{
private static uGUIMarkerDrawer instance;
public RectTransform container;
public GameObject prefab;
private Canvas canvas;
private Camera worldCamera
{
get
{
if (canvas.renderMode == RenderMode.ScreenSpaceOverlay) return null;
return canvas.worldCamera;
}
}
private void OnEnable()
{
instance = this;
canvas = container.GetComponentInParent<Canvas>();
}
private void Start()
{
OnlineMapsControlBase.instance.markerDrawer = new Drawer(OnlineMapsControlBase.instance);
}
public class Drawer : OnlineMapsMarker2DDrawer
{
private OnlineMapsControlBase control;
public Drawer(OnlineMapsControlBase control)
{
this.control = control;
control.OnDrawMarkers += OnDrawMarkers;
}
public override void Dispose()
{
control.OnDrawMarkers -= OnDrawMarkers;
control = null;
}
private void OnDrawMarkers()
{
double tlx, tly, brx, bry;
map.GetCorners(out tlx, out tly, out brx, out bry);
foreach (OnlineMapsMarker marker in OnlineMapsMarkerManager.instance.items)
{
DrawMarker(marker, tlx, tly, brx, bry);
}
}
private void DrawMarker(OnlineMapsMarker marker, double tlx, double tly, double brx, double bry)
{
double px, py;
marker.GetPosition(out px, out py);
GameObject markerInstance = marker["instance"] as GameObject;
if (px < tlx || px > brx || py < bry || py > tly)
{
if (markerInstance != null)
{
OnlineMapsUtils.Destroy(markerInstance);
marker["instance"] = null;
}
return;
}
if (markerInstance == null)
{
marker["instance"] = markerInstance = Instantiate(instance.prefab);
(markerInstance.transform as RectTransform).SetParent(instance.container);
markerInstance.transform.localScale = Vector3.one;
}
Vector2 screenPosition = control.GetScreenPosition(px, py);
RectTransform markerRectTransform = markerInstance.transform as RectTransform;
screenPosition.y += markerRectTransform.rect.height / 2;
Vector2 point;
RectTransformUtility.ScreenPointToLocalPointInRectangle(markerRectTransform.parent as RectTransform, screenPosition, instance.worldCamera, out point);
markerRectTransform.localPosition = point;
}
}
}
Kind Regards,
Infinity Code Team.
Boost your productivity a lot and immediately using
Ultimate Editor Enhancer.
Trial and non-commerce versions available.