|
|
- using UnityEditor;
- using UnityEngine.UI;
- using UnityEngine;
-
- public class RaycastTargetChecker : EditorWindow
- {
- private MaskableGraphic[] graphics;
- private bool hideUnchecked = false;
- private bool showBorders = true;
- private Color borderColor = Color.blue;
- private Vector2 scrollPosition = Vector2.zero;
-
- private static RaycastTargetChecker instance = null;
-
- [MenuItem("Tools/RaycastTarget Checker")]
- private static void Open()
- {
- instance = instance ?? EditorWindow.GetWindow<RaycastTargetChecker>("RaycastTargets");
- instance.Show();
- }
-
- void OnEnable()
- {
- instance = this;
- }
-
- void OnDisable()
- {
- instance = null;
- }
-
- void OnGUI()
- {
- using (EditorGUILayout.HorizontalScope horizontalScope = new EditorGUILayout.HorizontalScope())
- {
- showBorders = EditorGUILayout.Toggle("Show Gizmos", showBorders, GUILayout.Width(200.0f));
- borderColor = EditorGUILayout.ColorField(borderColor);
- }
- hideUnchecked = EditorGUILayout.Toggle("Hide Unchecked", hideUnchecked);
-
- GUILayout.Space(12.0f);
- Rect rect = GUILayoutUtility.GetLastRect();
- GUI.color = new Color(0.0f, 0.0f, 0.0f, 0.25f);
- GUI.DrawTexture(new Rect(0.0f, rect.yMin + 6.0f, Screen.width, 4.0f), EditorGUIUtility.whiteTexture);
- GUI.DrawTexture(new Rect(0.0f, rect.yMin + 6.0f, Screen.width, 1.0f), EditorGUIUtility.whiteTexture);
- GUI.DrawTexture(new Rect(0.0f, rect.yMin + 9.0f, Screen.width, 1.0f), EditorGUIUtility.whiteTexture);
- GUI.color = Color.white;
-
- graphics = GameObject.FindObjectsOfType<MaskableGraphic>();
-
- using (GUILayout.ScrollViewScope scrollViewScope = new GUILayout.ScrollViewScope(scrollPosition))
- {
- scrollPosition = scrollViewScope.scrollPosition;
- for (int i = 0; i < graphics.Length; i++)
- {
- MaskableGraphic graphic = graphics[i];
- if (hideUnchecked == false || graphic.raycastTarget == true)
- {
- DrawElement(graphic);
- }
- }
- }
- foreach (var item in graphics)
- {
- EditorUtility.SetDirty(item);
- }
- Repaint();
- }
-
- private void DrawElement(MaskableGraphic graphic)
- {
- using (EditorGUILayout.HorizontalScope horizontalScope = new EditorGUILayout.HorizontalScope())
- {
- Undo.RecordObject(graphic, "Modify RaycastTarget");
- graphic.raycastTarget = EditorGUILayout.Toggle(graphic.raycastTarget, GUILayout.Width(20));
- EditorGUI.BeginDisabledGroup(true);
- EditorGUILayout.ObjectField(graphic, typeof(MaskableGraphic), true);
- EditorGUI.EndDisabledGroup();
- }
- }
-
- [DrawGizmo(GizmoType.Selected | GizmoType.NonSelected)]
- private static void DrawGizmos(MaskableGraphic source, GizmoType gizmoType)
- {
- if (instance != null && instance.showBorders == true && source.raycastTarget == true)
- {
- Vector3[] corners = new Vector3[4];
- source.rectTransform.GetWorldCorners(corners);
- Gizmos.color = instance.borderColor;
- for (int i = 0; i < 4; i++)
- {
- Gizmos.DrawLine(corners[i], corners[(i + 1) % 4]);
- }
- if (Selection.activeGameObject == source.gameObject)
- {
- Gizmos.DrawLine(corners[0], corners[2]);
- Gizmos.DrawLine(corners[1], corners[3]);
- }
- }
- SceneView.RepaintAll();
- }
- }
|