using UnityEngine; using UnityEngine.UI; using TMPro; public class ColorSliderWithHex : MonoBehaviour { [SerializeField] private Slider colorSlider; [SerializeField] private Image sliderBackground; [SerializeField] private Image sliderHandle; [SerializeField] private TextMeshProUGUI hexValueText; [Header("Color Gradient Settings")] public Color startColor = Color.red; public Color middleColor = Color.green; public Color endColor = Color.blue; //Color Selector [Header("Color Selector")] [SerializeField] private Slider colorSliderSelector; [SerializeField] private Image sliderBackgroundSelector; [SerializeField] private Image sliderHandleSelector; [SerializeField] private TextMeshProUGUI hexValueTextSelector; // Store current preset for reference private int currentPreset = 0; private void Start() { if (colorSlider == null) colorSlider = GetComponent(); if (sliderHandle == null) sliderHandle = colorSlider.handleRect.GetComponent(); colorSlider.onValueChanged.AddListener(OnSliderValueChanged); if (name == "Slider_Selector") { if (colorSliderSelector == null) colorSliderSelector = GetComponent(); if (sliderHandleSelector == null) sliderHandleSelector = colorSliderSelector.handleRect.GetComponent(); colorSliderSelector.onValueChanged.AddListener(OnSliderValueChangedSelector); } SetupSliderBackground(); UpdateVisuals(colorSlider); // startColor // middleColor // endColor } public void ChangeColorPreset(int presetNumber) { currentPreset = presetNumber; switch (presetNumber) { case 0: // Sunset startColor = DOIT.CSc("#FFFFFF", 255); // Orange-Red middleColor = DOIT.CSc("#A3A3A3", 255); // Pink endColor = DOIT.CSc("#000000", 255); // Purple colorSlider.value = 0; break; case 1: startColor = DOIT.CSc("#FFFFFF", 255); middleColor = DOIT.CSc("#A3A3A3", 255); endColor = DOIT.CSc("#000000", 255); colorSlider.value = 0.5f; break; case 2: startColor = DOIT.CSc("#FFFFFF", 255); middleColor = DOIT.CSc("#A3A3A3", 255); endColor = DOIT.CSc("#333333", 255); colorSlider.value = 0.85f; break; case 3: startColor = DOIT.CSc("#FBFAF5", 255); middleColor = DOIT.CSc("#CAB675", 255); endColor = DOIT.CSc("#CAB675", 255); colorSlider.value = 0.5f; break; case 4: startColor = DOIT.CSc("#FEEEEB", 255); middleColor = DOIT.CSc("#FF0000", 255); endColor = DOIT.CSc("#58231C", 255); colorSlider.value = 0.5f; break; case 5: startColor = DOIT.CSc("#FFF0E3", 255); middleColor = DOIT.CSc("#EB7C23", 255); endColor = DOIT.CSc("#6E221E", 255); colorSlider.value = 0.5f; break; case 6: startColor = DOIT.CSc("F8F4F0", 255); middleColor = DOIT.CSc("#A67250", 255); endColor = DOIT.CSc("#663333", 255); colorSlider.value = 0.5f; break; case 7: startColor = DOIT.CSc("#FEF7DB", 255); middleColor = DOIT.CSc("#FFDE00", 255); endColor = DOIT.CSc("#57491C", 255); colorSlider.value = 0.5f; break; case 8: startColor = DOIT.CSc("#F2F7F0", 255); middleColor = DOIT.CSc("#009A4E", 255); endColor = DOIT.CSc("#213F25", 255); colorSlider.value = 0.5f; break; case 9: startColor = DOIT.CSc("#EFF3FC", 255); middleColor = DOIT.CSc("#0062AD", 255); endColor = DOIT.CSc("#0A3152", 255); colorSlider.value = 0.5f; break; case 10: startColor = DOIT.CSc("#F3F2F8", 255); middleColor = DOIT.CSc("#6060A6", 255); endColor = DOIT.CSc("#312764", 255); colorSlider.value = 0.5f; break; case 11: startColor = DOIT.CSc("#C9EAF0", 255); middleColor = DOIT.CSc("#70A1AB", 255); endColor = DOIT.CSc("##466D75", 255); colorSlider.value = 0.5f; break; case 12: startColor = DOIT.CSc("#D1E0EB", 255); middleColor = DOIT.CSc("#758694", 255); endColor = DOIT.CSc("#3A4E5E", 255); colorSlider.value = 0.5f; break; case 13: startColor = DOIT.CSc("#F2FAF8", 255); middleColor = DOIT.CSc("#89C9B9", 255); endColor = DOIT.CSc("#519181", 255); colorSlider.value = 0.5f; break; case 14: startColor = DOIT.CSc("#F2E7D5", 255); middleColor = DOIT.CSc("#D6B780", 255); endColor = DOIT.CSc("#94794B", 255); colorSlider.value = 0.5f; break; case 15: startColor = DOIT.CSc("#FAEEDF", 255); middleColor = DOIT.CSc("#E1AB6B", 255); endColor = DOIT.CSc("#996D37", 255); colorSlider.value = 0.5f; break; case 16: startColor = DOIT.CSc("#F7EFE6", 255); middleColor = DOIT.CSc("#AF9B82", 255); endColor = DOIT.CSc("#786249", 255); colorSlider.value = 0.5f; break; case 17: startColor = DOIT.CSc("#EEF0E4", 255); middleColor = DOIT.CSc("#B2B984", 255); endColor = DOIT.CSc("#5A612E", 255); colorSlider.value = 0.5f; break; case 18: startColor = DOIT.CSc("#FFFFE5", 255); middleColor = DOIT.CSc("#CCCC33", 255); endColor = DOIT.CSc("#7A7A15", 255); colorSlider.value = 0.5f; break; case 19: startColor = DOIT.CSc("#F5E6DF", 255); middleColor = DOIT.CSc("#CC6633", 255); endColor = DOIT.CSc("#994B25", 255); colorSlider.value = 0.5f; break; case 201: startColor = DOIT.CSc("#F2F2F2", 255); middleColor = DOIT.CSc("#D18984", 255); endColor = DOIT.CSc("#A71F15", 255); colorSlider.value = 0.5f; break; case 202: startColor = DOIT.CSc("#F7F6F4", 255); middleColor = DOIT.CSc("#D4B98C", 255); endColor = DOIT.CSc("#CC860E", 255); colorSlider.value = 0.5f; break; case 203: startColor = DOIT.CSc("#F7F7F7", 255); middleColor = DOIT.CSc("#E6DFB1", 255); endColor = DOIT.CSc("#E6CD2B", 255); colorSlider.value = 0.5f; break; case 204: startColor = DOIT.CSc("#FFFFFF", 255); middleColor = DOIT.CSc("#D2E3BD", 255); endColor = DOIT.CSc("#6C9730", 255); colorSlider.value = 0.5f; break; case 205: startColor = DOIT.CSc("#FFFFFF", 255); middleColor = DOIT.CSc("#AFDEDE", 255); endColor = DOIT.CSc("#008787", 255); colorSlider.value = 0.5f; break; case 206: startColor = DOIT.CSc("#FFFFFF", 255); middleColor = DOIT.CSc("#BEDCED", 255); endColor = DOIT.CSc("#006397", 255); colorSlider.value = 0.5f; break; case 207: startColor = DOIT.CSc("#FFFFFF", 255); middleColor = DOIT.CSc("#D2B9DE", 255); endColor = DOIT.CSc("#541F6C", 255); colorSlider.value = 0.5f; break; case 208: startColor = DOIT.CSc("#FFFFFF", 255); middleColor = DOIT.CSc("#E3D9C6", 255); endColor = DOIT.CSc("#8A723F", 255); colorSlider.value = 0.5f; break; } // Update the gradient and visuals SetupSliderBackground(); UpdateVisuals(colorSlider); } private void SetupSliderBackground() { Texture2D gradientTexture = new Texture2D(256, 1); for (int i = 0; i < gradientTexture.width; i++) { float t = i / (float)gradientTexture.width; Color gradientColor; if (t < 0.5f) { gradientColor = Color.Lerp(startColor, middleColor, t * 2f); } else { gradientColor = Color.Lerp(middleColor, endColor, (t - 0.5f) * 2f); } gradientTexture.SetPixel(i, 0, gradientColor); } gradientTexture.Apply(); if (sliderBackground != null) { Sprite sprite = Sprite.Create(gradientTexture, new Rect(0, 0, gradientTexture.width, gradientTexture.height), new Vector2(0.5f, 0.5f)); sliderBackground.sprite = sprite; } } private void OnSliderValueChanged(float value) { UpdateVisuals(colorSlider); } private void UpdateVisuals(Slider sliderValue) { Color currentColor; Texture2D tex; tex = sliderBackground.sprite.texture as Texture2D; // int y = tex.height / 2; // startColor = tex.GetPixel(0, y); // middleColor = tex.GetPixel(128, y); // endColor = tex.GetPixel(256, y); float t = sliderValue.normalizedValue; int x = Mathf.RoundToInt(t * (tex.width - 1)); int y = tex.height / 2; currentColor = tex.GetPixel(x, y); // if (sliderValue < 0.5f) // { // currentColor = Color.Lerp(startColor, middleColor, sliderValue * 2f); // } // else // { // currentColor = Color.Lerp(middleColor, endColor, (sliderValue - 0.5f) * 2f); // } if (sliderHandle != null) { sliderHandle.color = currentColor; } string hexColor = ColorToHex(currentColor); if (hexValueText != null) hexValueText.text = hexColor; } public void UpdateVisualsSelector(Slider sliderValue) { Texture2D tex = sliderBackgroundSelector.sprite.texture as Texture2D; float t = sliderValue.normalizedValue; int x = Mathf.RoundToInt(t * (tex.width - 1)); int y = tex.height / 2; Color currentColor = tex.GetPixel(x, y); if (sliderHandleSelector != null) { sliderHandleSelector.color = currentColor; } string hexColorSelector = ColorToHex(currentColor); if (hexValueTextSelector != null) { hexValueTextSelector.text = hexColorSelector; } } private string ColorToHex(Color color) { int r = Mathf.RoundToInt(color.r * 255); int g = Mathf.RoundToInt(color.g * 255); int b = Mathf.RoundToInt(color.b * 255); return $"#{r:X2}{g:X2}{b:X2}"; } public Color GetCurrentColor() { float value = colorSlider.value; if (value < 0.5f) { return Color.Lerp(startColor, middleColor, value * 2f); } return Color.Lerp(middleColor, endColor, (value - 0.5f) * 2f); } //New Slider private void OnSliderValueChangedSelector(float value) { UpdateVisualsSelector(colorSliderSelector); print("hexValueText.text======" + hexValueTextSelector.text); middleColor= DOIT.CSc(hexValueTextSelector.text, 255); Color.RGBToHSV(middleColor , out float h, out float s, out float v); startColor = Color.HSVToRGB(h, s * 0.4f, Mathf.Min(1f, v * 1.5f)); endColor = Color.HSVToRGB(h, Mathf.Min(1f, s * 1.1f), v * 0.5f); if (hexValueTextSelector.text == "#000000") { middleColor = Color.grey; startColor = Color.white; endColor = Color.black; } //Update the gradient and visuals SetupSliderBackground(); UpdateVisuals(colorSlider); } }