private void UpdateMesh() { OnlineMapsTileSetControl control = OnlineMapsTileSetControl.instance; if (tilesetCollider == null) { tilesetCollider = control.GetComponent <Collider>(); } Bounds bounds = tilesetCollider.bounds; // Clear overlay mesh overlayMesh.Clear(true); // Init verticles and normals float y = bounds.max.y + 0.5f; overlayMesh.vertices = new[] { new Vector3(bounds.min.x, y, bounds.min.z), new Vector3(bounds.min.x, y, bounds.max.z), new Vector3(bounds.max.x, y, bounds.max.z), new Vector3(bounds.max.x, y, bounds.min.z) }; overlayMesh.normals = new[] { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; // Init overlay UV OnlineMaps map = OnlineMaps.instance; double tlx, tly, brx, bry; map.GetTileCorners(out tlx, out tly, out brx, out bry); int maxTileCount = 1 << map.zoom; float uvX1 = (float)(tlx / maxTileCount); float uvX2 = (float)(brx / maxTileCount); if (uvX1 > uvX2) { uvX2 += 1; } float uvY1 = (float)(1 - tly / maxTileCount); float uvY2 = (float)(1 - bry / maxTileCount); overlayMesh.uv = new[] { new Vector2(uvX2, uvY1), new Vector2(uvX2, uvY2), new Vector2(uvX1, uvY2), new Vector2(uvX1, uvY1) }; // Init triangles overlayMesh.SetTriangles(new[] { 0, 1, 2, 0, 2, 3 }, 0); overlayMesh.RecalculateBounds(); overlayMesh.RecalculateNormals(); }