using System;
using UnityEditor;
using UnityEngine;
// An Editor Window that lets you edit the gizmo and icon properties for each selected component.
public class GizmoUtilityExample : EditorWindow
{
[MenuItem("Window/Gizmo Window")]
static void Init() => GetWindow<GizmoUtilityExample>();
Vector2 m_Scroll;
void OnEnable()
{
autoRepaintOnSceneChange = true;
}
void OnGUI()
{
GizmoUtility.use3dIcons = EditorGUILayout.Toggle("3D Icons", GizmoUtility.use3dIcons);
EditorGUI.BeginDisabled(!GizmoUtility.use3dIcons);
GizmoUtility.iconSize = EditorGUILayout.Slider("3D Icon Size", GizmoUtility.iconSize, 0f, 1f);
EditorGUI.EndDisabled();
m_Scroll = EditorGUILayout.BeginScrollView(m_Scroll);
foreach (var go in Selection.gameObjects)
{
GUILayout.Label($"{go.name} Gizmos", EditorStyles.boldLabel);
EditorGUI.indentLevel++;
foreach (var component in go.GetComponents<Component>())
{
// A component can have gizmos, an icon, both, or neither. A gizmo can also be disabled (the Editor
// is collapsed in the Inspector).
if (GizmoUtility.TryGetGizmoInfo(component.GetType(), out GizmoInfo info))
{
EditorGUI.BeginChangeCheck();
if (info.hasGizmo)
info.gizmoEnabled = EditorGUILayout.Toggle($"{info.name} Gizmo", info.gizmoEnabled);
if (info.hasIcon)
info.iconEnabled = EditorGUILayout.Toggle($"{info.name} Icon", info.iconEnabled);
if (EditorGUI.EndChangeCheck())
GizmoUtility.ApplyGizmoInfo(info);
}
}
EditorGUI.indentLevel--;
}
EditorGUILayout.EndScrollView();
}
}