This util provides easy search and replace for the missing scripts GUIDs in your Unity3D scene.
Provided functionality
- Can find all GameObjects with missing scripts on currenty opened Scene.
- Can find GUIDs of both alive and missing MonoBehaviour scripts (it does not apply to Unity "system" scripts such as Transform, Camera and so on because they don't have m_Script field).
- Can select group of objects with the same lost script (if these objects are not prefabed), so you can mass replace broken script without having to do this with each script individually.
- Allows you to browse and survey script's and GameObject's scene file's entry in Unity window.
- Project has full and switchable ENG/RU localization in EditorWindow.
Current limitations:
- Works under Unity 2019.2, 2019.3 and higher. Earlier versions of Unity do not support some functions.
- Works only in opened scene, not in whole project.
- Cannot find GUIDs if missing scripts objects are inside prefabs (still, objects with broken scripts can be found as well), except object in prefab's root. This limitation is associated with a scene file search.
- Can be very slow on the scenes with big amount (more than thousand) of objects.
- Most of the comments in the code are still in Russian. Sorry, too lazy to rewrite everything into English (and most of the code is self-explanatory).
Copy folder into your project Assets folder, than rename it into something like "DeadScriptSearcher" or whatever you want. After that, you can see Spiral Tools added to your upper menu in UnityEditor. There are two menu items: Dead Script Searcher and Object Auditor that open two different EditorWindow's.
- Dead Script Searcher opens windows to search missing scripts in your scene.
- Object Auditor allows you to inspect GameObjects selected in Scene Hierarchy, looking for GUID's and some other information on alive and dead scripts on it.
Dead Script Searcher window
Here are some elements:
- Editor - navigates you to Dead Script Searcher editor's script.
- Language - switch localization.
- Re-upload scene text - allows you to forcely re-import current %insertnamehere%.scene into Searcher. Be aware that this button loads scene file, not current state of the scene, so you need to save scene first to be sure Searcher and Auditor are working correctly (if not, you may have some warnings/errors in Unity's console).
- Debug mode - if you use debug mode, all actions during finding dead GUIDs procedure will be outputed in Unity's console along with corresponding data. This can significally slowdown the checkup of the scenes with a large number of objects.
- Find and select objects with dead scripts - do exactly what it says. It's very fast, but it does not looks for dead GUID's. Just find dead objects, nothing more. But it can find missing scripts in prefabs (still you cannot see their data).
- Find dead GUIDs in the scene - collects and display all missing scripts data on the scene (excluding prefabed objects and scripts without m_Script fields). For each unique GUID, Searcher generates panel with:
- Script GUID (selectable).
- Number of MonoBehaviours (most often, but not necessarily equal to GameObjects count) with this type of missing script. This is foldout filed with clickable MonoBehaviours' IDs, so you can find every script on scene individually. Every account have individual MonoBehaviour's data: its ID in scene file, button to select target GameObject, corresponding scene file's entry. If script has any custom serialized fields, you will see their variables names and values in this entry.
- Button to select group of the objects with the same script.
Object Auditor window
Like Dead Script Searcher window, it has an editor script field, localization switcher and button for re-uploading the scene file.
Everytime you select some object(s) on scene, an information panels appears in Object Auditor window. Each panel corresponds to one of the selected objects. It contains:
- File ID - GameObject's scene file ID.
- File caption IDX - the number of the string in scene file in which the GameObject's caption contains.
- Show components list - foldout that contains brief GameObject's components information such as: script name, scene file ID, script GUID (if has one, if not - there is an explanation why: because of prefabed or not MonoBehaviour). If script is dead, it shows light red, otherwise - light green.
You can see the implementation of rendering editor script fields in SpiralEditor.cs and use it freely in your projects. Just do not forget that the Editor script should always be in a separate file with a name identical to the class name, otherwise Unity will not see it as MonoScript.
The MIT License (MIT)
Copyright © 2020 SpiralBlack https://github.com/SpiralBlack15
This project provides under the MIT License, see LICENSE file. Most .cs files in project include part of license about no warranity. Just remember it :)
Утилита предоставляет удобный инструментарий для поиска и замены GUID'ов от потерянных скриптов в сцене Unity3D.
Функционал:
- Находит все объекты с потерянными скриптами на открытой сцене.
- Может находить GUID'ы как живых, так и мёртвых MonoBehaviours (это не относится к таким "системным" скриптам Unity как Transform, Camera и подобным, поскольку они не имеют поля m_Script).
- Может выделять группу объектов, имеющих одинаковый потерянный скрипт (если эти объекты не входят в состав префаба, см. ограничения), так что вы можете массово заменять потерянные скрипты существующими без необходимости делать это с каждым скриптом по отдельности.
- Позволяет просматривать в окне Unity записи конкретных скриптов и объектов из файла сцены.
- Проект имеет две равноценные переключаемые локализации ENG/RU в окне редактора.
Текущие ограничения:
- Работает под версиями Unity 2019.2, 2019.3 и выше. Ранние версии Unity не поддерживают часть функций.
- Работает только с текущей открытой сценой, не с проектом в целом.
- Не может идентифицировать GUID'ы мёртвых скрпитов, если те находятся на объектах, входящих в состав префаба (тем не менее, сами объекты она находит), если только объект не является корнем префаба. Это ограничение связано с поиском GUID'ов через файл сцены.
- Может быть очень медленной для сцен с большим количеством (больше тысячи) объектов.
- Большая часть комментариев в коде на русском. Хотя для русской локали это скорее плюс, чем минус.
Скопируйте папку в ваш проект, после чего переименуйте её во что-то типа "DeadScriptSearcher", на ваше усмотрение. После этого в верхнее меню Unity будет добавлен выпадающий список Spiral Tools. В нём два элемента: Dead Script Searcher и Object Auditor, которые открывают отдельные перетаскиваемые окна в редакторе.
- Dead Script Searcher (Поиск мёртвых скриптов) открывает окно поиска мёртвых скриптов в текущей сцене.
- Object Auditor (Ревизор) позволяет инспектировать выделенные в иерархии объекты, просматривая GUID'ы и прочую информацию с их скриптов, как живых, так и мёртвых.
Окно "Поиск мёртвых скриптов"
Здесь есть несколько элементов:
- Editor - показывает EditorWindow-скрипт от Dead Script Searcher'a.
- Язык - переключатель локализации.
- Синхронизировать текст сцены с её файлом - позволяет принудительно импортировать %названиесцены%.scene в Поисковик. Обратите внимание на то, что эта кнопка загружает файл сцены, не текущее состояние сцены, поэтому необходимо сначала сохранить сцену, чтобы быть уверенным, что Поисковик и Ревизор работают правильно (если нет, у вас могут изредка сыпаться сообщения в консоль, что что-то там не найдено).
- Режим отладки - если включен, все действия Поисковика во время поиска мёртвых GUID'ов будут выводиться в консоль вместе со всей сопутствующей информацией. Это может существенно замедлить поиск по сценам с большим количеством объектов.
- Найти и выделить объекты с мёртвыми скриптами - делает именно то, что написано: просто быстро находит все объекты, имеющие на себе битые скрипты. Эта функция не ищет мёртвые GUID'ы, однако находит объекты, являющиеся частью префаба.
- Найти мёртвые GUID в сцене - собирает и отображает всю информацию о потерянных скриптах на сцене (исключая объекты, являющиеся частью, но не корнем префаба, а также скрипты, не имеющие поля m_Script). Для каждого уникального GUID'а Поисковик формирует отдельную панель со следующими элементами:
- GUID скрипта (выделяемый).
- Количество MonoBehaviour (в основном, но необязательно соответствует количеству GameObject'ов), имеющих данный тип потерянного скрипта. Это выпадающий список, содержащий кликабельные подпункты с номерами MonoBehaviour'ов, позволяющие найти каждый скрипт на сцене индивидуально. Каждый такой аккаунт содержит данные о конкретном MonoBehaviour: его ID в файле сцены, кнопку для выбора соответствующего GameObject'a, а также соответствующую запись из файла сцены (если скрипт имел сериализованные поля, вы увидите названия переменных и их значения в записи).
- Кнопка для группового выделения скриптов с одинаковым GUID.
Окно "Ревизор"
Как и окно Поисковика, имеет поле, указывающее на скрипт редактора, переключатель локализации и кнопку для перезагрузки файла сцены.
Каждый раз, когда вы выделяете объект(ы) на сцене, в окне Ревизора появляются плашки, соответствующие выбранным объектам. Каждая плашка содержит:
- File ID - ID выбранного объекта в файле сцены.
- File caption IDX - номер строки, соответствующей заголовку данного объекта в файле сцены.
- Развернуть список компонент - разворачивающийся лист, содержащий краткую информацию по всем компонентам на объекте. Информация по каждому компоненту содержит: название скрипта компонента, индекс компонента в файле сцены, GUID скрипта (если есть, если нет - пояснение, почему нет: например, потому что объект является частью префаба ли не является MonoBehaviour). Если скрипт потерян, он будет высвечиваться светло-красным, если всё в порядке - светло-зелёным.
Реализацию отрисовки полей скрипта редактора можете посмотреть в SpiralEditor.cs и свободно использовать. Не забывайте, что скрипт Editor'a всегда должен лежать в отдельном файле с названием, идентичным названию класса, иначе Unity его не воспринимает как MonoScript.
The MIT License (MIT)
Copyright © 2020 SpiralBlack https://github.com/SpiralBlack15
Проект предоставляется в комплекте с открытой лицензией MIT, по всем подробностям - в файл лицензии (или в Интернет, если нужен перевод на русский). Большая часть .cs файлов проекта содержит часть лицензии, относящуюся, в первую очередь, к отсутствию каких бы то ни было гарантий и ответственности. Мало ли, вдруг вы не читаете лицензии прежде чем копировать всё без разбору :)