Files
SimUL/Assets/Scripts/UI/ImageColorPicker.cs
T
2025-01-07 21:43:47 +02:00

40 lines
1.2 KiB
C#

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<Color> { }
public ColorEvent OnColorPicked = new ColorEvent();
public void OnPointerClick(PointerEventData eventData)
{
selectedColor = GetColor(GetPointUVPosition());
OnColorPicked.Invoke(selectedColor);
}
private Color GetColor(Vector2 pos)
{
Texture2D texture = GetComponent<Image>().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<RectTransform>().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);
}
}