-
-
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.