1
1
using System . Collections . Generic ;
2
2
using UnityEngine ;
3
- using Spiral . Core ;
3
+ using UnityEngine . SceneManagement ;
4
4
5
5
#if UNITY_EDITOR
6
6
using UnityEditor ;
@@ -13,6 +13,18 @@ public class DeadScripts : MonoBehaviour
13
13
public List < ObjectID > deadIDs { get ; private set ; } = new List < ObjectID > ( ) ;
14
14
private SceneFile sceneFile = null ;
15
15
16
+ public bool sceneFileLoaded
17
+ {
18
+ get
19
+ {
20
+ if ( sceneFile == null ) return false ;
21
+ if ( sceneFile . count == 0 ) return false ;
22
+ return true ;
23
+ }
24
+ }
25
+
26
+ public bool isDirty { get { return SceneManager . GetActiveScene ( ) . isDirty ; } }
27
+
16
28
public void SelectDeads ( )
17
29
{
18
30
List < GameObject > selectObjects = new List < GameObject > ( ) ;
@@ -54,10 +66,10 @@ public void UpdateDeadList()
54
66
}
55
67
}
56
68
57
- public void SearchForDeads ( bool updateDeads = true )
69
+ public void SearchForDeads ( )
58
70
{
59
71
// обновляемся
60
- if ( updateDeads ) UpdateDeadList ( ) ;
72
+ UpdateDeadList ( ) ;
61
73
62
74
// прогружаем файл сцены
63
75
sceneFile = new SceneFile ( ) ;
@@ -124,59 +136,78 @@ public void SearchForDeads(bool updateDeads = true)
124
136
[ CustomEditor ( typeof ( DeadScripts ) ) ]
125
137
public class DeadScriptsEditor : Editor
126
138
{
127
- private DeadScripts deadmono = null ;
128
-
139
+ private DeadScripts deadmono = null ;
140
+
129
141
private void OnEnable ( )
130
142
{
131
143
deadmono = serializedObject . targetObject as DeadScripts ;
132
144
}
133
145
134
- public override void OnInspectorGUI ( )
146
+ private void DrawDebugMode ( )
135
147
{
136
148
EditorGUILayout . BeginVertical ( EditorStyles . helpBox ) ;
137
- EditorGUILayout . LabelField ( "ПОИСК МЁРТВЫХ СКРИПТОВ:" , EditorStyles . boldLabel ) ;
138
-
149
+ EditorGUILayout . LabelField ( "Режим отладки:" , EditorStyles . miniBoldLabel ) ;
150
+ deadmono . debug = EditorGUILayout . Toggle ( "Включить режим отладки" , deadmono . debug ) ;
151
+ EditorGUILayout . HelpBox ( "Режим отладки будет выводить в консоль все действия, что может " +
152
+ "существенно замедлить осмотр сцен с большим количеством объектов;" ,
153
+ MessageType . Warning ) ;
154
+ EditorGUILayout . EndVertical ( ) ;
155
+ }
139
156
157
+ private void DrawSimpleMode ( )
158
+ {
140
159
EditorGUILayout . BeginVertical ( EditorStyles . helpBox ) ;
141
- EditorGUILayout . LabelField ( "Только объекты:" , EditorStyles . miniBoldLabel ) ;
160
+ EditorGUILayout . LabelField ( "Только объекты:" , EditorStyles . boldLabel ) ;
142
161
if ( GUILayout . Button ( "Найти и выделить" ) )
143
162
{
144
163
deadmono . UpdateDeadList ( ) ;
145
164
deadmono . SelectDeads ( ) ;
146
165
}
147
- if ( GUILayout . Button ( "Выделить" ) )
148
- {
149
- deadmono . SelectDeads ( ) ;
150
- }
151
- EditorGUILayout . HelpBox ( "При нажатии на [Выделить] выполняется попытка выделить все объекты, " +
152
- "которые ранее были опознаны как содержащие мёртвые скрипты. " +
153
- "Проверьте, что поиск уже был выполнен, " +
154
- "в противном случае используйте опцию [Найти и выделить];" ,
155
- MessageType . Warning ) ;
166
+ EditorGUILayout . HelpBox ( "При нажатии выполняется попытка найти и выделить все " +
167
+ "объекты с битыми скриптами, находящиеся на сцене" ,
168
+ MessageType . None ) ;
156
169
EditorGUILayout . EndVertical ( ) ;
170
+ }
157
171
172
+ private void DrawBoxSceneState ( )
173
+ {
158
174
EditorGUILayout . BeginVertical ( EditorStyles . helpBox ) ;
159
- EditorGUILayout . LabelField ( "Проверка файла сцены:" , EditorStyles . miniBoldLabel ) ;
175
+ EditorGUILayout . LabelField ( "Проверка файла сцены:" , EditorStyles . boldLabel ) ;
176
+
177
+ EditorGUILayout . BeginVertical ( EditorStyles . helpBox ) ;
178
+
179
+ EditorGUILayout . BeginHorizontal ( GUI . skin . box ) ;
180
+ GUIStyle styleSceneIsDirty = new GUIStyle ( EditorStyles . boldLabel ) ;
181
+ string sceneIsDirty = deadmono . isDirty ? "СЦЕНА БЫЛА ИЗМЕНЕНА!" : "СЦЕНА СОХРАНЕНА" ;
182
+ styleSceneIsDirty . normal . textColor = deadmono . isDirty ? new Color ( 0.8f , 0.0f , 0.0f ) : Color . gray ;
183
+ EditorGUILayout . LabelField ( sceneIsDirty , styleSceneIsDirty ) ;
184
+ EditorGUILayout . EndHorizontal ( ) ;
160
185
EditorGUILayout . HelpBox ( "Убедитесь, что сцена была сохранена, поскольку поиск будет идти по файлу сцены.\n " +
161
- "Для сцен с большим количеством объектов поиск может идти медленно!" ,
162
- MessageType . Warning ) ;
163
- if ( GUILayout . Button ( "Показать мёртвые GUID (с обновлением)" ) )
164
- {
165
- deadmono . SearchForDeads ( true ) ;
166
- }
167
- if ( GUILayout . Button ( "Показать мёртвые GUID (без обновления)" ) )
186
+ "Для сцен с большим количеством объектов поиск может идти медленно!" ,
187
+ MessageType . Warning ) ;
188
+ EditorGUILayout . EndVertical ( ) ;
189
+
190
+ if ( GUILayout . Button ( "Показать мёртвые GUID" ) )
168
191
{
169
- deadmono . SearchForDeads ( false ) ;
192
+ deadmono . SearchForDeads ( ) ;
170
193
}
194
+ EditorGUILayout . HelpBox ( "Поиск идёт по файлу сцены, сопоставляя объекты с битыми скриптами " +
195
+ "с их записями в файле. Все результаты будут выведены в консоль. " +
196
+ "Обратите внимание, что из поиска исключаются скрипты, " +
197
+ "не являющиеся MonoBehaviour, а также дочерние объекты в составе префабов!" ,
198
+ MessageType . None ) ;
199
+
171
200
EditorGUILayout . EndVertical ( ) ;
201
+ }
172
202
203
+ public override void OnInspectorGUI ( )
204
+ {
173
205
EditorGUILayout . BeginVertical ( EditorStyles . helpBox ) ;
174
- EditorGUILayout . LabelField ( "Режим отладки:" , EditorStyles . miniBoldLabel ) ;
175
- deadmono . debug = EditorGUILayout . Toggle ( "Включить режим отладки" , deadmono . debug ) ;
176
- EditorGUILayout . HelpBox ( "Режим отладки будет выводить в консоль все действия, что может " +
177
- "существенно замедлить осмотр сцен с большим количеством объектов;" ,
178
- MessageType . Warning ) ;
179
- EditorGUILayout . EndVertical ( ) ;
206
+ EditorGUILayout . LabelField ( "ПОИСК МЁРТВЫХ СКРИПТОВ:" , EditorStyles . boldLabel ) ;
207
+
208
+ DrawDebugMode ( ) ;
209
+ DrawSimpleMode ( ) ;
210
+ DrawBoxSceneState ( ) ;
180
211
181
212
EditorGUILayout . EndVertical ( ) ;
182
213
}
0 commit comments