60 lines
No EOL
2.3 KiB
C#
Executable file
60 lines
No EOL
2.3 KiB
C#
Executable file
using System.Reflection;
|
|
using UnityEditor;
|
|
using System;
|
|
|
|
namespace ABI.CCK.Scripts.Editor
|
|
{
|
|
public static class CCK_GizmoFix
|
|
{
|
|
// TODO: Unity 2022.1 will have a new API for this, so we can remove this reflection hack.
|
|
// https://docs.unity3d.com/2022.2/Documentation/ScriptReference/GizmoUtility.SetGizmoEnabled.html
|
|
|
|
#region SetGizmoIconEnabled Reflection Hack
|
|
|
|
private static MethodInfo _setIconEnabledMethod;
|
|
|
|
private static MethodInfo SetIconEnabledMethod
|
|
{
|
|
get
|
|
{
|
|
if (_setIconEnabledMethod != null)
|
|
return _setIconEnabledMethod;
|
|
|
|
_setIconEnabledMethod = Assembly.GetAssembly(typeof(UnityEditor.Editor))
|
|
?.GetType("UnityEditor.AnnotationUtility")
|
|
?.GetMethod("SetIconEnabled", BindingFlags.Static | BindingFlags.NonPublic);
|
|
|
|
return _setIconEnabledMethod;
|
|
}
|
|
}
|
|
|
|
private static void SetGizmoIconEnabled(Type type, bool on)
|
|
{
|
|
if (SetIconEnabledMethod == null) return;
|
|
|
|
const int MONO_BEHAVIOR_CLASS_ID = 114; // https://docs.unity3d.com/Manual/ClassIDReference.html
|
|
// "Annotation not found" - type has no custom gizmo icon set.
|
|
SetIconEnabledMethod.Invoke(null, new object[] { MONO_BEHAVIOR_CLASS_ID, type.Name, on ? 1 : 0 });
|
|
|
|
// if Unity.VisualScripting is installed, we have to use this method instead:
|
|
// AnnotationUtility.Annotation annotation = AnnotationUtility.GetAnnotation(type);
|
|
// if (annotation != null) annotation.iconEnabled = on;
|
|
}
|
|
|
|
#endregion
|
|
|
|
internal static void SetGizmoIcons(bool show)
|
|
{
|
|
bool proceed = EditorUtility.DisplayDialog(
|
|
"CCK :: Gizmo Fix",
|
|
$"Are you sure you want to {(show ? "enable" : "disable")} all Gizmo icons? This will {(show ? "show" : "hide")} all `CVR` component icons in the scene view.",
|
|
"Yes", "No");
|
|
|
|
if (!proceed)
|
|
return;
|
|
|
|
foreach (Type type in CCK_ComponentRegistry.GetMonoBehaviourComponentTypes())
|
|
SetGizmoIconEnabled(type, show);
|
|
}
|
|
}
|
|
} |