using UnityEngine; using UnityEngine.UI; public class uGUICustomTooltipForAllMarkersExample2:MonoBehaviour { public GameObject tooltipPrefab; public Canvas container; private void Start() { OnlineMapsMarkerBase.OnMarkerDrawTooltip = delegate { }; OnlineMaps.instance.OnUpdateLate += OnUpdateLate; OnlineMapsControlBase.instance.OnMapClick += () => OnlineMaps.instance.AddMarker(OnlineMapsControlBase.instance.GetCoords(), "Marker " + (OnlineMaps.instance.markers.Length + 1)); } private void DestroyTooltip(OnlineMapsMarker marker) { Tooltip tooltip = marker.customData as Tooltip; if (tooltip == null) return; OnlineMapsUtils.DestroyImmediate(tooltip.gameObject); tooltip.gameObject = null; tooltip.textComponent = null; tooltip.transform = null; marker.customData = null; } private void OnUpdateLate() { foreach (OnlineMapsMarker marker in OnlineMaps.instance.markers) { if (string.IsNullOrEmpty(marker.label)) { DestroyTooltip(marker); continue; } if (!marker.inMapView) { DestroyTooltip(marker); continue; } Vector2 screenPosition = OnlineMapsControlBase.instance.GetScreenPosition(marker.position); screenPosition.y += marker.height; Vector2 point; RectTransformUtility.ScreenPointToLocalPointInRectangle(container.transform as RectTransform, screenPosition, null, out point); Tooltip tooltip = marker.customData as Tooltip; if (tooltip == null) { GameObject tooltipGO = Instantiate(tooltipPrefab) as GameObject; tooltip = new Tooltip { gameObject = tooltipGO, transform = tooltipGO.transform as RectTransform, textComponent = tooltipGO.GetComponentInChildren() }; tooltip.transform.SetParent(container.transform); marker.customData = tooltip; } tooltip.transform.localPosition = point; tooltip.textComponent.text = marker.label; } } public class Tooltip { public GameObject gameObject; public RectTransform transform; public Text textComponent; } }