-
-
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; | |
} | |
} |
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.
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)
@TheBoje,
Once you've added the script to your Unity project, you should be able to activate the dark theme from the Unity menu bar. Go to the "Theme" dropdown and click "Init Dark." Hopefully this works for you!