-
-
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; | |
} | |
} |
No, it seems that the same thing happens to everyone.
I will try to work on it in the meantime I hope that someone will discover how to fix it because it is really useful.
Ok, as I experiment with what we are waiting for and see what happens.
For the moment the important thing is not to remain blinded, it is already so hahaha
Hello there,
I'm trying to understand how to setup this script. I can't manage to get this one working.
Thanks
@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!
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)
Yeah, it seems that it has to go through a reload, which was why I mentioned in the comments "Note - Once I ran this, I had to hit play and then it took effect". You can try one of the repos that the other folks in the comments have made and see if that helps any.