UnityGUIのカラーフィールドを使うと、エディタ上ではカラーピッカーを利用できますが、プレイモード中にはカラーピッカーが使えません。
そのため、エディタ上でテストなどで簡単にカラーピッカーを使いたい場合は、別途カラーピッカーを実装する必要があります。
それを利用できるようにしたのが以下のカラーピッカーです
#if UNITY_EDITOR using System; using System.Reflection; using UnityEditor; using UnityEngine; public static class EditorColorPickerUtility { private static Type[] _methodParameters = new Type[] { typeof(Action<Color>), typeof(Color), typeof(bool), typeof(bool) }; private const BindingFlags _flags = BindingFlags.Static | BindingFlags.Public; public static void Show(Color baseColor, Action<Color> changeCallback, bool showAlpha = true, bool hdr = false) { EditorApplication.delayCall += () => { var colorPickerType = typeof(EditorWindow).Assembly.GetType("UnityEditor.ColorPicker"); var parameters = new object[] { changeCallback, baseColor, showAlpha, hdr }; var showMethod = colorPickerType.GetMethod("Show", _flags, null, _methodParameters, null); showMethod.Invoke(null, parameters); }; } } #endif
クラスが pubic じゃないためリフレクションでの利用となっていますが、ボタンをクリックした際に表示することができるようになります
ColorPickerは EditorGUIから呼び出されないとSkinが存在しないため EditorGUIから呼び出されたとみなすためにEditorApplication.delayCallを利用しています