-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDebugUIEventSystemWindow.cs
More file actions
116 lines (99 loc) · 3.24 KB
/
DebugUIEventSystemWindow.cs
File metadata and controls
116 lines (99 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using UnityEditor;
using UnityEngine;
using UnityEngine.EventSystems;
#if ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem.UI;
#endif
namespace Plugins.Editor
{
[EditorWindowTitle(title = TITLE)]
public sealed class DebugUIEventSystemWindow : EditorWindow
{
public const string TITLE = "Debug UI.EventSystem";
private static GUIStyle STYLE = new GUIStyle();
private string content;
private EventSystem eSystem;
private Vector2 _scroll;
private void OnEnable() => titleContent = new GUIContent(TITLE);
private void FindSystem()
{
if (eSystem) return;
eSystem = FindAnyObjectByType<EventSystem>();
}
private void OnGUI()
{
STYLE = new GUIStyle(UnityEngine.GUI.skin.label)
{
richText = true,
};
EditorGUILayout.ObjectField(EventSystem.current, typeof(EventSystem), true);
EditorGUILayout.ObjectField(EventSystem.current != null ? EventSystem.current.currentSelectedGameObject : null, typeof(GameObject), true);
_scroll = GUILayout.BeginScrollView(_scroll);
GUILayout.Label(content, STYLE);
GUILayout.EndScrollView();
}
private void Update()
{
FindSystem();
if (!eSystem)
{
content = "<b>EventSystem не найдена! </b>";
return;
}
#if ENABLE_INPUT_SYSTEM
if (eSystem.TryGetComponent<InputSystemUIInputModule>(out var module))
{
ProcessInputSystem(module);
}
else
{
content = eSystem.ToString().Replace("(UnityEngine.GameObject)", string.Empty)
.Replace("(UnityEngine.Camera)", string.Empty);
}
#else
content = eSystem.ToString().Replace("(UnityEngine.GameObject)", string.Empty).Replace("(UnityEngine.Camera)", string.Empty);
#endif
Repaint();
}
#if ENABLE_INPUT_SYSTEM
private void ProcessInputSystem(InputSystemUIInputModule module)
{
if (!module) return;
//try
{
var sb = new StringBuilder("<b>Pointer Input Module of type: </b>" + GetType());
sb.AppendLine();
var type = module.GetType().Assembly.GetType("UnityEngine.InputSystem.UI.PointerModel");
var field = type.GetField("eventData");
var pointers =
(IEnumerable)module.GetType().GetField("m_PointerStates",BindingFlags.Instance | BindingFlags.NonPublic).GetValue(module);
foreach (var pointer in pointers)
{
ExtendedPointerEventData eventData = field.GetValue(pointer) as ExtendedPointerEventData;
if (eventData == null)
continue;
sb.AppendLine("<B>Pointer:</b> " + eventData.touchId);
sb.AppendLine(eventData.ToString());
}
content = sb.ToString();
}
//catch (Exception e)
{
}
}
#endif
[MenuItem("Window/" + TITLE)]
public static void OpenWindow()
{
var window = GetWindow<DebugUIEventSystemWindow>(TITLE);
if (!window) window = CreateInstance<DebugUIEventSystemWindow>();
window.ShowUtility();
}
}
}