-
-
Save instance-id/3046ad29bd8782a3b3398cd9ae48ca92 to your computer and use it in GitHub Desktop.
| // --- instance.id ------------------------------------------------------------ | |
| // Thanks to TheZombieKiller and Peter77 for creating this | |
| // https://forum.unity.com/threads/editor-skinning-thread.711059/#post-4785434 | |
| // Tested on Unity 2019.3.0b1 - 95% Dark mode Conversion | |
| // Example Screenshot - https://i.imgur.com/9q5VPQk.png | |
| // (Note - Once I ran this, I had to hit play and then it took effect) | |
| // ---------------------------------------------------------------------------- | |
| using System; | |
| using System.Text.RegularExpressions; | |
| using UnityEngine; | |
| using UnityEngine.UIElements; | |
| using UnityEditor; | |
| using UnityEditorInternal; | |
| public static class DarkTheme | |
| { | |
| [MenuItem("Theme/Init Dark")] | |
| static void Init() | |
| { | |
| foreach (var sheet in Resources.FindObjectsOfTypeAll<StyleSheet>()) | |
| { | |
| if (ContainsInsensitive(sheet.name, "Dark")) | |
| continue; | |
| if (!ContainsInsensitive(sheet.name, "Light")) | |
| { | |
| InvertColors(sheet); | |
| continue; | |
| } | |
| var dark = null as StyleSheet; | |
| var path = ReplaceInsensitive(AssetDatabase.GetAssetPath(sheet), "Light", "Dark"); | |
| var name = ReplaceInsensitive(sheet.name, "Light", "Dark"); | |
| if (path == "Library/unity editor resources") | |
| dark = EditorGUIUtility.Load(name) as StyleSheet; | |
| else | |
| dark = AssetDatabase.LoadAssetAtPath<StyleSheet>(path); | |
| if (!dark) | |
| InvertColors(sheet); | |
| else | |
| { | |
| string oldName = sheet.name; | |
| EditorUtility.CopySerialized(dark, sheet); | |
| sheet.name = oldName; | |
| } | |
| } | |
| InternalEditorUtility.RequestScriptReload(); | |
| InternalEditorUtility.RepaintAllViews(); | |
| } | |
| static void InvertColors(StyleSheet sheet) | |
| { | |
| var serialized = new SerializedObject(sheet); serialized.Update(); | |
| var colors = serialized.FindProperty("colors"); | |
| for (int i = 0; i < colors.arraySize; i++) | |
| { | |
| var property = colors.GetArrayElementAtIndex(i); | |
| Color.RGBToHSV(property.colorValue, out var h, out var s, out var v); | |
| property.colorValue = Color.HSVToRGB(h, s, 1 - v); | |
| } | |
| serialized.ApplyModifiedProperties(); | |
| } | |
| static string ReplaceInsensitive(string str, string oldValue, string newValue) | |
| { | |
| return Regex.Replace(str, Regex.Escape(oldValue), newValue.Replace("$", "$$"), RegexOptions.IgnoreCase); | |
| } | |
| static bool ContainsInsensitive(string str, string find) | |
| { | |
| return str.IndexOf(find, StringComparison.OrdinalIgnoreCase) != -1; | |
| } | |
| } |
Thanks both @lestinkemonke @instance-id , however I figured out a couple hours later and forgot about this post. Btw thanks for saving my eyes, I justed used it during the Global Gam Jam I took part in.
Hey you should replace InternalEditorUtility.RequestScriptReload(); with UnityEditor.EditorUtility! Since it is deprecated. :) Love this dark theme! 👍
If this is not working for you, just change InternalEditorUtility.RepaintAllViews(); in the script to InternalEditorUtility.SwitchSkinAndRepaintAllViews(); - and you should be fine
If this is not working for you, just change InternalEditorUtility.RepaintAllViews(); in the script to InternalEditorUtility.SwitchSkinAndRepaintAllViews(); - and you should be fine
Can't seem to get it working with Unity 2019.3.12f1
I adds the "Theme" menu option > Init Dark ... but it doesn't seem to do anything even after Play =(
Any tips?
THANK YOU !!! (my eyes thank you as well)
Yes, in the root of your project explorer, if you don't have one, create a folder called "Editor", in there make a new script called DarkTheme.cs and then paste this code into it and have Unity refresh. Then the new menu item will appear in the menu bar.