Home > Back-end >  Hide Custom Script Gizmo In Scene Unity
Hide Custom Script Gizmo In Scene Unity

Time:12-29

From Unity Manual:

Unity allows you to assign custom icons for GameObjects and scripts. These icons display in the Scene view, along with built-in icons for items such as Lights and Cameras. Use the Gizmos menu to control how icons are drawn in the Scene view.

This icon is also displayed in the Scene View As Shown. But if multiple objects have the script and are closer together the scene view looks like a mess, especially in the 2D gizmos view:

upload_2022-12-25_15-22-28.png

How can I remove the icon from the scene view and keep it in the inspector and project window?

I have tried using the GizmoUtility.SetGizmoEnabled function. But it didn't work!

CodePudding user response:

I've been trying to solve this issue myself for some time, and It seems the only way is by disabling the gizmos of your specific MonoBehaviour through reflection.

Here's where I found my solution. The last answer by Acegikmo gives a concise method that solves the issue perfectly. https://answers.unity.com/questions/851470/how-to-hide-gizmos-by-script.html

static MethodInfo setIconEnabled;
static MethodInfo SetIconEnabled => setIconEnabled = setIconEnabled ??
    Assembly.GetAssembly( typeof(Editor) )
    ?.GetType( "UnityEditor.AnnotationUtility" )
    ?.GetMethod( "SetIconEnabled", BindingFlags.Static | BindingFlags.NonPublic );
 
public static void SetGizmoIconEnabled( Type type, bool on ) {
    if( SetIconEnabled == null ) return;
    const int MONO_BEHAVIOR_CLASS_ID = 114; // https://docs.unity3d.com/Manual/ClassIDReference.html
    SetIconEnabled.Invoke( null, new object[] { MONO_BEHAVIOR_CLASS_ID, type.Name, on ? 1 : 0 } );
}

You just need to call the method SetGizmoIconEnabled from anywhere for the Type of your MonoBehaviour and it should work.

  • Related