using UnityEngine; using UnityEditor; namespace LIB.cs2307211400 { public interface IClass { void ПоказатьТестовыйЦвет(); } /// <summary> /// Редактируемый цвет /// </summary> public class Class : IClass { public Class() { СозданиеТекстуры(); } #region Static static private readonly GUILayoutOption[] w = new GUILayoutOption[] { GUILayout.Width(20) }; static private readonly Color[] МассивЦветов = new Color[] { Color.black, Color.gray, Color.green, Color.blue, Color.cyan, Color.yellow, Color.magenta, Color.red, new Color32(165, 130, 82, 255),//коричневый new Color(0.85f, 0.7f, 0.4f),//коричневый }; #endregion #region Текстура static private byte РазмерТекстуры2 = 16; private Texture2D texture2d; private Vector2Int КоординатаЦвета = Vector2Int.zero; public void СозданиеТекстуры() { texture2d = new Texture2D(РазмерТекстуры2, РазмерТекстуры2, TextureFormat.RGB24, false); texture2d.wrapMode = TextureWrapMode.Repeat; texture2d.filterMode = FilterMode.Point; } public void ОбновитьПиксельТекстуры()=> texture2d.SetPixel(КоординатаЦвета.x, КоординатаЦвета.y, Цвет); public void ВыборПикселя() { for (var y = texture2d.height - 1; y >= 0; y--) { GUILayout.BeginHorizontal(w); for (var x = 0; x < texture2d.width; x++) { var Этот = x == КоординатаЦвета.x && y == КоординатаЦвета.y; GUI.color = texture2d.GetPixel(x, y); if (GUILayout.Button("", new GUILayoutOption[] { GUILayout.Width(Этот ? 15 : 20), GUILayout.Height(Этот ? 15 : 20) })) { КоординатаЦвета = new Vector2Int(x, y); if (!Event.current.control) Цвет = GUI.color; else ОбновитьПиксельТекстуры(); } GUI.color = Color.white; } GUILayout.EndHorizontal(); } } public void ФормаВыборПикселя() { GUILayout.BeginVertical(new GUILayoutOption[] { GUILayout.Height(200) }); ВыборПикселя(); GUILayout.EndVertical(); } #endregion #region Color private Color Цвет = Color.white; public void ПоказатьТестовыйЦвет() { ФормаВыборПикселя(); GUILayout.BeginHorizontal(); ВыборЦвета(); Цвет = EditorGUILayout.ColorField(Цвет); ВыборЯркостиЦвета(); GUILayout.EndHorizontal(); } public void ВыборЦвета() { foreach (var c in МассивЦветов) ВыбратьЯркостьЦвета(c); GUI.color = Color.white; ; } #endregion #region Яркость int bright = 0; public void ВыборЯркостиЦвета() { var new_bright = EditorGUILayout.IntSlider(bright, 0, byte.MaxValue); if (new_bright != bright) { bright = new_bright; Яркость(); } } public void ВыбратьЯркостьЦвета(Color new_color) { GUI.color = new_color; if (GUILayout.Button("", w)) { Цвет = new_color; ОбновитьПиксельТекстуры(); ОбновитьЯркостьЦвета(); } } public void ОбновитьЯркостьЦвета() { float h = 0; float s = 0; float v = 0; Color.RGBToHSV(Цвет, out h, out s, out v); bright = (int)(v * 255.0f); } public bool Яркость() { float h = 0; float s = 0; float v = 0; Color.RGBToHSV(Цвет, out h, out s, out v); v = bright / 255.0f; Цвет = Color.HSVToRGB(h, s, v); ОбновитьПиксельТекстуры(); return true; } #endregion } }
Рубрики