using System; using UnityEngine; public class TilesetOverlayUsingShader7 : MonoBehaviour { public OnlineMapsTileSetControl control; public Props[] props = new Props[0]; private void Start() { if (control == null) control = OnlineMapsTileSetControl.instance; control.OnDrawTile += OnDrawTile; } private void OnDrawTile(OnlineMapsTile tile, Material material) { for (int i = 0; i < Mathf.Min(props.Length, 7); i++) { int index = i + 1; Props p = props[i]; Vector3 p1 = control.GetWorldPosition(p.leftLongitude, p.topLatitude); Vector3 p2 = control.GetWorldPosition(p.rightLongitude, p.bottomLatitude); material.SetTexture("_OverlayTex" + index, p.texture); material.SetFloat("_OverlayAlpha" + index, p.GetAlpha()); material.SetVector("_OverlayTL" + index, p1); material.SetVector("_OverlayBR" + index, p2); } } private void Update() { for (int i = 0; i < Mathf.Min(props.Length, 7); i++) { if (props[i].IsChanged()) { control.map.Redraw(); break; } } } [Serializable] public class Props { public bool enabled = true; [Range(0, 1)] public float alpha = 1; public Texture texture; public double leftLongitude; public double topLatitude; public double rightLongitude; public double bottomLatitude; private float _alpha = 1; public bool IsChanged() { return _alpha != alpha; } public float GetAlpha() { if (!enabled) return 0; return _alpha = alpha; } } }