using System; using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; using UnityEngine.UI; public class ImageColorPicker : MonoBehaviour, IPointerClickHandler { public Color selectedColor; [Serializable] public class ColorEvent : UnityEvent { } public ColorEvent OnColorPicked = new ColorEvent(); public void OnPointerClick(PointerEventData eventData) { selectedColor = GetColor(GetPointUVPosition()); OnColorPicked.Invoke(selectedColor); } private Color GetColor(Vector2 pos) { Texture2D texture = GetComponent().sprite.texture; Color selected = texture.GetPixelBilinear(pos.x, pos.y); selected.a = 1; return selected; } private Vector2 GetPointUVPosition() { Vector3[] imageCorners = new Vector3[4]; gameObject.GetComponent().GetWorldCorners(imageCorners); float texWidth = imageCorners[2].x - imageCorners[0].x; float texHeight = imageCorners[2].y - imageCorners[0].y; float uvX = (Input.mousePosition.x - imageCorners[0].x) / texWidth; float uvY = (Input.mousePosition.y - imageCorners[0].y) / texHeight; return new Vector2(uvX, uvY); } }